/var/lib/pcp/testsuite/994 is in pcp-testsuite 4.0.1-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 | #!/bin/sh
# PCP QA Test No. 994
# Try to check permissions of package artifacts.
#
# With a single --fix option, is silent except if there is a problem
# and repairs any damage (this is used from check).
#
# See src/mkpermslist and src/permslist.
#
# Copyright (c) 2013 Ken McDonell. All Rights Reserved.
#
fix=false
[ $# -eq 1 -a "$1" = "--fix" ] && fix=true
seq=`basename $0`
$fix || echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
status=0 # success is the default!
$sudo rm -rf $tmp.* $seq.full
trap "cd $here; rm -rf $tmp.*; exit \$status" 0 1 2 3 15
if [ ! -f src/permslist ]
then
echo "Arrgh .. src/permslist is missing. Need to"
echo " $ cd src; ./mkpermslist"
echo "in a git tree containg the PCP source and then try again."
status=1
exit
fi
root_group=root
case $PCP_PLATFORM
in
freebsd|netbsd|openbsd|darwin)
root_group=wheel
;;
esac
# real QA test starts here
# permslist format ...
# src/pmdas/mmv/GNUmakefile|1777|root|root|/var/tmp/mmv
# but also need to expand PCP env vars we expect to find
sed -e 's/ /\\ /g' -e 's/|/ /g' <src/permslist \
-e 's@$(PCP_USER)@'$PCP_USER@g \
-e 's@$(PCP_GROUP)@'$PCP_GROUP@g \
-e 's@$(PCP_PMLOGGERCONTROL_PATH)@'$PCP_PMLOGGERCONTROL_PATH@g \
-e 's@$(PCP_PMIECONTROL_PATH)@'$PCP_PMIECONTROL_PATH@g \
-e 's@$(PCP_TMP_DIR)@'$PCP_TMP_DIR@g \
-e 's@$(PCP_LOG_DIR)@'$PCP_LOG_DIR@g \
-e 's@$(PCP_VAR_DIR)@'$PCP_VAR_DIR@g \
-e 's@$(PCP_RUN_DIR)@'$PCP_RUN_DIR@g \
-e 's@$(PCP_NSSDB_DIR)@'$PCP_NSSDB_DIR@g \
-e 's@$(PCP_SHARE_DIR)@'$PCP_SHARE_DIR@g \
-e 's@$(PCP_SYSCONF_DIR)@'$PCP_SYSCONF_DIR@g \
| while read makefile mode owner group target optional
do
if [ ! -f "$target" -a ! -d "$target" ]
then
[ -z "$optional" ] && \
echo "Error: $target: not found, should have been installed from $makefile"
else
_mode=""
_owner=""
_group=""
if [ $PCP_PLATFORM = linux -o $PCP_PLATFORM = solaris ]
then
# stat line of interest ...
# Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
#
eval `stat $target | sed -n -e '/^Access:.*Uid:.*Gid:/{
s/Access: *(/_mode=/
s/\/.*) *Uid: *( *[0-9][0-9]*\/ */ _owner=/
s/) *Gid: *( *[0-9][0-9]*\/ */ _group=/
s/).*//
s/=0*/=/g
p
}'`
elif [ $PCP_PLATFORM = freebsd -o $PCP_PLATFORM = darwin -o $PCP_PLATFORM = netbsd -o $PCP_PLATFORM = openbsd ]
then
# stat line of interest ...
# _mode=-rw-r--r-- _user=kenj _group=kenj
eval `stat -f '_mode=%Sp _owner=%Su _group=%Sg' $target`
_mode=`echo $_mode | sed -e 's/.//' -e 's/---/0/g' -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g'`
else
echo "Arrgh, need stat(1) handling for $PCP_PLATFORM"
status=1
break
fi
if [ -z "$_mode" -o -z "$_owner" -o -z "$_group" ]
then
echo "Arrgh, failed to extract mode, owner and group from stat(1) output ..."
stat $target
status=1
break
fi
[ "$group" = root ] && group="$root_group"
#debug# echo "$target: mode: have $_mode expect $mode"
#debug# echo "$target: owner: have $_owner expect $owner"
#debug# echo "$target: group: have $_group expect $group"
if [ "$_mode" != "$mode" ]
then
echo "$target: wrong mode: expected $mode (from $makefile), found $_mode"
ls -ld $target
$fix && ( $sudo chmod $mode $target ; echo "Fixed." )
fi
if [ "$_owner" != "$owner" ]
then
echo "$target: wrong owner: expected $owner (from $makefile), found $_owner"
ls -ld $target
$fix && ( $sudo chown $owner $target ; echo "Fixed." )
fi
if [ "$_group" != "$group" ]
then
echo "$target: wrong group: expected $group (from $makefile), found $_group"
ls -ld $target
$fix && ( $sudo chgrp $group $target ; echo "Fixed." )
fi
fi
done
# Now expect only root owned things below $PCP_SYSCONF_DIR,
# except for nssdb which has ownership $PCP_USER:$PCP_GROUP
# (pmproxy is both client and server and needs r/w access).
#
find $PCP_SYSCONF_DIR ! -user root | \
grep -v "^$PCP_NSSDB_DIR" \
> $tmp.out
if [ -s $tmp.out ]
then
echo "Arrgh ... these files should be owned by root"
cat $tmp.out | xargs ls -ld
$fix && ( ( cat $tmp.out | xargs $sudo chown root:$root_group ) ; echo "Fixed." )
fi
# success, all done
status=0
exit
|