From 88d00424cff193597493c7b3d7c318ecaa536d54 Mon Sep 17 00:00:00 2001 From: Eryu Guan Date: Thu, 25 Aug 2016 16:16:12 +0800 Subject: [PATCH] overlay: sgid inheritance over whiteout Newly created files and dirs should inherit sgit bit from parent dir, no matter the new files & dirs are created over whiteout or not. Reviewed-by: Dave Chinner Signed-off-by: Eryu Guan --- tests/overlay/015 | 97 +++++++++++++++++++++++++++++++++++++++++++ tests/overlay/015.out | 6 +++ tests/overlay/group | 1 + 3 files changed, 104 insertions(+) create mode 100755 tests/overlay/015 create mode 100644 tests/overlay/015.out diff --git a/tests/overlay/015 b/tests/overlay/015 new file mode 100755 index 00000000..c39caed7 --- /dev/null +++ b/tests/overlay/015 @@ -0,0 +1,97 @@ +#! /bin/bash +# FS QA Test 015 +# +# SGID bit inheritance over whiteout. +# +#----------------------------------------------------------------------- +# Copyright (c) 2016 Red Hat Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs overlay +_supported_os Linux +_require_scratch +_require_user +_require_group + +# Remove all files from previous tests +_scratch_mkfs + +# set umask to make output deterministic +umask 022 + +# Create test dir in lower dir and set sgid bit +lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR +mkdir -p $lowerdir/dir +chown $qa_user:$qa_group $lowerdir/dir +chmod 2775 $lowerdir/dir +touch $lowerdir/dir/testdir +touch $lowerdir/dir/testfile +touch $lowerdir/dir/hardlink + +# mount overlayfs, create new file and dir in parent dir with sgid bit set, new +# files and dirs all should inherit the sgid bit and the group +_scratch_mount + +# new dir +mkdir $SCRATCH_MNT/dir/newdir +stat -c "%A %G" $SCRATCH_MNT/dir/newdir + +# new file +touch $SCRATCH_MNT/dir/newfile +stat -c "%A %G" $SCRATCH_MNT/dir/newfile + +# new dir over whiteout +rm -f $SCRATCH_MNT/dir/testdir +mkdir $SCRATCH_MNT/dir/testdir +stat -c "%A %G" $SCRATCH_MNT/dir/testdir + +# new file over whiteout +rm -f $SCRATCH_MNT/dir/testfile +touch $SCRATCH_MNT/dir/testfile +stat -c "%A %G" $SCRATCH_MNT/dir/testfile + +# new hardlink over whiteout +rm -f $SCRATCH_MNT/dir/hardlink +ln $SCRATCH_MNT/dir/testfile $SCRATCH_MNT/dir/hardlink +stat -c "%A %G" $SCRATCH_MNT/dir/hardlink + +# success, all done +status=0 +exit diff --git a/tests/overlay/015.out b/tests/overlay/015.out new file mode 100644 index 00000000..263509d0 --- /dev/null +++ b/tests/overlay/015.out @@ -0,0 +1,6 @@ +QA output created by 015 +drwxr-sr-x fsgqa +-rw-r--r-- fsgqa +drwxr-sr-x fsgqa +-rw-r--r-- fsgqa +-rw-r--r-- fsgqa diff --git a/tests/overlay/group b/tests/overlay/group index 71eaadb7..84850b19 100644 --- a/tests/overlay/group +++ b/tests/overlay/group @@ -17,3 +17,4 @@ 012 auto quick 013 auto quick 014 auto quick copyup +015 auto quick whiteout -- 2.39.5