1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
#!/bin/sh
# PCP QA Test No. 1438
# exercise __pmAcc*() methods
#
# non-valgrind variant, see qa/1439 for the valgrind variant
#
# Copyright (c) 2023 Ken McDonell. All Rights Reserved.
#
if [ $# -eq 0 ]
then
seq=`basename $0`
echo "QA output created by $seq"
else
# use $seq from caller, unless not set
[ -n "$seq" ] || seq=`basename $0`
echo "QA output created by `basename $0` $*"
fi
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
do_valgrind=false
if [ "$1" = "--valgrind" ]
then
_check_valgrind
do_valgrind=true
elif _prefer_valgrind
then
[ $PCPQA_VALGRIND = both ] || \
_notrun "valgrind variant qa/1439 will be run"
fi
root_group_is_wheel=false
case $PCP_PLATFORM
in
darwin|freebsd|netbsd|openbsd)
root_group_is_wheel=true
;;
esac
uids="root bin daemon pcp"
for name in $uids
do
grep "^$name:" /etc/passwd >/dev/null || _notrun "no user $name in passwd file"
done
for name in $uids
do
[ "$name" = root ] && $root_group_is_wheel && name=wheel
grep "^$name:" /etc/group >/dev/null || _notrun "no group $name in group file"
done
_cleanup()
{
cd $here
$sudo rm -rf $tmp $tmp.*
}
status=0 # success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
echo "root_group_is_wheel=$root_group_is_wheel" >>$seq_full
_filter()
{
tee -a $seq_full \
| sed -f $tmp.sed
}
# real QA test starts here
if $root_group_is_wheel
then
gids="`echo $uids | sed -e 's/root/wheel/'`"
else
gids="$uids"
fi
echo "=== users ===" | tee -a $seq_full
for name in $uids
do
$PCP_AWK_PROG </etc/passwd >>$tmp.sed -F ':' '
$1 == "'$name'" { printf "s/ *%d %s/ %7s %s/\n",$3,$1,toupper($1),$1 }
'
done
for name in $gids
do
$PCP_AWK_PROG </etc/group >>$tmp.sed -F ':' '
$1 == "'$name'" {
printf "/ %s /s/ [^ ]*,%d(%s)/ %s(%s)/\n",toupper($1),$3,$1,toupper($1),$1
printf "/ %s /s/ %d(%s)/ %s(%s)/\n",toupper($1),$3,$1,toupper($1),$1
}'
done
$root_group_is_wheel && echo 's/[0-9][0-9]*(wheel)/ROOT(root)/' >>$tmp.sed
# some of our target users may be in other groups, esp user "root",
# and some of the target users may be in some of the other target
# groups, so cull the extra ones
#
echo 's/,[0-9][0-9]*([^)]*)//g' >>$tmp.sed
echo 's/,[A-Z][A-Z]*([^)]*)//g' >>$tmp.sed
cat $tmp.sed >>$seq_full
if $do_valgrind
then
_run_valgrind src/usergroup -u $uids
else
src/usergroup -u $uids 2>&1
fi \
| sed -e "s@$tmp@TMP@g" \
| _filter
echo "=== groups ===" | tee -a $seq_full
rm -f $tmp.sed
for name in $gids
do
$PCP_AWK_PROG </etc/group >>$tmp.sed -F ':' '
$1 == "'$name'" { printf "s/ *%d %s/ %7s %s/\n",$3,$1,toupper($1),$1 }
'
done
for name in $uids
do
$PCP_AWK_PROG </etc/passwd >>$tmp.sed -F ':' '
$1 == "'$name'" {
printf "/ %s /s/ [^ ]*,%d(%s)/ %s(%s)/\n",toupper($1),$3,$1,toupper($1),$1
printf "/ %s /s/ %d(%s)/ %s(%s)/\n",toupper($1),$3,$1,toupper($1),$1
}'
done
$root_group_is_wheel && echo 's/ WHEEL wheel / ROOT root /' >>$tmp.sed
$root_group_is_wheel && echo 's/[0-9][0-9]*(root)/ROOT(root)/' >>$tmp.sed
# some of our target groups may be have other users, esp user "root",
# and some of the target users may be in some of the other target
# groups, so cull the extra ones
#
echo 's/,[0-9][0-9]*([^)]*)//g' >>$tmp.sed
echo 's/,[A-Z][A-Z]*([^)]*)//g' >>$tmp.sed
cat $tmp.sed >>$seq_full
if $do_valgrind
then
_run_valgrind src/usergroup -g $gids
else
src/usergroup -g $gids 2>&1
fi \
| sed -e "s@$tmp@TMP@g" \
| _filter
# success, all done
exit
|