/[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.9
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.9 2011/11/03 15:29:39 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)
93 ;; 93 ;;
94 esac 94 esac
95} 95}
96 96
97# @FUNCTION: enewuser 97# @FUNCTION: enewuser
98# @USAGE: <user> [uid] [shell] [homedir] [groups] [params] 98# @USAGE: <user> [uid] [shell] [homedir] [groups]
99# @DESCRIPTION: 99# @DESCRIPTION:
100# Same as enewgroup, you are not required to understand how to properly add 100# 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. 101# 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 102# 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, 103# /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() { 104enewuser() {
106 _assert_pkg_ebuild_phase enewuser 105 _assert_pkg_ebuild_phase enewuser
107 106
108 # get the username 107 # get the username
109 local euser=$1; shift 108 local euser=$1; shift
138 if [[ ${euid} == "next" ]] ; then 137 if [[ ${euid} == "next" ]] ; then
139 for ((euid = 101; euid <= 999; euid++)); do 138 for ((euid = 101; euid <= 999; euid++)); do
140 [[ -z $(egetent passwd ${euid}) ]] && break 139 [[ -z $(egetent passwd ${euid}) ]] && break
141 done 140 done
142 fi 141 fi
143 opts="${opts} -u ${euid}" 142 opts+=" -u ${euid}"
144 einfo " - Userid: ${euid}" 143 einfo " - Userid: ${euid}"
145 144
146 # handle shell 145 # handle shell
147 local eshell=$1; shift 146 local eshell=$1; shift
148 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then 147 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
170 fi 169 fi
171 170
172 eshell=${shell} 171 eshell=${shell}
173 fi 172 fi
174 einfo " - Shell: ${eshell}" 173 einfo " - Shell: ${eshell}"
175 opts="${opts} -s ${eshell}" 174 opts+=" -s ${eshell}"
176 175
177 # handle homedir 176 # handle homedir
178 local ehome=$1; shift 177 local ehome=$1; shift
179 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then 178 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then
180 ehome="/dev/null" 179 ehome="/dev/null"
181 fi 180 fi
182 einfo " - Home: ${ehome}" 181 einfo " - Home: ${ehome}"
183 opts="${opts} -d ${ehome}" 182 opts+=" -d ${ehome}"
184 183
185 # handle groups 184 # handle groups
186 local egroups=$1; shift 185 local egroups=$1; shift
187 if [[ ! -z ${egroups} ]] ; then 186 if [[ ! -z ${egroups} ]] ; then
188 local oldifs=${IFS} 187 local oldifs=${IFS}
202 fi 201 fi
203 export IFS="," 202 export IFS=","
204 done 203 done
205 export IFS=${oldifs} 204 export IFS=${oldifs}
206 205
207 opts="${opts} -g ${defgroup}" 206 opts+=" -g ${defgroup}"
208 if [[ ! -z ${exgroups} ]] ; then 207 if [[ ! -z ${exgroups} ]] ; then
209 opts="${opts} -G ${exgroups:1}" 208 opts+=" -G ${exgroups:1}"
210 fi 209 fi
211 else 210 else
212 egroups="(none)" 211 egroups="(none)"
213 fi 212 fi
214 einfo " - Groups: ${egroups}" 213 einfo " - Groups: ${egroups}"
215 214
216 # handle extra and add the user 215 # handle extra args
216 if [[ $# -gt 0 ]] ; then
217 die "extra arguments no longer supported; please file a bug"
218 else
219 set -- -c "added by portage for ${PN}"
220 einfo " - Extra: $@"
221 fi
222
223 # add the user
217 local oldsandbox=${SANDBOX_ON} 224 local oldsandbox=${SANDBOX_ON}
218 export SANDBOX_ON="0" 225 export SANDBOX_ON="0"
219 case ${CHOST} in 226 case ${CHOST} in
220 *-darwin*) 227 *-darwin*)
221 ### Make the user 228 ### Make the user
222 if [[ -z $@ ]] ; then
223 dscl . create /users/${euser} uid ${euid} 229 dscl . create /users/${euser} uid ${euid}
224 dscl . create /users/${euser} shell ${eshell} 230 dscl . create /users/${euser} shell ${eshell}
225 dscl . create /users/${euser} home ${ehome} 231 dscl . create /users/${euser} home ${ehome}
226 dscl . create /users/${euser} realname "added by portage for ${PN}" 232 dscl . create /users/${euser} realname "added by portage for ${PN}"
227 ### Add the user to the groups specified 233 ### Add the user to the groups specified
228 local oldifs=${IFS} 234 local oldifs=${IFS}
229 export IFS="," 235 export IFS=","
230 for g in ${egroups} ; do 236 for g in ${egroups} ; do
231 dscl . merge /groups/${g} users ${euser} 237 dscl . merge /groups/${g} users ${euser}
232 done 238 done
233 export IFS=${oldifs} 239 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 ;; 240 ;;
241
241 *-freebsd*|*-dragonfly*) 242 *-freebsd*|*-dragonfly*)
242 if [[ -z $@ ]] ; then
243 pw useradd ${euser} ${opts} \ 243 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 ;; 244 ;;
252 245
253 *-netbsd*) 246 *-netbsd*)
254 if [[ -z $@ ]] ; then
255 useradd ${opts} ${euser} || die "enewuser failed"
256 else
257 einfo " - Extra: $@"
258 useradd ${opts} ${euser} "$@" || die "enewuser failed" 247 useradd ${opts} ${euser} "$@" || die
259 fi
260 ;; 248 ;;
261 249
262 *-openbsd*) 250 *-openbsd*)
263 if [[ -z $@ ]] ; then 251 # all ops the same, except the -g vs -g/-G ...
264 useradd -u ${euid} -s ${eshell} \ 252 useradd -u ${euid} -s ${eshell} \
265 -d ${ehome} -c "Added by portage for ${PN}" \ 253 -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 ;; 254 ;;
274 255
275 *) 256 *)
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} "$@" \ 257 useradd -r ${opts} "$@" ${euser} || die
284 ${euser} \
285 || die "enewuser failed"
286 fi
287 ;; 258 ;;
288 esac 259 esac
289 260
290 if [[ ! -e ${ROOT}/${ehome} ]] ; then 261 if [[ ! -e ${ROOT}/${ehome} ]] ; then
291 einfo " - Creating ${ehome} in ${ROOT}" 262 einfo " - Creating ${ehome} in ${ROOT}"
331 if [ "${egid}" -gt 0 ] 302 if [ "${egid}" -gt 0 ]
332 then 303 then
333 if [ -z "`egetent group ${egid}`" ] 304 if [ -z "`egetent group ${egid}`" ]
334 then 305 then
335 if [[ "${CHOST}" == *-darwin* ]]; then 306 if [[ "${CHOST}" == *-darwin* ]]; then
336 opts="${opts} ${egid}" 307 opts+=" ${egid}"
337 else 308 else
338 opts="${opts} -g ${egid}" 309 opts+=" -g ${egid}"
339 fi 310 fi
340 else 311 else
341 egid="next available; requested gid taken" 312 egid="next available; requested gid taken"
342 fi 313 fi
343 else 314 else
348 egid="next available" 319 egid="next available"
349 fi 320 fi
350 einfo " - Groupid: ${egid}" 321 einfo " - Groupid: ${egid}"
351 322
352 # handle extra 323 # handle extra
353 local eextra="$@" 324 if [ $# -gt 0 ] ; then
354 opts="${opts} ${eextra}" 325 die "extra arguments no longer supported; please file a bug"
326 fi
355 327
356 # add the group 328 # add the group
357 local oldsandbox="${SANDBOX_ON}" 329 local oldsandbox="${SANDBOX_ON}"
358 export SANDBOX_ON="0" 330 export SANDBOX_ON="0"
359 case ${CHOST} in 331 case ${CHOST} in
360 *-darwin*) 332 *-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 333 # If we need the next available
370 case ${egid} in 334 case ${egid} in
371 *[!0-9]*) # Non numeric 335 *[!0-9]*) # Non numeric
372 for ((egid = 101; egid <= 999; egid++)); do 336 for ((egid = 101; egid <= 999; egid++)); do
373 [[ -z $(egetent group ${egid}) ]] && break 337 [[ -z $(egetent group ${egid}) ]] && break
382 *[!0-9]*) # Non numeric 346 *[!0-9]*) # Non numeric
383 for ((egid = 101; egid <= 999; egid++)); do 347 for ((egid = 101; egid <= 999; egid++)); do
384 [[ -z $(egetent group ${egid}) ]] && break 348 [[ -z $(egetent group ${egid}) ]] && break
385 done 349 done
386 esac 350 esac
387 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 351 pw groupadd ${egroup} -g ${egid} || die
388 ;; 352 ;;
389 353
390 *-netbsd*) 354 *-netbsd*)
391 case ${egid} in 355 case ${egid} in
392 *[!0-9]*) # Non numeric 356 *[!0-9]*) # Non numeric
393 for ((egid = 101; egid <= 999; egid++)); do 357 for ((egid = 101; egid <= 999; egid++)); do
394 [[ -z $(egetent group ${egid}) ]] && break 358 [[ -z $(egetent group ${egid}) ]] && break
395 done 359 done
396 esac 360 esac
397 groupadd -g ${egid} ${egroup} || die "enewgroup failed" 361 groupadd -g ${egid} ${egroup} || die
398 ;; 362 ;;
399 363
400 *) 364 *)
401 # We specify -r so that we get a GID in the system range from login.defs 365 # We specify -r so that we get a GID in the system range from login.defs
402 groupadd -r ${opts} ${egroup} || die "enewgroup failed" 366 groupadd -r ${opts} ${egroup} || die
403 ;; 367 ;;
404 esac 368 esac
405 export SANDBOX_ON="${oldsandbox}" 369 export SANDBOX_ON="${oldsandbox}"
406} 370}
407 371

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

  ViewVC Help
Powered by ViewVC 1.1.20