mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
58 lines
4.6 KiB
Text
58 lines
4.6 KiB
Text
|
# 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
|