#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2016 Red Hat Inc., All Rights Reserved. # # FS QA Test 355 # # Test clear of suid/sgid on direct write. # 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 rm -f $seqres.full # real QA test starts here _supported_fs generic _supported_os Linux _require_test _require_user _require_odirect testfile=$TEST_DIR/$seq.test rm -f $testfile do_io() { su $qa_user -c "$XFS_IO_PROG -d -c 'pwrite 0 4k' $testfile" \ >>$seqres.full } echo "Check that suid/sgid bits are cleared after direct write" # create testfile and set base ownership & permission echo "this is a test" >> $testfile chmod 644 $testfile chown $qa_user:$qa_user $testfile echo "== with no exec perm" chmod ug+s $testfile echo -n "before: "; stat -c '%A' $testfile do_io echo -n "after: "; stat -c '%A' $testfile echo "== with user exec perm" chmod ug+s $testfile chmod u+x $testfile echo -n "before: "; stat -c '%A' $testfile do_io echo -n "after: "; stat -c '%A' $testfile echo "== with group exec perm" chmod ug+s $testfile chmod g+x $testfile chmod u-x $testfile echo -n "before: "; stat -c '%A' $testfile do_io echo -n "after: "; stat -c '%A' $testfile echo "== with user+group exec perm" chmod ug+s $testfile chmod u+x $testfile echo -n "before: "; stat -c '%A' $testfile do_io echo -n "after: "; stat -c '%A' $testfile # success, all done status=0 exit