Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 541406 | Differences between
and this patch

Collapse All | Expand All

(-)a/eclass/user.eclass (-8 / +128 lines)
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

Return to bug 541406