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