DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T g

⟦090cbf741⟧ TextFile

    Length: 5147 (0x141b)
    Types: TextFile
    Names: »group.chk«

Derivation

└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
    └─⟦ed5edc051⟧ »./cops/1.02/cops.102.tar« 
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
    └─⟦db60b44f1⟧ »./cops/1.02/cops.102.tar.Z« 
        └─⟦ed5edc051⟧ 
            └─⟦this⟧ »cops/group.chk« 

TextFile

:
#
#   group.chk
#
#  Check group file -- /etc/group -- for incorrect number of fields,
# duplicate groups, non-alphanumeric group names, and non-numeric group
# id's.
#
# Awk part based on _passwd_ from _The AWK Programming Language_, page 78
#
#   Mechanism:  Group.check uses awk to ensure that each line of the group
# has 4 fields, as well as examining each line for any duplicate groups or
# any duplicate user id's in a given group by using "sort -u" to ferret
# out any duplications.  It also checks to make sure that the password
# field (the second one) is a "*", meaning the group has no password (a
# group password is usually not necessary because each member listed on 
# the line has all the privilages that the group has.)  All results are
# echoed to standard output.  Finally it ensures that the group names
# are alphanumeric, that the group id's are numeric, and that there are
# no blank lines.  For yellow pages groups, it does the same checking,
# but in order to get a listing of all members of the groups, it does a
# "ypcat group > ./$$" and uses that temporary file for a groupfile.
# It removes the tmp file after using it, of course.
#   The /etc/group file has a very specific format, making the task
# fairly simple.  Normally it has lines with 4 fields, each field
# separated by a colon (:).  The first field is the group name, the second
# field is the encrypted password (an asterix (*) means the group has no
# password, otherwise the first two characters are the salt), the third
# field is the group id number, and the fourth field is a list of user
# ids in the group.  If a line begins with a plus sign (+), it is a yellow
# pages entry.  See group(5) for more information.
#
#
AWK=/bin/awk
SED=/bin/sed
ECHO=/bin/echo
TEST=/bin/test
SORT=/usr/bin/sort
UNIQ=/usr/bin/uniq
YPCAT=/usr/bin/ypcat
RM=/bin/rm

#   Used for Sun C2 security group file.  FALSE (default) will flag
# valid C2 group syntax as an error, TRUE attempts to validate it.
# Thanks to Pete Troxell for pointing this out.
C2=FALSE

etc_group=/etc/group
yp_group=./$$
yp=false

if $TEST -f $YPCAT
	then
if $TEST -s $YPCAT
	then
	$YPCAT group > $yp_group
	if $TEST $? -eq 0
		then
		yp=true
		fi
	fi
fi

# Testing $etc_group for potential problems....

#   First line is for a yellow pages entry in the group file.
# It really should check for correct yellow pages syntax....
$AWK 'BEGIN {FS = ":" } {
	if (substr($1,1,1) != "+") { \
	if ($0 ~ /^[ 	]*$/) { printf("Warning!  Group file, line %d, is blank\n", NR) } else {
	if (NF != 4) { printf("Warning!  Group file, line %d, does not have 4 fields: %s\n", NR, $0) } \
	if ($1 !~ /[A-Za-z0-9]/) {
		printf("Warning!  Group file, line %d, nonalphanumeric user id: %s\n", NR, $0) } \
	if ($2 != "" && $2 != "*") {
		if ("'$C2'" != "TRUE") {
			if (length($2) == 13)
				printf("Warning!  Group file, line %d, group has password: %s\n", NR, $0) }
		else {
			if ("#$"$1 != $2)
				printf("Warning!  Group file, line %d, group has invalid field for C2:\n%s\n", NR, $0) } \
		} \
	if ($3 !~ /[0-9]/) {
		printf("Warning!  Group file, line %d, nonnumeric group id: %s\n", NR, $0) }}}} ' $etc_group

#
#  Look for duplications in groups in $etc_group
#
result=`$AWK -F: '{print $1}' $etc_group | $SORT |$UNIQ -d`
if $TEST "$result"
	then
	$ECHO "Warning!  Duplicate Group(s) found in $etc_group:"
	$ECHO $result
fi

#
#   Next, check for duplicate users in a group in /etc/group.  Let
# awk do all the work (thanks, adri!)
#

# Ignore all groups with less than two members.
#
awk -F: '
	split($4, users, ",") > 1 {
		ct = 0
		for (i in users) {
			curuser = users[i]
			for (j in users) {
				if (j > i && curuser == users[j]) {
					if (ct++ == 0) print "Warning!  Group "$1" has duplicate user(s):"
					print curuser
				}
			}
		}
	}
	' $etc_group


#
# Test yellow pages groups as well
if $TEST "$yp" = "true"
	then
$AWK 'BEGIN {FS = ":" } {
	if ($0 ~ /^[ 	]*$/) { printf("Warning!  YGroup file, line %d, is blank\n", NR) } else {
	if (NF != 4) { printf("Warning!  YGroup file, line %d, does not have 4 fields: %s\n", NR, $0) } \
	if ($1 !~ /[A-Za-z0-9]/) {
		printf("Warning!  YGroup file, line %d, nonalphanumeric user id: %s\n", NR, $0) } \
	if ($2 != "" && $2 != "*") {
		if (length($2) == 13)
			printf("Warning!  YGroup file, line %d, group has password: %s\n", NR, $0) } \
	if ($3 !~ /[0-9]/) {
		printf("Warning!  YGroup file, line %d, nonnumeric group id: %s\n", NR, $0) }}} ' $yp_group

#
#  Look for duplications in groups in yellow pages groups
#
	yresult=`$AWK -F: '{print $1}' $yp_group | $SORT |$UNIQ -d`
	if $TEST "$yresult"
		then
		$ECHO "Warning!  Duplicate Group(s) found in yellow pages group:"
		$ECHO $result
	fi
#
#   Next, check for duplicate users in a group in yellow groups.  Let
# awk do all the work (thanks, adri!) 

# ignore all groups with one member.
#
	awk -F: '
	split($4, users, ",") > 1 {
		ct = 0
		for (i in users) {
			curuser = users[i]
			for (j in users) {
				if (j > i && curuser == users[j]) {
					if (ct++ == 0) print "Warning!  YGroup "$1" has duplicate user(s):"
					print curuser
				}
			}
		}
	}
	' $yp_group

fi

$RM -f $yp_group

# end