/[gentoo-x86]/eclass/user.eclass
Gentoo

Diff of /eclass/user.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.8 Revision 1.11
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2011 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/user.eclass,v 1.8 2011/11/03 00:59:16 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/user.eclass,v 1.11 2011/11/26 06:42:07 vapier Exp $
4 4
5# @ECLASS: user.eclass 5# @ECLASS: user.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# base-system@gentoo.org (Linux) 7# base-system@gentoo.org (Linux)
8# Joe Jezak <josejx@gmail.com> (OS X) 8# Joe Jezak <josejx@gmail.com> (OS X)
16# @FUNCTION: _assert_pkg_ebuild_phase 16# @FUNCTION: _assert_pkg_ebuild_phase
17# @INTERNAL 17# @INTERNAL
18# @USAGE: <calling func name> 18# @USAGE: <calling func name>
19_assert_pkg_ebuild_phase() { 19_assert_pkg_ebuild_phase() {
20 case ${EBUILD_PHASE} in 20 case ${EBUILD_PHASE} in
21 unpack|prepare|configure|compile|test|install) 21 setup|preinst|postinst) ;;
22 *)
22 eerror "'$1()' called from '${EBUILD_PHASE}()' which is not a pkg_* function." 23 eerror "'$1()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
23 eerror "Package fails at QA and at life. Please file a bug." 24 eerror "Package fails at QA and at life. Please file a bug."
24 die "Bad package! $1 is only for use in pkg_* functions!" 25 die "Bad package! $1 is only for use in pkg_* functions!"
25 esac 26 esac
26} 27}
76 esac 77 esac
77 78
78 # lookup by uid/gid 79 # lookup by uid/gid
79 local opts 80 local opts
80 if [[ ${key} == [[:digit:]]* ]] ; then 81 if [[ ${key} == [[:digit:]]* ]] ; then
81 [[ ${action} == "user" ]] && opts="-u" || opts="-g" 82 [[ ${db} == "user" ]] && opts="-u" || opts="-g"
82 fi 83 fi
83 84
84 pw show ${action} ${opts} "${key}" -q 85 pw show ${db} ${opts} "${key}" -q
85 ;; 86 ;;
86 *-netbsd*|*-openbsd*) 87 *-netbsd*|*-openbsd*)
87 grep "${key}:\*:" /etc/${db} 88 grep "${key}:\*:" /etc/${db}
88 ;; 89 ;;
89 *) 90 *)
93 ;; 94 ;;
94 esac 95 esac
95} 96}
96 97
97# @FUNCTION: enewuser 98# @FUNCTION: enewuser
98# @USAGE: <user> [uid] [shell] [homedir] [groups] [params] 99# @USAGE: <user> [uid] [shell] [homedir] [groups]
99# @DESCRIPTION: 100# @DESCRIPTION:
100# Same as enewgroup, you are not required to understand how to properly add 101# Same as enewgroup, you are not required to understand how to properly add
101# a user to the system. The only required parameter is the username. 102# a user to the system. The only required parameter is the username.
102# Default uid is (pass -1 for this) next available, default shell is 103# Default uid is (pass -1 for this) next available, default shell is
103# /bin/false, default homedir is /dev/null, there are no default groups, 104# /bin/false, default homedir is /dev/null, and there are no default groups.
104# and default params sets the comment as 'added by portage for ${PN}'.
105enewuser() { 105enewuser() {
106 _assert_pkg_ebuild_phase enewuser 106 _assert_pkg_ebuild_phase enewuser
107 107
108 # get the username 108 # get the username
109 local euser=$1; shift 109 local euser=$1; shift
138 if [[ ${euid} == "next" ]] ; then 138 if [[ ${euid} == "next" ]] ; then
139 for ((euid = 101; euid <= 999; euid++)); do 139 for ((euid = 101; euid <= 999; euid++)); do
140 [[ -z $(egetent passwd ${euid}) ]] && break 140 [[ -z $(egetent passwd ${euid}) ]] && break
141 done 141 done
142 fi 142 fi
143 opts="${opts} -u ${euid}" 143 opts+=" -u ${euid}"
144 einfo " - Userid: ${euid}" 144 einfo " - Userid: ${euid}"
145 145
146 # handle shell 146 # handle shell
147 local eshell=$1; shift 147 local eshell=$1; shift
148 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then 148 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
170 fi 170 fi
171 171
172 eshell=${shell} 172 eshell=${shell}
173 fi 173 fi
174 einfo " - Shell: ${eshell}" 174 einfo " - Shell: ${eshell}"
175 opts="${opts} -s ${eshell}" 175 opts+=" -s ${eshell}"
176 176
177 # handle homedir 177 # handle homedir
178 local ehome=$1; shift 178 local ehome=$1; shift
179 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then 179 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then
180 ehome="/dev/null" 180 ehome="/dev/null"
181 fi 181 fi
182 einfo " - Home: ${ehome}" 182 einfo " - Home: ${ehome}"
183 opts="${opts} -d ${ehome}" 183 opts+=" -d ${ehome}"
184 184
185 # handle groups 185 # handle groups
186 local egroups=$1; shift 186 local egroups=$1; shift
187 if [[ ! -z ${egroups} ]] ; then 187 if [[ ! -z ${egroups} ]] ; then
188 local oldifs=${IFS} 188 local oldifs=${IFS}
202 fi 202 fi
203 export IFS="," 203 export IFS=","
204 done 204 done
205 export IFS=${oldifs} 205 export IFS=${oldifs}
206 206
207 opts="${opts} -g ${defgroup}" 207 opts+=" -g ${defgroup}"
208 if [[ ! -z ${exgroups} ]] ; then 208 if [[ ! -z ${exgroups} ]] ; then
209 opts="${opts} -G ${exgroups:1}" 209 opts+=" -G ${exgroups:1}"
210 fi 210 fi
211 else 211 else
212 egroups="(none)" 212 egroups="(none)"
213 fi 213 fi
214 einfo " - Groups: ${egroups}" 214 einfo " - Groups: ${egroups}"
215 215
216 # handle extra and add the user 216 # handle extra args
217 if [[ $# -gt 0 ]] ; then
218 die "extra arguments no longer supported; please file a bug"
219 else
220 set -- -c "added by portage for ${PN}"
221 einfo " - Extra: $@"
222 fi
223
224 # add the user
217 local oldsandbox=${SANDBOX_ON} 225 local oldsandbox=${SANDBOX_ON}
218 export SANDBOX_ON="0" 226 export SANDBOX_ON="0"
219 case ${CHOST} in 227 case ${CHOST} in
220 *-darwin*) 228 *-darwin*)
221 ### Make the user 229 ### Make the user
222 if [[ -z $@ ]] ; then
223 dscl . create /users/${euser} uid ${euid} 230 dscl . create /users/${euser} uid ${euid}
224 dscl . create /users/${euser} shell ${eshell} 231 dscl . create /users/${euser} shell ${eshell}
225 dscl . create /users/${euser} home ${ehome} 232 dscl . create /users/${euser} home ${ehome}
226 dscl . create /users/${euser} realname "added by portage for ${PN}" 233 dscl . create /users/${euser} realname "added by portage for ${PN}"
227 ### Add the user to the groups specified 234 ### Add the user to the groups specified
228 local oldifs=${IFS} 235 local oldifs=${IFS}
229 export IFS="," 236 export IFS=","
230 for g in ${egroups} ; do 237 for g in ${egroups} ; do
231 dscl . merge /groups/${g} users ${euser} 238 dscl . merge /groups/${g} users ${euser}
232 done 239 done
233 export IFS=${oldifs} 240 export IFS=${oldifs}
234 else
235 einfo "Extra options are not supported on Darwin yet"
236 einfo "Please report the ebuild along with the info below"
237 einfo "eextra: $@"
238 die "Required function missing"
239 fi
240 ;; 241 ;;
242
241 *-freebsd*|*-dragonfly*) 243 *-freebsd*|*-dragonfly*)
242 if [[ -z $@ ]] ; then
243 pw useradd ${euser} ${opts} \ 244 pw useradd ${euser} ${opts} "$@" || die
244 -c "added by portage for ${PN}" \
245 die "enewuser failed"
246 else
247 einfo " - Extra: $@"
248 pw useradd ${euser} ${opts} \
249 "$@" || die "enewuser failed"
250 fi
251 ;; 245 ;;
252 246
253 *-netbsd*) 247 *-netbsd*)
254 if [[ -z $@ ]] ; then
255 useradd ${opts} ${euser} || die "enewuser failed"
256 else
257 einfo " - Extra: $@"
258 useradd ${opts} ${euser} "$@" || die "enewuser failed" 248 useradd ${opts} ${euser} "$@" || die
259 fi
260 ;; 249 ;;
261 250
262 *-openbsd*) 251 *-openbsd*)
263 if [[ -z $@ ]] ; then 252 # all ops the same, except the -g vs -g/-G ...
264 useradd -u ${euid} -s ${eshell} \ 253 useradd -u ${euid} -s ${eshell} \
265 -d ${ehome} -c "Added by portage for ${PN}" \ 254 -d ${ehome} -g ${egroups} "$@" ${euser} || die
266 -g ${egroups} ${euser} || die "enewuser failed"
267 else
268 einfo " - Extra: $@"
269 useradd -u ${euid} -s ${eshell} \
270 -d ${ehome} -c "Added by portage for ${PN}" \
271 -g ${egroups} ${euser} "$@" || die "enewuser failed"
272 fi
273 ;; 255 ;;
274 256
275 *) 257 *)
276 if [[ -z $@ ]] ; then
277 useradd -r ${opts} \
278 -c "added by portage for ${PN}" \
279 ${euser} \
280 || die "enewuser failed"
281 else
282 einfo " - Extra: $@"
283 useradd -r ${opts} "$@" \ 258 useradd -r ${opts} "$@" ${euser} || die
284 ${euser} \
285 || die "enewuser failed"
286 fi
287 ;; 259 ;;
288 esac 260 esac
289 261
290 if [[ ! -e ${ROOT}/${ehome} ]] ; then 262 if [[ ! -e ${ROOT}/${ehome} ]] ; then
291 einfo " - Creating ${ehome} in ${ROOT}" 263 einfo " - Creating ${ehome} in ${ROOT}"
331 if [ "${egid}" -gt 0 ] 303 if [ "${egid}" -gt 0 ]
332 then 304 then
333 if [ -z "`egetent group ${egid}`" ] 305 if [ -z "`egetent group ${egid}`" ]
334 then 306 then
335 if [[ "${CHOST}" == *-darwin* ]]; then 307 if [[ "${CHOST}" == *-darwin* ]]; then
336 opts="${opts} ${egid}" 308 opts+=" ${egid}"
337 else 309 else
338 opts="${opts} -g ${egid}" 310 opts+=" -g ${egid}"
339 fi 311 fi
340 else 312 else
341 egid="next available; requested gid taken" 313 egid="next available; requested gid taken"
342 fi 314 fi
343 else 315 else
348 egid="next available" 320 egid="next available"
349 fi 321 fi
350 einfo " - Groupid: ${egid}" 322 einfo " - Groupid: ${egid}"
351 323
352 # handle extra 324 # handle extra
353 local eextra="$@" 325 if [ $# -gt 0 ] ; then
354 opts="${opts} ${eextra}" 326 die "extra arguments no longer supported; please file a bug"
327 fi
355 328
356 # add the group 329 # add the group
357 local oldsandbox="${SANDBOX_ON}" 330 local oldsandbox="${SANDBOX_ON}"
358 export SANDBOX_ON="0" 331 export SANDBOX_ON="0"
359 case ${CHOST} in 332 case ${CHOST} in
360 *-darwin*) 333 *-darwin*)
361 if [ ! -z "${eextra}" ];
362 then
363 einfo "Extra options are not supported on Darwin/OS X yet"
364 einfo "Please report the ebuild along with the info below"
365 einfo "eextra: ${eextra}"
366 die "Required function missing"
367 fi
368
369 # If we need the next available 334 # If we need the next available
370 case ${egid} in 335 case ${egid} in
371 *[!0-9]*) # Non numeric 336 *[!0-9]*) # Non numeric
372 for ((egid = 101; egid <= 999; egid++)); do 337 for ((egid = 101; egid <= 999; egid++)); do
373 [[ -z $(egetent group ${egid}) ]] && break 338 [[ -z $(egetent group ${egid}) ]] && break
382 *[!0-9]*) # Non numeric 347 *[!0-9]*) # Non numeric
383 for ((egid = 101; egid <= 999; egid++)); do 348 for ((egid = 101; egid <= 999; egid++)); do
384 [[ -z $(egetent group ${egid}) ]] && break 349 [[ -z $(egetent group ${egid}) ]] && break
385 done 350 done
386 esac 351 esac
387 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 352 pw groupadd ${egroup} -g ${egid} || die
388 ;; 353 ;;
389 354
390 *-netbsd*) 355 *-netbsd*)
391 case ${egid} in 356 case ${egid} in
392 *[!0-9]*) # Non numeric 357 *[!0-9]*) # Non numeric
393 for ((egid = 101; egid <= 999; egid++)); do 358 for ((egid = 101; egid <= 999; egid++)); do
394 [[ -z $(egetent group ${egid}) ]] && break 359 [[ -z $(egetent group ${egid}) ]] && break
395 done 360 done
396 esac 361 esac
397 groupadd -g ${egid} ${egroup} || die "enewgroup failed" 362 groupadd -g ${egid} ${egroup} || die
398 ;; 363 ;;
399 364
400 *) 365 *)
401 # We specify -r so that we get a GID in the system range from login.defs 366 # We specify -r so that we get a GID in the system range from login.defs
402 groupadd -r ${opts} ${egroup} || die "enewgroup failed" 367 groupadd -r ${opts} ${egroup} || die
403 ;; 368 ;;
404 esac 369 esac
405 export SANDBOX_ON="${oldsandbox}" 370 export SANDBOX_ON="${oldsandbox}"
406} 371}
407 372

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.20