user.eclass: Allocate next free UID or GID from 999 downwards.
authorUlrich Müller <ulm@gentoo.org>
Sat, 27 Jul 2019 08:37:53 +0000 (10:37 +0200)
committerUlrich Müller <ulm@gentoo.org>
Mon, 29 Jul 2019 09:21:48 +0000 (11:21 +0200)
Fixed UIDs and GIDs are mostly located in the low range, therefore
going downwards from 999 to 101 will minimise collisions between fixed
and dynamically allocated IDs.

Note that on Linux and other targets using "groupadd -r" from
sys-apps/shadow, GIDs are already allocated that way implicitly.

Signed-off-by: Ulrich Müller <ulm@gentoo.org>
eclass/user.eclass

index 9dc15fa75d23da510ae0b3e7c485802582199930..a3cacb6d5f104f7f947ae624365939c0e4e8f709 100644 (file)
@@ -157,10 +157,10 @@ enewuser() {
                euid="next"
        fi
        if [[ ${euid} == "next" ]] ; then
-               for ((euid = 101; euid <= 999; euid++)); do
+               for ((euid = 999; euid >= 101; euid--)); do
                        [[ -z $(egetent passwd ${euid}) ]] && break
                done
-               [[ ${euid} -le 999 ]] || die "${FUNCNAME}: no free UID found"
+               [[ ${euid} -ge 101 ]] || die "${FUNCNAME}: no free UID found"
        fi
        opts+=( -u ${euid} )
        einfo " - Userid: ${euid}"
@@ -318,10 +318,10 @@ enewgroup() {
        _enewgroup_next_gid() {
                if [[ ${egid} == *[!0-9]* ]] ; then
                        # Non numeric
-                       for ((egid = 101; egid <= 999; egid++)) ; do
+                       for ((egid = 999; egid >= 101; egid--)) ; do
                                [[ -z $(egetent group ${egid}) ]] && break
                        done
-                       [[ ${egid} -le 999 ]] || die "${FUNCNAME}: no free GID found"
+                       [[ ${egid} -ge 101 ]] || die "${FUNCNAME}: no free GID found"
                fi
        }