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 / +116 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
                       grep --color=never "^${key}" ${ROOT}/etc/${db}
101
               fi
98
               ;;
102
               ;;
99
       esac
103
       esac
100
}
104
}
Lines 120-126 enewuser() { Link Here
120
       if [[ -n $(egetent passwd "${euser}") ]] ; then
124
       if [[ -n $(egetent passwd "${euser}") ]] ; then
121
               return 0
125
               return 0
122
       fi
126
       fi
123
       einfo "Adding user '${euser}' to your system ..."
127
       if [[ "${ROOT}" == "/" ]] ; then
128
               einfo "Adding user '${euser}' to your system ..."
129
       else
130
               einfo "Adding user '${euser}' to ${ROOT} ..."
131
       fi
124
132
125
       # options to pass to useradd
133
       # options to pass to useradd
126
       local opts=()
134
       local opts=()
Lines 247-260 enewuser() { Link Here
247
               ;;
255
               ;;
248
256
249
       *)
257
       *)
250
               useradd -r "${opts[@]}" "${euser}" || die
258
               if [[ "${ROOT}" != "/" ]] ; then
259
                       opts+=( --prefix "${ROOT}" )
260
               fi
261
                       einfo useradd -r "${opts[@]}" "${euser}"
262
                       useradd -r "${opts[@]}" "${euser}" || die
251
               ;;
263
               ;;
252
       esac
264
       esac
253
265
254
       if [[ ! -e ${ROOT}/${ehome} ]] ; then
266
       if [[ ! -e ${ROOT}/${ehome} ]] ; then
255
               einfo " - Creating ${ehome} in ${ROOT}"
267
               einfo " - Creating ${ehome} in ${ROOT}"
256
               mkdir -p "${ROOT}/${ehome}"
268
               mkdir -p "${ROOT}/${ehome}"
257
               chown "${euser}" "${ROOT}/${ehome}"
269
               chown "${euid}" "${ROOT}/${ehome}"
258
               chmod 755 "${ROOT}/${ehome}"
270
               chmod 755 "${ROOT}/${ehome}"
259
       fi
271
       fi
260
}
272
}
Lines 280-286 enewgroup() { Link Here
280
       if [[ -n $(egetent group "${egroup}") ]] ; then
292
       if [[ -n $(egetent group "${egroup}") ]] ; then
281
               return 0
293
               return 0
282
       fi
294
       fi
283
       einfo "Adding group '${egroup}' to your system ..."
295
       if [[ "${ROOT}" == "/" ]] ; then
296
               einfo "Adding group '${egroup}' to your system ..."
297
       else
298
               einfo "Adding group '${egroup}' to ${ROOT} ..."
299
       fi
284
300
285
       # handle gid
301
       # handle gid
286
       local egid=$1; shift
302
       local egid=$1; shift
Lines 339-346 enewgroup() { Link Here
339
               else
355
               else
340
                       opts="-g ${egid}"
356
                       opts="-g ${egid}"
341
               fi
357
               fi
342
               # We specify -r so that we get a GID in the system range from login.defs
358
               if [[ "${ROOT}" == "/" ]] ; then
343
               groupadd -r ${opts} "${egroup}" || die
359
                       # We specify -r so that we get a GID in the system range from login.defs
360
                       groupadd  -r ${opts} "${egroup}" || die
361
               else
362
                       einfo groupadd --prefix ${ROOT} -r ${opts} "${egroup}"
363
                       groupadd --prefix ${ROOT} -r ${opts} "${egroup}" || die                 
364
               fi
344
               ;;
365
               ;;
345
       esac
366
       esac
346
}
367
}
Lines 454-460 esethome() { Link Here
454
               ;;
475
               ;;
455
476
456
       *)
477
       *)
457
               usermod -d "${ehome}" "${euser}" && return 0
478
               if [[ "${ROOT}" == "/" ]] ; then
479
                       usermod -d "${ehome}" "${euser}" && return 0
480
               else
481
                       usermod --prefix ${ROOT} -d "${ehome}" "${euser}" && return 0
482
               fi
458
               [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home"
483
               [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home"
459
               eerror "There was an error when attempting to update the home directory for ${euser}"
484
               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):"
485
               eerror "Please update it manually on your system (as root):"
Lines 463-466 esethome() { Link Here
463
       esac
488
       esac
464
}
489
}
465
490
491
# @USAGE: <user>
492
# @DESCRIPTION:
493
# Gets the uid for the specified user.
494
egetuid() {
495
       [[ $# -eq 1 ]] || die "usage: egetuid <user>"
496
497
        egetent passwd "$1" | cut -d: -f3 || die
498
}
499
500
# @USAGE: <group>
501
# @DESCRIPTION:
502
# Gets the gid for the specified group.
503
egetgid() {
504
       [[ $# -eq 1 ]] || die "usage: egetuid <user>"
505
506
        egetent passwd "$1" | cut -d: -f3 || die
507
}
508
509
# @USAGE: <group>
510
# @DESCRIPTION:
511
# Gets the gid for the specified group.
512
egetgid() {
513
        [[ $# -eq 1 ]] || die "usage: egetgid <group>"
514
515
        egetent group "$1" | cut -d: -f3 || die
516
}
517
518
519
# @USAGE: <user> <group> <path>
520
# @DESCRIPTION:
521
# chown portage equivalent, honoring the ${ROOT} variable.
522
echown() {
523
       # get the user
524
        local euser=$1; shift
525
        if [[ -z ${euser} ]] ; then
526
                eerror "No user specified !"
527
                       die "Cannot call echown without a user"
528
        fi
529
530
       # get the group
531
        local egroup=$1; shift
532
        if [[ -z ${egroup} ]] ; then
533
                eerror "No group specified !"
534
                       die "Cannot call echown without a group"
535
        fi
536
       
537
       local euid
538
       local egid
539
       euid=$(egetuid "${euser}")
540
        egid=$(egetgid "${egroup}")
541
542
       einfo chown ${euid}:${egid} $@
543
544
        chown ${euid}:${egid} $@ || die
545
}
546
547
# @DESCRIPTION:
548
# fowners  honoring the ${ROOT} variable.
549
efowners() {
550
       # get the user
551
        local euser=$1; shift
552
        if [[ -z ${euser} ]] ; then
553
                eerror "No user specified !"
554
                die "Cannot call echown without a user"
555
        fi
556
557
       # get the group
558
        local egroup=$1; shift
559
        if [[ -z ${egroup} ]] ; then
560
                eerror "No group specified !"
561
                die "Cannot call echown without a group"
562
        fi
563
564
        local euid
565
               local egid
566
        euid=$(egetuid "${euser}")
567
        egid=$(egetgid "${egroup}")
568
569
        einfo fowners ${euid}:${egid} $@
570
571
        fowners ${euid}:${egid} $@ || die
572
}
573
466
fi
574
fi

Return to bug 541406