File: check_group

package info (click to toggle)
tiger 2.2.4-22
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,188 kB
  • ctags: 240
  • sloc: sh: 8,388; ansic: 2,109; makefile: 141; perl: 106
file content (139 lines) | stat: -rwxr-xr-x 3,291 bytes parent folder | download
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
#!/bin/sh
#
#     tiger - A UN*X security checking system
#     Copyright (C) 1993 Douglas Lee Schales, David K. Hess, David R. Safford
#
#     Please see the file `COPYING' for the complete copyright notice.
#
# check_group  - 06/14/93
#
#-----------------------------------------------------------------------------
#
TigerInstallDir='.'

#
# Set default base directory.
# Order or preference:
#      -B option
#      TIGERHOMEDIR environment variable
#      TigerInstallDir installed location
#
basedir=${TIGERHOMEDIR:=$TigerInstallDir}

for parm
do
   case $parm in
   -B) basedir=$2; break;;
   esac
done

#
# Verify that a config file exists there, and if it does
# source it.
#
[ ! -r $basedir/config ] && {
  echo "--ERROR-- [init002e] No 'config' file in \`$basedir'."
  exit 1
}

. $basedir/config

. $BASEDIR/initdefs
#
# If run in test mode (-t) this will verify that all required
# elements are set.
#
[ "$Tiger_TESTMODE" = 'Y' ] && {
  haveallcmds AWK CAT GEN_GROUP_SETS GREP JOIN MV RM SORT UNIQ || exit 1
  haveallfiles BASEDIR WORKDIR || exit 1
  
  echo "--CONFIG-- [init003c] $0: Configuration ok..."
  exit 0
}

#------------------------------------------------------------------------
echo
echo "# Performing check of group files..."

haveallcmds GEN_GROUP_SETS CAT SORT AWK UNIQ GREP JOIN MV || exit 1
haveallfiles BASEDIR WORKDIR || exit 1

$GEN_GROUP_SETS > $WORKDIR/grp.list.$$

saveifs=$IFS

$CAT $WORKDIR/grp.list.$$ > $WORKDIR/grp2.$$
newfile=$WORKDIR/grp2new.$$

while read group1
do
  src1=`$CAT $group1.src`
  $SORT $group1 > $WORKDIR/g1name.$$
  $SORT -t: +2 -3 $group1 > $WORKDIR/g1gid.$$

  $AWK -F: '{print $1}' $WORKDIR/g1name.$$ |
  $UNIQ -d |
  while read grpname
  do
    message WARN grp001w "" "Groupname \`$grpname' exists multiple times in $src1."
  done

  $AWK -F: '{print $3}' $WORKDIR/g1gid.$$ |
  $UNIQ -d |
  while read gid
  do
    message WARN grp002w "" "GID $gid exists multiple times in $src1."
  done

  $AWK -F: 'NF != 4 {print}' $WORKDIR/g1gid.$$ |
  while read entry
  do
    message WARN grp003w "$entry" "Malformed entry in $src1:"
  done
  
  $GREP -v "^$group1\$" $WORKDIR/grp2.$$ |
  while read group2
  do
    src2=`$CAT $group2.src`

    $SORT $group2 > $WORKDIR/g2name.$$
    $SORT -t: +2 -3 $group2 > $WORKDIR/g2gid.$$
    $JOIN -t: -o 1.1 1.3 2.3 $WORKDIR/g1name.$$ $WORKDIR/g2name.$$ |
    {
      IFS=:
      while read grpname gid1 gid2
      do
	IFS=$saveifs
	[ "$gid1" != "$gid2" ] && {
	  message WARN grp004w "" "GID conflict for group \`$grpname' between $src1 (gid = $gid1) and $src2 (gid = $gid2)."
	}
	IFS=:
      done
    }

    $JOIN -t: -j 3 -o 1.3 1.1 2.1 $WORKDIR/g1gid.$$ $WORKDIR/g2gid.$$ |
    {
      IFS=:
      while read gid name1 name2
      do
	IFS=$saveifs
	[ "$name1" != "$name2" ] && {
	  message WARN grp005w "" "Groupname conflict for gid $gid between $src1 (group $name1) and $src2 (group $name2)."
	}
	IFS=:
      done
    }
    echo "$group2" >> $newfile
    delete $WORKDIR/g2gid.$$ $WORKDIR/g2name.$$
  done
  delete $WORKDIR/g1gid.$$ $WORKDIR/g1name.$$ $WORKDIR/grp2.$$
  [ -s $newfile ] && $MV $newfile $WORKDIR/grp2.$$
done < $WORKDIR/grp.list.$$ |
$OUTPUTMETHOD

while read file
do
  delete $file $file.src
done < $WORKDIR/grp.list.$$

delete $WORKDIR/grp.list.$$ $WORKDIR/grp2new.$$