1 # $NetBSD: usergroupfuncs.DragonFly,v 1.2 2006/12/15 13:15:06 martti Exp $
3 # Platform-specific adduser and addgroup functionality
6 # group_exists group [groupid]
7 # Returns 0 if $group exists and has gid $groupid
8 # Returns 1 if neither $group nor $groupid exist
9 # Returns 2 if $group or $groupid exist but don't match
10 # Returns 3 for all errors
14 _group="$1"; _groupid="$2"
15 ${TEST} -n "$_group" || return 3
17 # Check using chgrp to work properly in an NSS/NIS environment.
18 _tmpdir="./.pkginstall.$$"
19 ${MKDIR} -p $_tmpdir 2>/dev/null || return 3
20 ${CHMOD} 0700 $_tmpdir
21 _testpath="$_tmpdir/group_exists"
23 if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then
25 _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
26 ${TEST} -n "$_groupid" || _groupid=$_id
27 if ${TEST} "$_groupid" = "$_id"; then
28 ${RM} -fr $_tmpdir; return 0
30 ${RM} -fr $_tmpdir; return 2
31 elif ${TEST} -z "$_groupid"; then
32 # $_group doesn't exist and $_groupid is not set
33 ${RM} -fr $_tmpdir; return 1
34 elif ${CHGRP} $_groupid $_testpath >/dev/null 2>&1; then
35 _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
36 if ${TEST} "$_name" != "$_groupid"; then
37 # $_group doesn't exist, but $_groupid exists
38 ${RM} -fr $_tmpdir; return 2
40 # neither $_group nor $_groupid exist
41 ${RM} -fr $_tmpdir; return 1
43 ${RM} -fr $_tmpdir; return 3
46 # user_exists user [userid]
47 # Returns 0 if $user exists and has uid $userid
48 # Returns 1 if neither $user nor $userid exist
49 # Returns 2 if $user or $userid exist but don't match
50 # Returns 3 for all errors
54 _user="$1"; _userid="$2"
55 ${TEST} -n "$_user" || return 3
57 # Check using chown to work properly in an NSS/NIS environment.
58 _tmpdir="./.pkginstall.$$"
59 ${MKDIR} -p $_tmpdir 2>/dev/null || return 3
60 ${CHMOD} 0700 $_tmpdir
61 _testpath="$_tmpdir/user_exists"
63 if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then
65 _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
66 ${TEST} -n "$_userid" || _userid=$_id
67 if ${TEST} "$_userid" = "$_id"; then
68 ${RM} -fr $_tmpdir; return 0
70 ${RM} -fr $_tmpdir; return 2
71 elif ${TEST} -z "$_userid"; then
72 # $_user doesn't exist and $_user is not set
73 ${RM} -fr $_tmpdir; return 1
74 elif ${CHOWN} $_userid $_testpath >/dev/null 2>&1; then
75 _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
76 if ${TEST} "$_name" != "$_userid"; then
77 # $_user doesn't exist, but $_userid exists
78 ${RM} -fr $_tmpdir; return 2
80 # neither $_user nor $_userid exist
81 ${RM} -fr $_tmpdir; return 1
83 ${RM} -fr $_tmpdir; return 3
86 # adduser user group [userid] [descr] [home] [shell]
89 user="$1"; group="$2"; userid="$3"
90 descr="$4"; home="$5" shell="$6"
91 ${TEST} $# -eq 6 || return 1
92 ${TEST} -n "$user" || return 2
93 ${TEST} -n "$group" || return 2
98 ${PKGNAME%-[0-9]*}) descr_dflt="$user user" ;;
99 *) descr_dflt="${PKGNAME%-[0-9]*} $user user" ;;
101 : ${descr:="$descr_dflt"}
102 : ${home:="@PKG_USER_HOME@"}
103 : ${shell:="@PKG_USER_SHELL@"}
105 if ${TEST} -n "${PW}" -a -x "${PW}"; then
106 ${ECHO} "${PKGNAME}: Creating user \`\`$user''"
111 -c "$descr" -d "$home" -s "$shell" \
117 -c "$descr" -d "$home" -s "$shell" \
125 # adduser group [groupid]
128 group="$1"; groupid="$2"
129 ${TEST} $# -eq 2 || return 1
130 ${TEST} -n "$group" || return 2
134 if ${TEST} -n "${PW}" -a -x "${PW}"; then
135 ${ECHO} "${PKGNAME}: Creating group \`\`$group''"
137 "") ${PW} groupadd $group ;;
138 *) ${PW} groupadd $group -g $groupid ;;