Lines 94-100
egetent() {
Link Here
|
94 |
*) |
94 |
*) |
95 |
# ignore output if nscd doesn't exist, or we're not running as root |
95 |
# ignore output if nscd doesn't exist, or we're not running as root |
96 |
nscd -i "${db}" 2>/dev/null |
96 |
nscd -i "${db}" 2>/dev/null |
97 |
getent "${db}" "${key}" |
97 |
if [[ "${ROOT}" == "/" ]] ; then |
|
|
98 |
getent "${db}" "${key}" |
99 |
else |
100 |
local euser |
101 |
if [[ ${key} == [[:digit:]]* ]] ; then |
102 |
euser=$(awk -F: '$3 == '${key}'{print $1}' ${ROOT}/etc/passwd) |
103 |
else |
104 |
euser=${key} |
105 |
fi |
106 |
if [[ "${euser}" != "" ]] ; then |
107 |
grep --color=never "^${euser}" ${ROOT}/etc/${db} |
108 |
fi |
109 |
fi |
98 |
;; |
110 |
;; |
99 |
esac |
111 |
esac |
100 |
} |
112 |
} |
Lines 120-126
enewuser() {
Link Here
|
120 |
if [[ -n $(egetent passwd "${euser}") ]] ; then |
132 |
if [[ -n $(egetent passwd "${euser}") ]] ; then |
121 |
return 0 |
133 |
return 0 |
122 |
fi |
134 |
fi |
123 |
einfo "Adding user '${euser}' to your system ..." |
135 |
if [[ "${ROOT}" == "/" ]] ; then |
|
|
136 |
einfo "Adding user '${euser}' to your system ..." |
137 |
else |
138 |
einfo "Adding user '${euser}' to ${ROOT} ..." |
139 |
fi |
124 |
|
140 |
|
125 |
# options to pass to useradd |
141 |
# options to pass to useradd |
126 |
local opts=() |
142 |
local opts=() |
Lines 247-260
enewuser() {
Link Here
|
247 |
;; |
263 |
;; |
248 |
|
264 |
|
249 |
*) |
265 |
*) |
250 |
useradd -r "${opts[@]}" "${euser}" || die |
266 |
if [[ "${ROOT}" != "/" ]] ; then |
|
|
267 |
opts+=( --prefix "${ROOT}" ) |
268 |
fi |
269 |
einfo useradd -r "${opts[@]}" "${euser}" |
270 |
useradd -r "${opts[@]}" "${euser}" || die |
251 |
;; |
271 |
;; |
252 |
esac |
272 |
esac |
253 |
|
273 |
|
254 |
if [[ ! -e ${ROOT}/${ehome} ]] ; then |
274 |
if [[ ! -e ${ROOT}/${ehome} ]] ; then |
255 |
einfo " - Creating ${ehome} in ${ROOT}" |
275 |
einfo " - Creating ${ehome} in ${ROOT}" |
256 |
mkdir -p "${ROOT}/${ehome}" |
276 |
mkdir -p "${ROOT}/${ehome}" |
257 |
chown "${euser}" "${ROOT}/${ehome}" |
277 |
chown "${euid}" "${ROOT}/${ehome}" |
258 |
chmod 755 "${ROOT}/${ehome}" |
278 |
chmod 755 "${ROOT}/${ehome}" |
259 |
fi |
279 |
fi |
260 |
} |
280 |
} |
Lines 280-286
enewgroup() {
Link Here
|
280 |
if [[ -n $(egetent group "${egroup}") ]] ; then |
300 |
if [[ -n $(egetent group "${egroup}") ]] ; then |
281 |
return 0 |
301 |
return 0 |
282 |
fi |
302 |
fi |
283 |
einfo "Adding group '${egroup}' to your system ..." |
303 |
if [[ "${ROOT}" == "/" ]] ; then |
|
|
304 |
einfo "Adding group '${egroup}' to your system ..." |
305 |
else |
306 |
einfo "Adding group '${egroup}' to ${ROOT} ..." |
307 |
fi |
284 |
|
308 |
|
285 |
# handle gid |
309 |
# handle gid |
286 |
local egid=$1; shift |
310 |
local egid=$1; shift |
Lines 339-346
enewgroup() {
Link Here
|
339 |
else |
363 |
else |
340 |
opts="-g ${egid}" |
364 |
opts="-g ${egid}" |
341 |
fi |
365 |
fi |
342 |
# We specify -r so that we get a GID in the system range from login.defs |
366 |
if [[ "${ROOT}" == "/" ]] ; then |
343 |
groupadd -r ${opts} "${egroup}" || die |
367 |
# We specify -r so that we get a GID in the system range from login.defs |
|
|
368 |
groupadd -r ${opts} "${egroup}" || die |
369 |
else |
370 |
einfo groupadd --prefix ${ROOT} -r ${opts} "${egroup}" |
371 |
groupadd --prefix ${ROOT} -r ${opts} "${egroup}" || die |
372 |
fi |
344 |
;; |
373 |
;; |
345 |
esac |
374 |
esac |
346 |
} |
375 |
} |
Lines 454-460
esethome() {
Link Here
|
454 |
;; |
483 |
;; |
455 |
|
484 |
|
456 |
*) |
485 |
*) |
457 |
usermod -d "${ehome}" "${euser}" && return 0 |
486 |
if [[ "${ROOT}" == "/" ]] ; then |
|
|
487 |
usermod -d "${ehome}" "${euser}" && return 0 |
488 |
else |
489 |
usermod --prefix ${ROOT} -d "${ehome}" "${euser}" && return 0 |
490 |
fi |
458 |
[[ $? == 8 ]] && eerror "${euser} is in use, cannot update home" |
491 |
[[ $? == 8 ]] && eerror "${euser} is in use, cannot update home" |
459 |
eerror "There was an error when attempting to update the home directory for ${euser}" |
492 |
eerror "There was an error when attempting to update the home directory for ${euser}" |
460 |
eerror "Please update it manually on your system (as root):" |
493 |
eerror "Please update it manually on your system (as root):" |
Lines 463-466
esethome() {
Link Here
|
463 |
esac |
496 |
esac |
464 |
} |
497 |
} |
465 |
|
498 |
|
|
|
499 |
# @USAGE: <user> |
500 |
# @DESCRIPTION: |
501 |
# Gets the uid for the specified user. |
502 |
egetuid() { |
503 |
[[ $# -eq 1 ]] || die "usage: egetuid <user>" |
504 |
|
505 |
egetent passwd "$1" | cut -d: -f3 || die |
506 |
} |
507 |
|
508 |
# @USAGE: <group> |
509 |
# @DESCRIPTION: |
510 |
# Gets the gid for the specified group. |
511 |
egetgid() { |
512 |
[[ $# -eq 1 ]] || die "usage: egetgid <group>" |
513 |
|
514 |
egetent group "$1" | cut -d: -f3 || die |
515 |
} |
516 |
|
517 |
|
518 |
# @USAGE: <user>:<group> <path> |
519 |
# @DESCRIPTION: |
520 |
# chown portage equivalent, honoring the ${ROOT} variable. |
521 |
echown() { |
522 |
# get the user |
523 |
local a=$1; shift |
524 |
if [[ -z ${a} ]] ; then |
525 |
eerror "No user specified !" |
526 |
die "Cannot call echown without a user" |
527 |
fi |
528 |
|
529 |
|
530 |
local euid |
531 |
local egid |
532 |
|
533 |
IFS=':' read -a fields <<< ${a} |
534 |
|
535 |
euser=${fields[0]} |
536 |
egroup=${fields[1]} |
537 |
if [[ "${euser}" != "" ]] ; then |
538 |
euid=$(egetuid "${euser}") |
539 |
fi |
540 |
if [[ "${egroup}" != "" ]] ; then |
541 |
egid=$(egetgid "${egroup}") |
542 |
fi |
543 |
if [[ "${egid}" == "" ]] ; then |
544 |
einfo chown ${euid} $@ |
545 |
chown ${euid} $@ || die |
546 |
else |
547 |
einfo chown ${euid}:${egid} $@ |
548 |
chown ${euid}:${egid} $@ || die |
549 |
fi |
550 |
|
551 |
} |
552 |
|
553 |
# @DESCRIPTION: |
554 |
# fowners honoring the ${ROOT} variable. |
555 |
efowners() { |
556 |
# get the user:group |
557 |
local a=$1; shift |
558 |
if [[ -z ${a} ]] ; then |
559 |
eerror "No user:group specified !" |
560 |
die "Cannot call echown without a user" |
561 |
fi |
562 |
|
563 |
|
564 |
local euid |
565 |
local egid |
566 |
|
567 |
IFS=':' read -a fields <<< ${a} |
568 |
|
569 |
euser=${fields[0]} |
570 |
egroup=${fields[1]} |
571 |
if [[ "${euser}" != "" ]] ; then |
572 |
euid=$(egetuid "${euser}") |
573 |
fi |
574 |
if [[ "${egroup}" != "" ]] ; then |
575 |
egid=$(egetgid "${egroup}") |
576 |
fi |
577 |
if [[ "${egid}" == "" ]] ; then |
578 |
einfo fowners ${euid} $@ |
579 |
fowners ${euid} $@ || die |
580 |
else |
581 |
einfo fowners ${euid}:${egid} $@ |
582 |
fowners ${euid}:${egid} $@ || die |
583 |
fi |
584 |
} |
585 |
|
466 |
fi |
586 |
fi |