1 # $NetBSD: usergroupfuncs,v 1.2 2006/12/15 13:15:06 martti Exp $
3 # Default implementations of user_exists() and group_exists() shell
4 # functions for checking the existence of users and groups, and of
5 # adduser() and addgroup() shell functions for adding users and groups.
6 # Assume there are NetBSD/Solaris-compatible versions of useradd(8) and
7 # groupadd(8) available through ${USERADD} and ${GROUPADD}, respectively.
9 # Platform-specific replacements for this file should be located at:
11 # pkgsrc/mk/pkginstall/usergroupfuncs.${OPSYS}
14 # group_exists group [groupid]
15 # Returns 0 if $group exists and has gid $groupid
16 # Returns 1 if neither $group nor $groupid exist
17 # Returns 2 if $group or $groupid exist but don't match
18 # Returns 3 for all errors
22 _group="$1"; _groupid="$2"
23 ${TEST} -n "$_group" || return 3
25 # Check using chgrp to work properly in an NSS/NIS environment.
26 _tmpdir="./.pkginstall.$$"
27 ${MKDIR} -p $_tmpdir 2>/dev/null || return 3
28 ${CHMOD} 0700 $_tmpdir
29 _testpath="$_tmpdir/group_exists"
31 if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then
33 _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
34 ${TEST} -n "$_groupid" || _groupid=$_id
35 if ${TEST} "$_groupid" = "$_id"; then
36 ${RM} -fr $_tmpdir; return 0
38 ${RM} -fr $_tmpdir; return 2
39 elif ${TEST} -z "$_groupid"; then
40 # $_group doesn't exist and $_groupid is not set
41 ${RM} -fr $_tmpdir; return 1
42 elif ${CHGRP} $_groupid $_testpath >/dev/null 2>&1; then
43 _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
44 if ${TEST} "$_name" != "$_groupid"; then
45 # $_group doesn't exist, but $_groupid exists
46 ${RM} -fr $_tmpdir; return 2
48 # neither $_group nor $_groupid exist
49 ${RM} -fr $_tmpdir; return 1
51 ${RM} -fr $_tmpdir; return 3
54 # user_exists user [userid]
55 # Returns 0 if $user exists and has uid $userid
56 # Returns 1 if neither $user nor $userid exist
57 # Returns 2 if $user or $userid exist but don't match
58 # Returns 3 for all errors
62 _user="$1"; _userid="$2"
63 ${TEST} -n "$_user" || return 3
65 # Check using chown to work properly in an NSS/NIS environment.
66 _tmpdir="./.pkginstall.$$"
67 ${MKDIR} -p $_tmpdir 2>/dev/null || return 3
68 ${CHMOD} 0700 $_tmpdir
69 _testpath="$_tmpdir/user_exists"
71 if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then
73 _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
74 ${TEST} -n "$_userid" || _userid=$_id
75 if ${TEST} "$_userid" = "$_id"; then
76 ${RM} -fr $_tmpdir; return 0
78 ${RM} -fr $_tmpdir; return 2
79 elif ${TEST} -z "$_userid"; then
80 # $_user doesn't exist and $_userid is not set
81 ${RM} -fr $_tmpdir; return 1
82 elif ${CHOWN} $_userid $_testpath >/dev/null 2>&1; then
83 _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
84 if ${TEST} "$_name" != "$_userid"; then
85 # $_user doesn't exist, but $_userid exists
86 ${RM} -fr $_tmpdir; return 2
88 # neither $_user nor $_userid exist
89 ${RM} -fr $_tmpdir; return 1
91 ${RM} -fr $_tmpdir; return 3
94 # adduser user group [userid] [descr] [home] [shell]
97 user="$1"; group="$2"; userid="$3"
98 descr="$4"; home="$5" shell="$6"
99 ${TEST} $# -eq 6 || return 1
100 ${TEST} -n "$user" || return 2
101 ${TEST} -n "$group" || return 2
106 ${PKGNAME%-[0-9]*}) descr_dflt="$user user" ;;
107 *) descr_dflt="${PKGNAME%-[0-9]*} $user user" ;;
109 : ${descr:="$descr_dflt"}
110 : ${home:="@PKG_USER_HOME@"}
111 : ${shell:="@PKG_USER_SHELL@"}
113 if ${TEST} -n "${USERADD}" -a -x "${USERADD}"; then
114 ${ECHO} "${PKGNAME}: Creating user \`\`$user''"
118 -c "$descr" -d "$home" -s "$shell" \
123 -c "$descr" -d "$home" -s "$shell" \
124 -g $group -u $userid $user
131 # adduser group [groupid]
134 group="$1"; groupid="$2"
135 ${TEST} $# -eq 2 || return 1
136 ${TEST} -n "$group" || return 2
138 GROUPADD="@GROUPADD@"
140 if ${TEST} -n "${GROUPADD}" -a -x "${GROUPADD}"; then
141 ${ECHO} "${PKGNAME}: Creating group \`\`$group''"
143 "") ${GROUPADD} $group ;;
144 *) ${GROUPADD} -g $groupid $group ;;