| #! /bin/bash |
| # FS QA Test No. 379 |
| # |
| # Check behavior of chown with both user and group quota enabled, |
| # and changing both user and group together via chown(2). |
| # |
| #----------------------------------------------------------------------- |
| # Copyright (c) 2000-2002 Silicon Graphics, 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! |
| |
| # get standard environment, filters and checks |
| . ./common/rc |
| . ./common/filter |
| . ./common/quota |
| |
| _cleanup() |
| { |
| _scratch_unmount 2>/dev/null |
| rm -f $tmp.* |
| } |
| trap "_cleanup; exit \$status" 0 1 2 3 15 |
| |
| # real QA test starts here |
| _supported_fs generic |
| _supported_os Linux |
| |
| cp /dev/null $seqres.full |
| chmod ugo+rwx $seqres.full |
| |
| _require_scratch |
| _require_quota |
| _require_xfs_quota_foreign |
| |
| _filter_stat() |
| { |
| sed " |
| /^Access:/d; |
| /^Modify:/d; |
| /^Change:/d; |
| s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/; |
| s/Inode: *[0-9][0-9]*/Inode: <INODE>/; |
| s,$SCRATCH_MNT,<MOUNT>,; |
| " | tr -s ' ' |
| } |
| |
| _exercise() |
| { |
| _scratch_mkfs >/dev/null 2>&1 |
| _qmount |
| |
| umask 022 |
| touch $SCRATCH_MNT/testfile |
| if src/feature -c $SCRATCH_MNT/testfile; then |
| : |
| else |
| _notrun "Installed fileutils doesn't support 32 bit uids/gids" |
| fi |
| |
| chown 12345 $SCRATCH_MNT/testfile |
| chgrp 54321 $SCRATCH_MNT/testfile |
| src/lstat64 $SCRATCH_MNT/testfile | _filter_stat |
| |
| chown 34567 $SCRATCH_MNT/testfile |
| chgrp 76543 $SCRATCH_MNT/testfile |
| src/lstat64 $SCRATCH_MNT/testfile | _filter_stat |
| |
| chown 56789 $SCRATCH_MNT/testfile |
| chgrp 98765 $SCRATCH_MNT/testfile |
| src/lstat64 $SCRATCH_MNT/testfile | _filter_stat |
| |
| # finally give back to original owners |
| chown 12345 $SCRATCH_MNT/testfile |
| chgrp 54321 $SCRATCH_MNT/testfile |
| src/lstat64 $SCRATCH_MNT/testfile | _filter_stat |
| |
| echo |
| _scratch_unmount 2>/dev/null |
| } |
| |
| _scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed!" |
| |
| _qmount_option "usrquota,grpquota" |
| _qmount |
| if src/feature -G $SCRATCH_DEV ; then |
| : |
| else |
| _notrun "No quota support at mount time" |
| fi |
| _scratch_unmount 2>/dev/null |
| |
| _qmount_option "rw" # no quota options |
| echo "*** Default mount options" |
| _exercise |
| |
| _qmount_option "usrquota" |
| echo "*** User quota mount option" |
| _exercise |
| |
| _qmount_option "grpquota" |
| echo "*** Group quota mount option" |
| _exercise |
| |
| _qmount_option "usrquota,grpquota" |
| echo "*** User and Group quota mount options" |
| _exercise |
| |
| # success, all done |
| status=0 |
| exit |