Add files from parent branch HEAD:
[pkgsrc.git] / mk / pkginstall / usergroupfuncs.DragonFly
1 # $NetBSD: usergroupfuncs.DragonFly,v 1.2 2006/12/15 13:15:06 martti Exp $
2 #
3 # Platform-specific adduser and addgroup functionality
4 # on top of pw(8).
5
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
11 #
12 group_exists()
13 {
14         _group="$1"; _groupid="$2"
15         ${TEST} -n "$_group" || return 3
16
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"
22         ${ECHO} > $_testpath
23         if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then
24                 # $_group exists
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
29                 fi
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
39                 fi
40                 # neither $_group nor $_groupid exist
41                 ${RM} -fr $_tmpdir; return 1
42         fi
43         ${RM} -fr $_tmpdir; return 3
44 }
45
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
51 #
52 user_exists()
53 {
54         _user="$1"; _userid="$2"
55         ${TEST} -n "$_user" || return 3
56
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"
62         ${ECHO} > $_testpath
63         if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then
64                 # $_user exists
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
69                 fi
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
79                 fi
80                 # neither $_user nor $_userid exist
81                 ${RM} -fr $_tmpdir; return 1
82         fi
83         ${RM} -fr $_tmpdir; return 3
84 }
85
86 # adduser user group [userid] [descr] [home] [shell]
87 adduser()
88 {
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
94
95         PW="@PW@"
96
97         case $user in
98         ${PKGNAME%-[0-9]*})     descr_dflt="$user user" ;;
99         *)                      descr_dflt="${PKGNAME%-[0-9]*} $user user" ;;
100         esac
101         : ${descr:="$descr_dflt"}
102         : ${home:="@PKG_USER_HOME@"}
103         : ${shell:="@PKG_USER_SHELL@"}
104
105         if ${TEST} -n "${PW}" -a -x "${PW}"; then
106                 ${ECHO} "${PKGNAME}: Creating user \`\`$user''"
107                 case $userid in
108                 "")
109                         ${PW} useradd                                   \
110                                 $user                                   \
111                                 -c "$descr" -d "$home" -s "$shell"      \
112                                 -g $group
113                         ;;
114                 *)
115                         ${PW} useradd                                   \
116                                 $user                                   \
117                                 -c "$descr" -d "$home" -s "$shell"      \
118                                 -g $group -u $userid
119                         ;;
120                 esac
121         fi
122         return 0
123 }
124
125 # adduser group [groupid]
126 addgroup()
127 {
128         group="$1"; groupid="$2"
129         ${TEST} $# -eq 2 || return 1
130         ${TEST} -n "$group" || return 2
131
132         PW="@PW@"
133
134         if ${TEST} -n "${PW}" -a -x "${PW}"; then
135                 ${ECHO} "${PKGNAME}: Creating group \`\`$group''"
136                 case $groupid in
137                 "")     ${PW} groupadd $group ;;
138                 *)      ${PW} groupadd $group -g $groupid ;;
139                 esac
140         fi
141         return 0
142 }