blob: 59169591584a188560c5ea84cbe24daae48bd4b9 [file] [log] [blame]
robbiew3f9a8802001-10-12 20:39:17 +00001#!/bin/sh
vapier4fdf37f2008-04-28 01:36:44 +00002#
robbiew599ddd72001-11-28 21:31:41 +00003# Copyright (c) International Business Machines Corp., 2001
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 2 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13# the GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
Wanlong Gao4548c6c2012-10-19 18:03:36 +080017# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
vapier4fdf37f2008-04-28 01:36:44 +000018#
robbiew599ddd72001-11-28 21:31:41 +000019# FILE : IDcheck.sh
20# DESCRIPTION : checks for req'd users/groups and will create them if requested.
vapier4fdf37f2008-04-28 01:36:44 +000021# HISTORY : see the cvs log
22#
robbiew599ddd72001-11-28 21:31:41 +000023
robbiewd23f7242001-11-21 17:33:40 +000024# Prompt user if ids/groups should be created
robbiewc0f37e62001-11-27 19:14:19 +000025echo "Checking for required user/group ids"
26echo ""
robbiewd23f7242001-11-21 17:33:40 +000027
vapier4fdf37f2008-04-28 01:36:44 +000028# Check ids and create if needed.
29NO_NOBODY_ID=1
30NO_BIN_ID=1
31NO_DAEMON_ID=1
32NO_NOBODY_GRP=1
33NO_BIN_GRP=1
34NO_DAEMON_GRP=1
35NO_USERS_GRP=1
36NO_SYS_GRP=1
robbiewd23f7242001-11-21 17:33:40 +000037
subrata_modakd9f329e2009-07-07 14:30:27 +000038group="$DESTDIR/etc/group"
39passwd="$DESTDIR/etc/passwd"
vapier4fdf37f2008-04-28 01:36:44 +000040
subrata_modakd9f329e2009-07-07 14:30:27 +000041# find entry.
42fe() {
yaberauneya0c66cf82009-11-12 11:56:05 +000043 ID=$1
44 FILE=$2
yaberauneya3ab801e2009-07-10 23:01:27 +000045 [ -e "$FILE" ] || return $?
yaberauneya0c66cf82009-11-12 11:56:05 +000046 grep -q "^$ID:" "$FILE"
vapier4fdf37f2008-04-28 01:36:44 +000047}
48
49prompt_for_create() {
subrata_modakd9f329e2009-07-07 14:30:27 +000050 if [ -z "$CREATE_ENTRIES" ] ; then
vapier4fdf37f2008-04-28 01:36:44 +000051
subrata_modakd9f329e2009-07-07 14:30:27 +000052 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
subrata_modak4ede9d02008-09-29 18:12:16 +000053 echo -n "If any required user ids and/or groups are missing, would you like these created? [y/N]"
vapier4fdf37f2008-04-28 01:36:44 +000054 read ans
55 case "$ans" in
Garrett Cooper91165672010-03-07 14:32:56 -080056 [Yy]*) CREATE_ENTRIES=1 ;;
yaberauneya0c66cf82009-11-12 11:56:05 +000057 *) CREATE_ENTRIES=0 ;;
vapier4fdf37f2008-04-28 01:36:44 +000058 esac
59 else
60 CREATE_ENTRIES=0
61 fi
62
63 fi
64}
65
subrata_modak694c3f02008-08-29 18:03:48 +000066if [ -z ${EUID} ] ; then
67 EUID=$(id -u)
68fi
69
yaberauneya3ab801e2009-07-10 23:01:27 +000070for i in "$passwd" "$group"; do
71 if [ -e "$i" -a ! -r "$i" ] ; then
72 echo "$i not readable by uid $EUID"
vapier4fdf37f2008-04-28 01:36:44 +000073 exit 1
yaberauneya3ab801e2009-07-10 23:01:27 +000074 fi
75done
robbiewd23f7242001-11-21 17:33:40 +000076
subrata_modakd9f329e2009-07-07 14:30:27 +000077fe bin "$passwd"; NO_BIN_ID=$?
78fe daemon "$passwd"; NO_DAEMON_ID=$?
79fe nobody "$passwd"; NO_NOBODY_ID=$?
vapier4fdf37f2008-04-28 01:36:44 +000080
subrata_modakd9f329e2009-07-07 14:30:27 +000081fe bin "$group"; NO_BIN_GRP=$?
82fe daemon "$group"; NO_DAEMON_GRP=$?
Garrett Cooper91165672010-03-07 14:32:56 -080083fe nobody "$group" || fe nogroup "$group"; NO_NOBODY_GRP=$?
subrata_modakd9f329e2009-07-07 14:30:27 +000084fe sys "$group"; NO_SYS_GRP=$?
85fe users "$group"; NO_USERS_GRP=$?
robbiewd23f7242001-11-21 17:33:40 +000086
vapier4fdf37f2008-04-28 01:36:44 +000087prompt_for_create
88
89debug_vals() {
90
91echo "Missing the following group / user entries:"
Garrett Cooper91165672010-03-07 14:32:56 -080092echo "Group file: $group"
93echo "Password file: $passwd"
94echo "nobody: $NO_NOBODY_ID"
95echo "bin: $NO_BIN_ID"
96echo "daemon: $NO_DAEMON_ID"
97echo "nobody[/nogroup] grp: $NO_NOBODY_GRP"
98echo "bin grp: $NO_BIN_GRP"
99echo "daemon grp: $NO_DAEMON_GRP"
100echo "sys grp: $NO_SYS_GRP"
101echo "users grp: $NO_USERS_GRP"
vapier4fdf37f2008-04-28 01:36:44 +0000102echo ""
vapier4fdf37f2008-04-28 01:36:44 +0000103
104}
105
106#debug_vals
107
108if [ $CREATE_ENTRIES -ne 0 ] ; then
yaberauneya3ab801e2009-07-10 23:01:27 +0000109 if ! touch "$group" "$passwd" 2>/dev/null; then
110 echo "Failed to touch $group or $passwd"
111 exit 1
112 fi
robbiewd23f7242001-11-21 17:33:40 +0000113fi
114
vapier4fdf37f2008-04-28 01:36:44 +0000115make_user_group() {
116 local name=$1 id=$2 no_id=$3 no_grp=$4
117
118 if [ $no_id -eq 0 -a $no_grp -eq 0 ] ; then
119 echo "'$name' user id and group found."
120 elif [ $CREATE_ENTRIES -ne 0 ] ; then
121 echo "Creating entries for $name"
122
123 # Avoid chicken and egg issue with id(1) call
124 # made above and below.
subrata_modakd9f329e2009-07-07 14:30:27 +0000125 if ! fe "$name" "$passwd" && [ $no_id -ne 0 ] ; then
126 echo "${name}:x:${id}:${id}:${name}::" >> "$passwd"
vapier4fdf37f2008-04-28 01:36:44 +0000127 fi
128 if [ $no_grp -ne 0 ] ; then
subrata_modakd9f329e2009-07-07 14:30:27 +0000129 echo "${name}:x:$(id -u ${name}):" >> "$group"
vapier4fdf37f2008-04-28 01:36:44 +0000130 fi
131 fi
132}
Garrett Cooper91165672010-03-07 14:32:56 -0800133make_user_group nobody 65534 $NO_NOBODY_ID $NO_NOBODY_GRP
vapier4fdf37f2008-04-28 01:36:44 +0000134make_user_group bin 1 $NO_BIN_ID $NO_BIN_GRP
135make_user_group daemon 2 $NO_DAEMON_ID $NO_DAEMON_GRP
136
137if [ $NO_USERS_GRP -eq 0 ] ; then
138 echo "Users group found."
139elif [ $CREATE_ENTRIES -ne 0 ] ; then
subrata_modakd9f329e2009-07-07 14:30:27 +0000140 echo 'users:x:100:' >> "$group"
robbiewd23f7242001-11-21 17:33:40 +0000141fi
142
vapier4fdf37f2008-04-28 01:36:44 +0000143if [ $NO_SYS_GRP -eq 0 ] ; then
144 echo "Sys group found."
145elif [ $CREATE_ENTRIES -ne 0 ] ; then
subrata_modakd9f329e2009-07-07 14:30:27 +0000146 echo 'sys:x:3:' >> "$group"
robbiewd23f7242001-11-21 17:33:40 +0000147fi
148
subrata_modakd9f329e2009-07-07 14:30:27 +0000149MISSING_ENTRY=0
150
151# For entries that exist in both $group and $passwd.
Garrett Cooper91165672010-03-07 14:32:56 -0800152for i in bin daemon; do
subrata_modakd9f329e2009-07-07 14:30:27 +0000153 for file in "$group" "$passwd"; do
154 if ! fe "$i" "$file"; then
155 MISSING_ENTRY=1
156 break
157 fi
158 done
159 if [ $MISSING_ENTRY -ne 0 ]; then
160 break
161 fi
162done
163
Garrett Cooper91165672010-03-07 14:32:56 -0800164# nobody is a standard group on all distros, apart from debian based ones;
165# let's account for the fact that they use the nogroup group instead.
166if ! fe "nobody" "$passwd" || ! (fe "nogroup" "$group" || fe "nobody" "$group")
167then
168 MISSING_ENTRY=1
169fi
170
subrata_modakd9f329e2009-07-07 14:30:27 +0000171# For entries that only exist in $group.
172for i in users sys; do
yaberauneya0c66cf82009-11-12 11:56:05 +0000173 if ! fe "$i" "$group" ; then
subrata_modakd9f329e2009-07-07 14:30:27 +0000174 MISSING_ENTRY=1
175 fi
176done
177
178if [ $MISSING_ENTRY -eq 0 ] ; then
179 echo "Required users/groups exist."
180 exit 0
robbiew06e3bdf2003-04-08 15:23:33 +0000181fi
182
vapier4fdf37f2008-04-28 01:36:44 +0000183echo ""
robbiewd23f7242001-11-21 17:33:40 +0000184echo "*****************************************"
185echo "* Required users/groups do NOT exist!!! *"
186echo "* *"
187echo "* Some kernel/syscall tests will FAIL! *"
188echo "*****************************************"
189exit 1