| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2016 Red Hat. All Rights Reserved. |
| # |
| # FS QA Test 375 |
| # |
| # Check if SGID is cleared upon chmod / setfacl when the owner is not in the |
| # owning group. |
| # |
| 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 |
| . ./common/attr |
| |
| # real QA test starts here |
| _supported_fs generic |
| _require_test |
| _require_runas |
| _require_acls |
| |
| cd $TEST_DIR |
| |
| # try with both regular file and directory |
| for filetype in regular dir; do |
| |
| case $filetype in |
| regular) |
| testfile=testfile.$seq |
| rm -f $testfile |
| touch $testfile |
| ;; |
| *) |
| testfile=testdir.$seq |
| rm -rf $testfile |
| mkdir $testfile |
| ;; |
| esac |
| |
| chown 100:100 $testfile |
| |
| echo '*** SGID should remain set (twice)' |
| chmod 2755 $testfile |
| _runas -u 100 -g 100 -- chmod 2777 $testfile |
| stat -c %A $testfile |
| chmod 2755 $testfile |
| _runas -u 100 -g 100 -- setfacl -m u::rwx,g::rwx,o::rwx $testfile |
| stat -c %A $testfile |
| |
| echo '*** SGID should be cleared (twice)' |
| chmod 2755 $testfile |
| _runas -u 100 -g 101 -- chmod 2777 $testfile |
| stat -c %A $testfile |
| chmod 2755 $testfile |
| _runas -u 100 -g 101 -- setfacl -m u::rwx,g::rwx,o::rwx $testfile |
| stat -c %A $testfile |
| |
| echo '*** Expected failure' |
| _runas -u 101 -g 101 -- chmod 2777 $testfile |
| done |
| |
| status=0 |
| exit |