| @@ -1,148 +1,148 @@ | | | @@ -1,148 +1,148 @@ |
1 | # $NetBSD: usergroupfuncs,v 1.3 2007/07/12 19:41:46 jlam Exp $ | | 1 | # $NetBSD: usergroupfuncs,v 1.4 2013/04/03 09:35:19 jperkin Exp $ |
2 | # | | 2 | # |
3 | # Default implementations of user_exists() and group_exists() shell | | 3 | # Default implementations of user_exists() and group_exists() shell |
4 | # functions for checking the existence of users and groups, and of | | 4 | # functions for checking the existence of users and groups, and of |
5 | # adduser() and addgroup() shell functions for adding users and groups. | | 5 | # adduser() and addgroup() shell functions for adding users and groups. |
6 | # Assume there are NetBSD/Solaris-compatible versions of useradd(8) and | | 6 | # Assume there are NetBSD/Solaris-compatible versions of useradd(8) and |
7 | # groupadd(8) available through ${USERADD} and ${GROUPADD}, respectively. | | 7 | # groupadd(8) available through ${USERADD} and ${GROUPADD}, respectively. |
8 | # | | 8 | # |
9 | # Platform-specific replacements for this file should be located at: | | 9 | # Platform-specific replacements for this file should be located at: |
10 | # | | 10 | # |
11 | # pkgsrc/mk/pkginstall/usergroupfuncs.${OPSYS} | | 11 | # pkgsrc/mk/pkginstall/usergroupfuncs.${OPSYS} |
12 | # | | 12 | # |
13 | | | 13 | |
14 | # group_exists group [groupid] | | 14 | # group_exists group [groupid] |
15 | # Returns 0 if $group exists and has gid $groupid | | 15 | # Returns 0 if $group exists and has gid $groupid |
16 | # Returns 1 if neither $group nor $groupid exist | | 16 | # Returns 1 if neither $group nor $groupid exist |
17 | # Returns 2 if $group or $groupid exist but don't match | | 17 | # Returns 2 if $group or $groupid exist but don't match |
18 | # Returns 3 for all errors | | 18 | # Returns 3 for all errors |
19 | # | | 19 | # |
20 | group_exists() | | 20 | group_exists() |
21 | { | | 21 | { |
22 | _group="$1"; _groupid="$2" | | 22 | _group="$1"; _groupid="$2" |
23 | ${TEST} -n "$_group" || return 3 | | 23 | ${TEST} -n "$_group" || return 3 |
24 | | | 24 | |
25 | # Check using chgrp to work properly in an NSS/NIS environment. | | 25 | # Check using chgrp to work properly in an NSS/NIS environment. |
26 | _tmpdir="./.pkginstall.$$" | | 26 | _tmpdir="./.pkginstall.$$" |
27 | ${MKDIR} -p $_tmpdir 2>/dev/null || return 3 | | 27 | ${MKDIR} -p $_tmpdir 2>/dev/null || return 3 |
28 | ${CHMOD} 0700 $_tmpdir | | 28 | ${CHMOD} 0700 $_tmpdir |
29 | _testpath="$_tmpdir/group_exists" | | 29 | _testpath="$_tmpdir/group_exists" |
30 | ${ECHO} > $_testpath | | 30 | ${ECHO} > $_testpath |
31 | if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then | | 31 | if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then |
32 | # $_group exists | | 32 | # $_group exists |
33 | _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $4 }'` | | 33 | _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $4 }'` |
34 | ${TEST} -n "$_groupid" || _groupid=$_id | | 34 | ${TEST} -n "$_groupid" || _groupid=$_id |
35 | if ${TEST} "$_groupid" = "$_id"; then | | 35 | if ${TEST} "$_groupid" = "$_id"; then |
36 | ${RM} -fr $_tmpdir; return 0 | | 36 | ${RM} -fr $_tmpdir; return 0 |
37 | fi | | 37 | fi |
38 | ${RM} -fr $_tmpdir; return 2 | | 38 | ${RM} -fr $_tmpdir; return 2 |
39 | elif ${TEST} -z "$_groupid"; then | | 39 | elif ${TEST} -z "$_groupid"; then |
40 | # $_group doesn't exist and $_groupid is not set | | 40 | # $_group doesn't exist and $_groupid is not set |
41 | ${RM} -fr $_tmpdir; return 1 | | 41 | ${RM} -fr $_tmpdir; return 1 |
42 | elif ${CHGRP} $_groupid $_testpath >/dev/null 2>&1; then | | 42 | elif ${CHGRP} $_groupid $_testpath >/dev/null 2>&1; then |
43 | _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $4 }'` | | 43 | _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $4 }'` |
44 | if ${TEST} "$_name" != "$_groupid"; then | | 44 | if ${TEST} "$_name" != "$_groupid"; then |
45 | # $_group doesn't exist, but $_groupid exists | | 45 | # $_group doesn't exist, but $_groupid exists |
46 | ${RM} -fr $_tmpdir; return 2 | | 46 | ${RM} -fr $_tmpdir; return 2 |
47 | fi | | 47 | fi |
48 | # neither $_group nor $_groupid exist | | 48 | # neither $_group nor $_groupid exist |
49 | ${RM} -fr $_tmpdir; return 1 | | 49 | ${RM} -fr $_tmpdir; return 1 |
50 | fi | | 50 | fi |
51 | ${RM} -fr $_tmpdir; return 3 | | 51 | ${RM} -fr $_tmpdir; return 3 |
52 | } | | 52 | } |
53 | | | 53 | |
54 | # user_exists user [userid] | | 54 | # user_exists user [userid] |
55 | # Returns 0 if $user exists and has uid $userid | | 55 | # Returns 0 if $user exists and has uid $userid |
56 | # Returns 1 if neither $user nor $userid exist | | 56 | # Returns 1 if neither $user nor $userid exist |
57 | # Returns 2 if $user or $userid exist but don't match | | 57 | # Returns 2 if $user or $userid exist but don't match |
58 | # Returns 3 for all errors | | 58 | # Returns 3 for all errors |
59 | # | | 59 | # |
60 | user_exists() | | 60 | user_exists() |
61 | { | | 61 | { |
62 | _user="$1"; _userid="$2" | | 62 | _user="$1"; _userid="$2" |
63 | ${TEST} -n "$_user" || return 3 | | 63 | ${TEST} -n "$_user" || return 3 |
64 | | | 64 | |
65 | # Check using chown to work properly in an NSS/NIS environment. | | 65 | # Check using chown to work properly in an NSS/NIS environment. |
66 | _tmpdir="./.pkginstall.$$" | | 66 | _tmpdir="./.pkginstall.$$" |
67 | ${MKDIR} -p $_tmpdir 2>/dev/null || return 3 | | 67 | ${MKDIR} -p $_tmpdir 2>/dev/null || return 3 |
68 | ${CHMOD} 0700 $_tmpdir | | 68 | ${CHMOD} 0700 $_tmpdir |
69 | _testpath="$_tmpdir/user_exists" | | 69 | _testpath="$_tmpdir/user_exists" |
70 | ${ECHO} > $_testpath | | 70 | ${ECHO} > $_testpath |
71 | if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then | | 71 | if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then |
72 | # $_user exists | | 72 | # $_user exists |
73 | _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $3 }'` | | 73 | _id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $3 }'` |
74 | ${TEST} -n "$_userid" || _userid=$_id | | 74 | ${TEST} -n "$_userid" || _userid=$_id |
75 | if ${TEST} "$_userid" = "$_id"; then | | 75 | if ${TEST} "$_userid" = "$_id"; then |
76 | ${RM} -fr $_tmpdir; return 0 | | 76 | ${RM} -fr $_tmpdir; return 0 |
77 | fi | | 77 | fi |
78 | ${RM} -fr $_tmpdir; return 2 | | 78 | ${RM} -fr $_tmpdir; return 2 |
79 | elif ${TEST} -z "$_userid"; then | | 79 | elif ${TEST} -z "$_userid"; then |
80 | # $_user doesn't exist and $_userid is not set | | 80 | # $_user doesn't exist and $_userid is not set |
81 | ${RM} -fr $_tmpdir; return 1 | | 81 | ${RM} -fr $_tmpdir; return 1 |
82 | elif ${CHOWN} $_userid $_testpath >/dev/null 2>&1; then | | 82 | elif ${CHOWN} $_userid $_testpath >/dev/null 2>&1; then |
83 | _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $3 }'` | | 83 | _name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $3 }'` |
84 | if ${TEST} "$_name" != "$_userid"; then | | 84 | if ${TEST} "$_name" != "$_userid"; then |
85 | # $_user doesn't exist, but $_userid exists | | 85 | # $_user doesn't exist, but $_userid exists |
86 | ${RM} -fr $_tmpdir; return 2 | | 86 | ${RM} -fr $_tmpdir; return 2 |
87 | fi | | 87 | fi |
88 | # neither $_user nor $_userid exist | | 88 | # neither $_user nor $_userid exist |
89 | ${RM} -fr $_tmpdir; return 1 | | 89 | ${RM} -fr $_tmpdir; return 1 |
90 | fi | | 90 | fi |
91 | ${RM} -fr $_tmpdir; return 3 | | 91 | ${RM} -fr $_tmpdir; return 3 |
92 | } | | 92 | } |
93 | | | 93 | |
94 | # adduser user group [userid] [descr] [home] [shell] | | 94 | # adduser user group [userid] [descr] [home] [shell] |
95 | adduser() | | 95 | adduser() |
96 | { | | 96 | { |
97 | user="$1"; group="$2"; userid="$3" | | 97 | user="$1"; group="$2"; userid="$3" |
98 | descr="$4"; home="$5" shell="$6" | | 98 | descr="$4"; home="$5" shell="$6" |
99 | ${TEST} $# -eq 6 || return 1 | | 99 | ${TEST} $# -eq 6 || return 1 |
100 | ${TEST} -n "$user" || return 2 | | 100 | ${TEST} -n "$user" || return 2 |
101 | ${TEST} -n "$group" || return 2 | | 101 | ${TEST} -n "$group" || return 2 |
102 | | | 102 | |
103 | USERADD="@USERADD@" | | 103 | USERADD="@USERADD@" |
104 | | | 104 | |
105 | case $user in | | 105 | case $user in |
106 | ${PKGNAME%-[0-9]*}) descr_dflt="$user user" ;; | | 106 | ${PKGNAME%-[0-9]*}) descr_dflt="$user user" ;; |
107 | *) descr_dflt="${PKGNAME%-[0-9]*} $user user" ;; | | 107 | *) descr_dflt="${PKGNAME%-[0-9]*} $user user" ;; |
108 | esac | | 108 | esac |
109 | : ${descr:="$descr_dflt"} | | 109 | : ${descr:="$descr_dflt"} |
110 | : ${home:="@PKG_USER_HOME@"} | | 110 | : ${home:="@PKG_USER_HOME@"} |
111 | : ${shell:="@PKG_USER_SHELL@"} | | 111 | : ${shell:="@PKG_USER_SHELL@"} |
112 | | | 112 | |
113 | if ${TEST} -n "${USERADD}" -a -x "${USERADD}"; then | | 113 | if ${TEST} -n "${USERADD}" -a -x "${USERADD}"; then |
114 | ${ECHO} "${PKGNAME}: Creating user \`\`$user''" | | 114 | ${ECHO} "${PKGNAME}: Creating user \`\`$user''" |
115 | case $userid in | | 115 | case $userid in |
116 | "") | | 116 | "") |
117 | ${USERADD} \ | | 117 | ${USERADD} \ |
118 | -c "$descr" -d "$home" -s "$shell" \ | | 118 | -c "$descr" -d "$home" -s "$shell" \ |
119 | -g $group $user | | 119 | -g $group $user |
120 | ;; | | 120 | ;; |
121 | *) | | 121 | *) |
122 | ${USERADD} \ | | 122 | ${USERADD} \ |
123 | -c "$descr" -d "$home" -s "$shell" \ | | 123 | -c "$descr" -d "$home" -s "$shell" \ |
124 | -g $group -u $userid $user | | 124 | -g $group -u $userid $user |
125 | ;; | | 125 | ;; |
126 | esac | | 126 | esac |
127 | fi | | 127 | fi |
128 | return 0 | | 128 | return 0 |
129 | } | | 129 | } |
130 | | | 130 | |
131 | # adduser group [groupid] | | 131 | # addgroup group [groupid] |
132 | addgroup() | | 132 | addgroup() |
133 | { | | 133 | { |
134 | group="$1"; groupid="$2" | | 134 | group="$1"; groupid="$2" |
135 | ${TEST} $# -eq 2 || return 1 | | 135 | ${TEST} $# -eq 2 || return 1 |
136 | ${TEST} -n "$group" || return 2 | | 136 | ${TEST} -n "$group" || return 2 |
137 | | | 137 | |
138 | GROUPADD="@GROUPADD@" | | 138 | GROUPADD="@GROUPADD@" |
139 | | | 139 | |
140 | if ${TEST} -n "${GROUPADD}" -a -x "${GROUPADD}"; then | | 140 | if ${TEST} -n "${GROUPADD}" -a -x "${GROUPADD}"; then |
141 | ${ECHO} "${PKGNAME}: Creating group \`\`$group''" | | 141 | ${ECHO} "${PKGNAME}: Creating group \`\`$group''" |
142 | case $groupid in | | 142 | case $groupid in |
143 | "") ${GROUPADD} $group ;; | | 143 | "") ${GROUPADD} $group ;; |
144 | *) ${GROUPADD} -g $groupid $group ;; | | 144 | *) ${GROUPADD} -g $groupid $group ;; |
145 | esac | | 145 | esac |
146 | fi | | 146 | fi |
147 | return 0 | | 147 | return 0 |
148 | } | | 148 | } |