#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. # Copyright (c) 2017 Google, Inc. All Rights Reserved. # # FS QA Test No. 093 # # Test clearing of capabilities on write. # seq=`basename $0` seqres=$RESULT_DIR/$seq here=`pwd` tmp=/tmp/$$ status=1 # FAILure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common/rc . ./common/filter . ./common/attr _cleanup() { [ -n "$TEST_DIR" ] && rm -f $file } filefilter() { sed -e "s#$file#file#" } # real QA test starts here _supported_fs generic _supported_os Linux _require_test _require_attrs _require_user _require_test_program "writemod" _require_command "$SETCAP_PROG" "setcap" _require_command "$GETCAP_PROG" "getcap" rm -f $seqres.full echo "QA output created by $seq" echo "" file=$TEST_DIR/$seq.file rm -f $file touch $file echo "**** Verifying that appending to file clears capabilities ****" $SETCAP_PROG cap_chown+ep $file $GETCAP_PROG $file | filefilter echo data1 >> $file cat $file $GETCAP_PROG $file | filefilter echo echo "**** Verifying that appending to file doesn't clear other xattrs ****" $SETCAP_PROG cap_chown+ep $file $SETFATTR_PROG -n trusted.name -v value $file echo data2 >> $file cat $file $GETFATTR_PROG -m '^trusted\.*' --absolute-names $file | filefilter echo "**** Verifying that chmod doesn't affect open file descriptors ****" rm -f $file touch $file chown $qa_user $file chmod ugo+w $TEST_DIR su $qa_user -c "src/writemod $file" | filefilter cat $file # success, all done status=0 exit