X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=blobdiff_plain;f=tests%2Fgeneric%2F193;h=fd0ebbf64239987ec4e8de96bafda3e0e2aa7301;hp=cdf04c2c0b984d10ce211aa22203691acb0d74a2;hb=ace9db40f92920d9a7767197d8967d6d01df3eb9;hpb=0efd4f4d483a725212f531bc2ed964de2766b1cd diff --git a/tests/generic/193 b/tests/generic/193 index cdf04c2c..fd0ebbf6 100755 --- a/tests/generic/193 +++ b/tests/generic/193 @@ -1,26 +1,11 @@ #! /bin/bash -# FS QA Test No. 193 -# -# Test permission checks in ->setattr -# -#----------------------------------------------------------------------- +# SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2008 Christoph Hellwig. # -# 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. +# FS QA Test No. 193 # -# 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 -#----------------------------------------------------------------------- +# Test permission checks in ->setattr # - seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" @@ -43,9 +28,9 @@ tag="added by qa $seq" # _create_files() { - touch test.root - touch test.${qa_user} - chown ${qa_user}:${qa_user} test.${qa_user} + touch $test_root + touch $test_user + chown ${qa_user}:${qa_user} $test_user } # @@ -53,8 +38,13 @@ _create_files() # _cleanup_files() { - rm -f test.${qa_user} - rm -f test.root + rm -f $test_user + rm -f $test_root +} + +_filter_files() +{ + sed -e "s,$test_root,test.root,g" -e "s,$test_user,test.user,g" } # get standard environment, filters and checks @@ -63,10 +53,13 @@ _cleanup_files() # real QA test starts here _supported_fs generic -_supported_os Linux +_require_test _require_user -_need_to_be_root +_require_chown + +test_root=$TEST_DIR/$seq.$$.root +test_user=$TEST_DIR/$seq.$$.user # # make sure we have a normal umask set @@ -83,17 +76,17 @@ echo _create_files echo "user: chown root owned file to qa_user (should fail)" -su ${qa_user} -c "chown ${qa_user} test.root" +su ${qa_user} -c "chown ${qa_user} $test_root" 2>&1 | _filter_files echo "user: chown root owned file to root (should fail)" -su ${qa_user} -c "chown root test.root" +su ${qa_user} -c "chown root $test_root" 2>&1 | _filter_files echo "user: chown qa_user owned file to qa_user (should succeed)" -su ${qa_user} -c "chown ${qa_user} test.${qa_user}" +su ${qa_user} -c "chown ${qa_user} $test_user" # this would work without _POSIX_CHOWN_RESTRICTED echo "user: chown qa_user owned file to root (should fail)" -su ${qa_user} -c "chown root test.${qa_user}" +su ${qa_user} -c "chown root $test_user" 2>&1 | _filter_files _cleanup_files @@ -107,19 +100,19 @@ echo _create_files echo "user: chgrp root owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.root" +su ${qa_user} -c "chgrp root $test_root" 2>&1 | _filter_files echo "user: chgrp qa_user owned file to root (should fail)" -su ${qa_user} -c "chgrp root test.${qa_user}" +su ${qa_user} -c "chgrp root $test_user" 2>&1 | _filter_files echo "user: chgrp root owned file to qa_user (should fail)" -su ${qa_user} -c "chgrp ${qa_user} test.root" +su ${qa_user} -c "chgrp ${qa_user} $test_root" 2>&1 | _filter_files echo "user: chgrp qa_user owned file to qa_user (should succeed)" -su ${qa_user} -c "chgrp ${qa_user} test.${qa_user}" +su ${qa_user} -c "chgrp ${qa_user} $test_user" #echo "user: chgrp qa_user owned file to secondary group (should succeed)" -#su ${qa_user} -c "chgrp ${group2} test.${qa_user}" +#su ${qa_user} -c "chgrp ${group2} $test_user" _cleanup_files @@ -133,10 +126,10 @@ echo _create_files echo "user: chmod a+r on qa_user owned file (should succeed)" -su ${qa_user} -c "chmod a+r test.${qa_user}" +su ${qa_user} -c "chmod a+r $test_user" echo "user: chmod a+r on root owned file (should fail)" -su ${qa_user} -c "chmod a+r test.root" +su ${qa_user} -c "chmod a+r $test_root" 2>&1 | _filter_files # # Setup a file owned by the qa_user, but with a group ID that @@ -153,12 +146,12 @@ su ${qa_user} -c "chmod a+r test.root" # reg file + file's gid not in process' group set + no approp. privileges -> clear sgid # echo "check that the sgid bit is cleared" -chown ${qa_user}:root test.${qa_user} -chmod g+s test.${qa_user} +chown ${qa_user}:root $test_user +chmod g+s $test_user # and let the qa_user change permission bits -su ${qa_user} -c "chmod a+w test.${qa_user}" -stat -c '%A' test.${qa_user} +su ${qa_user} -c "chmod a+w $test_user" +stat -c '%A' $test_user # # Setup a file owned by the qa_user and with the suid bit set. @@ -166,9 +159,9 @@ stat -c '%A' test.${qa_user} # There is nothing in Posix that says it should but just checking. # echo "check that suid bit is not cleared" -chmod u+s test.${qa_user} -chmod a+w test.${qa_user} -stat -c '%A' test.${qa_user} +chmod u+s $test_user +chmod a+w $test_user +stat -c '%A' $test_user _cleanup_files @@ -196,35 +189,72 @@ _create_files echo "check that suid/sgid bits are cleared after successful chown..." echo "with no exec perm" -chmod ug+s test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with user exec perm" -chmod ug+s test.${qa_user} -chmod u+x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod u+x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with group exec perm" -chmod ug+s test.${qa_user} -chmod g+x test.${qa_user} -chmod u-x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod g+x $test_user +chmod u-x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user echo "with user+group exec perm" -chmod ug+s test.${qa_user} -chmod ug+x test.${qa_user} -echo -n "before: "; stat -c '%A' test.${qa_user} -chown root test.${qa_user} -echo -n "after: "; stat -c '%A' test.${qa_user} +chmod ug+s $test_user +chmod ug+x $test_user +echo -n "before: "; stat -c '%A' $test_user +chown root $test_user +echo -n "after: "; stat -c '%A' $test_user _cleanup_files +_create_files +# Now test out the clear of suid/sgid for truncate +# +echo "check that suid/sgid bits are cleared after successful truncate..." + +echo "with no exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with user exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod u+x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with group exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod g+x $test_user +chmod u-x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + +echo "with user+group exec perm" +echo frobnozzle >> $test_user +chmod ug+s $test_user +chmod ug+x $test_user +echo -n "before: "; stat -c '%A' $test_user +su ${qa_user} -c "echo > $test_user" +echo -n "after: "; stat -c '%A' $test_user + # # Test ATTR_*TIMES_SET # @@ -235,10 +265,10 @@ echo _create_files echo "user: touch qa_user file (should succeed)" -su ${qa_user} -c "touch test.${qa_user}" +su ${qa_user} -c "touch $test_user" echo "user: touch root file (should fail)" -su ${qa_user} -c "touch test.root" +su ${qa_user} -c "touch $test_root" 2>&1 | _filter_files _cleanup_files