|
@@ -0,0 +1,57 @@
|
|
|
+# Set up files and directories with known ownership
|
|
|
+FROM busybox AS source
|
|
|
+RUN touch /file && chown 100:200 /file \
|
|
|
+ && mkdir -p /dir/subdir \
|
|
|
+ && touch /dir/subdir/nestedfile \
|
|
|
+ && chown 100:200 /dir \
|
|
|
+ && chown 101:201 /dir/subdir \
|
|
|
+ && chown 102:202 /dir/subdir/nestedfile
|
|
|
+
|
|
|
+FROM busybox AS test_base
|
|
|
+RUN mkdir -p /existingdir/existingsubdir \
|
|
|
+ && touch /existingdir/existingfile \
|
|
|
+ && chown 500:600 /existingdir \
|
|
|
+ && chown 501:601 /existingdir/existingsubdir \
|
|
|
+ && chown 501:601 /existingdir/existingfile
|
|
|
+
|
|
|
+
|
|
|
+# Copy files from the source stage
|
|
|
+FROM test_base AS copy_from
|
|
|
+COPY --from=source /file .
|
|
|
+# Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it
|
|
|
+COPY --from=source /dir /dir
|
|
|
+# Copying to an existing target directory will copy the _contents_ of the source directory into it
|
|
|
+COPY --from=source /dir/. /existingdir
|
|
|
+
|
|
|
+RUN e="100:200"; p="/file" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="0:0"; p="/dir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="101:201"; p="/dir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="102:202"; p="/dir/subdir/nestedfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+# Existing files and directories ownership should not be modified
|
|
|
+ && e="500:600"; p="/existingdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="501:601"; p="/existingdir/existingsubdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="501:601"; p="/existingdir/existingfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+# But new files and directories should maintain their ownership
|
|
|
+ && e="101:201"; p="/existingdir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="102:202"; p="/existingdir/subdir/nestedfile"; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi
|
|
|
+
|
|
|
+
|
|
|
+# Copy files from the source stage and chown them.
|
|
|
+FROM test_base AS copy_from_chowned
|
|
|
+COPY --from=source --chown=300:400 /file .
|
|
|
+# Copy to a non-existing target directory creates the target directory (as root), then copies the _contents_ of the source directory into it
|
|
|
+COPY --from=source --chown=300:400 /dir /dir
|
|
|
+# Copying to an existing target directory copies the _contents_ of the source directory into it
|
|
|
+COPY --from=source --chown=300:400 /dir/. /existingdir
|
|
|
+
|
|
|
+RUN e="300:400"; p="/file" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="300:400"; p="/dir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="300:400"; p="/dir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="300:400"; p="/dir/subdir/nestedfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+# Existing files and directories ownership should not be modified
|
|
|
+ && e="500:600"; p="/existingdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="501:601"; p="/existingdir/existingsubdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="501:601"; p="/existingdir/existingfile" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+# But new files and directories should be chowned
|
|
|
+ && e="300:400"; p="/existingdir/subdir" ; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi \
|
|
|
+ && e="300:400"; p="/existingdir/subdir/nestedfile"; a=`stat -c "%u:%g" "$p"`; if [ "$a" != "$e" ]; then echo "incorrect ownership on $p. expected $e, got $a"; exit 1; fi
|