Index: IDcheck.sh
===================================================================
RCS file: /cvsroot/ltp/ltp/IDcheck.sh,v
retrieving revision 1.18
diff -r1.18 IDcheck.sh
38d37
< I_AM_ROOT=0
40,45c39,40
< #
< # id(1) for entry.
< #
< ife() {
< 	id "$@" > /dev/null
< }
---
> group="$DESTDIR/etc/group"
> passwd="$DESTDIR/etc/passwd"
47,51c42,49
< #
< # grep(1) for entry.
< #
< gfe() {
< 	grep -q "$@"
---
> # find entry.
> fe() {
> 	ID=$1; shift
> 	FILE=$1; shift
> 	awk "/^$ID:/ { FOUND=1 } END { if (\$FOUND == 1) { exit 0; } exit 1; }" \
> 	"$FILE"
> 	ec=$?
> 	echo "$ID => $ec"
55,64c53
< 	if [ -n "$CREATE_ENTRIES" ] ; then
< 
< 		if [ $I_AM_ROOT -eq 0 ] ; then
< 			echo "Not root; can't create user / group entries on local machine".
< 			CREATE_ENTRIES=0
< 		fi
< 		echo "CREATE_ENTRIES variable set to $CREATE_ENTRIES ..."
< 		echo
< 
< 	else
---
> 	if [ -z "$CREATE_ENTRIES" ] ; then
66c55
< 		if [ $NO_NOBODY_ID -ne 0 -o $NO_BIN_ID -ne 0 -o $NO_DAEMON_ID -ne 0 -o $NO_NOBODY_GRP -ne 0 -o $NO_BIN_GRP -ne 0 -o $NO_DAEMON_GRP -ne 0 -o $NO_USERS_GRP -ne 0 -o $NO_SYS_GRP -ne 0 -a $I_AM_ROOT -ne 0 ] ; then
---
> 		if [ $NO_NOBODY_ID -ne 0 -o $NO_BIN_ID -ne 0 -o $NO_DAEMON_ID -ne 0 -o $NO_NOBODY_GRP -ne 0 -o $NO_BIN_GRP -ne 0 -o $NO_DAEMON_GRP -ne 0 -o $NO_USERS_GRP -ne 0 -o $NO_SYS_GRP -ne 0 ] ; then
84c73
< if [ -e /etc/passwd -a ! -r /etc/passwd ] ; then
---
> if [ -e "$passwd" -a ! -r "$passwd" ] ; then
87,88c76,77
< elif [ -e /etc/group -a ! -r /etc/group ] ; then
< 	echo "/etc/group not readable by uid $EUID"
---
> elif [ -e "$group" -a ! -r "$group" ] ; then
> 	echo "$group not readable by uid $EUID"
92,104c81,89
< ife bin; NO_BIN_ID=$?
< ife daemon; NO_DAEMON_ID=$?
< ife nobody; NO_NOBODY_ID=$?
< 
< gfe '^bin:' /etc/group; NO_BIN_GRP=$?
< gfe '^daemon:' /etc/group; NO_DAEMON_GRP=$?
< gfe '^nobody:' /etc/group; NO_NOBODY_GRP=$?
< gfe '^sys:' /etc/group; NO_SYS_GRP=$?
< gfe '^users:' /etc/group; NO_USERS_GRP=$?
< 
< if [ $EUID -eq 0 ] ; then
< 	I_AM_ROOT=1
< fi
---
> fe bin "$passwd"; NO_BIN_ID=$?
> fe daemon "$passwd"; NO_DAEMON_ID=$?
> fe nobody "$passwd"; NO_NOBODY_ID=$?
> 
> fe bin "$group"; NO_BIN_GRP=$?
> fe daemon "$group"; NO_DAEMON_GRP=$?
> fe nobody "$group"; NO_NOBODY_GRP=$?
> fe sys "$group"; NO_SYS_GRP=$?
> fe users "$group"; NO_USERS_GRP=$?
110a96,97
> echo "Group file:    $group"
> echo "Password file: $passwd"
120,121d106
< echo "i am root:     $I_AM_ROOT"
< echo ""
128,129c113,114
< 	if ! touch /etc/group ; then
< 		echo "Couldn't touch /etc/group"
---
> 	if ! touch "$group" ; then
> 		echo "Couldn't touch $group"
144,145c129,130
< 		if ! gfe "^${name}:" /etc/passwd && [ $no_id -ne 0 ] ; then
< 			echo "${name}:x:${id}:${id}:${name}::" >> /etc/passwd
---
> 		if ! fe "$name" "$passwd" && [ $no_id -ne 0 ] ; then
> 			echo "${name}:x:${id}:${id}:${name}::" >> "$passwd"
148c133
< 			echo "${name}:x:$(id -u ${name}):" >> /etc/group
---
> 			echo "${name}:x:$(id -u ${name}):" >> "$group"
159c144
< 	echo 'users:x:100:' >> /etc/group
---
> 	echo 'users:x:100:' >> "$group"
165c150
< 	echo 'sys:x:3:' >> /etc/group
---
> 	echo 'sys:x:3:' >> "$group"
168,175c153,177
< if ife nobody    && ife bin    && ife daemon &&
<    ife -g nobody && ife -g bin && ife -g daemon &&
<    gfe '^users:' /etc/group && gfe '^sys:' /etc/group && 
<    gfe '^nobody:' /etc/group
< then
< 	echo ""
< 	echo "Required users/groups exist."
< 	exit 0
---
> MISSING_ENTRY=0
> 
> # For entries that exist in both $group and $passwd.
> for i in nobody bin daemon; do
>     for file in "$group" "$passwd"; do
>         if ! fe "$i" "$file"; then
>             MISSING_ENTRY=1
>             break
>         fi
>     done
>     if [ $MISSING_ENTRY -ne 0 ]; then
>         break
>     fi
> done
> 
> # For entries that only exist in $group.
> for i in users sys; do
>     if ! fe "$i" "$file"; then
>         MISSING_ENTRY=1
>     fi
> done
> 
> if [ $MISSING_ENTRY -eq 0 ] ; then
>     echo "Required users/groups exist."
>     exit 0
