user.eclass: Allocate next free UID or GID from 999 downwards.

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>
This commit is contained in:
Ulrich Müller
2019-07-27 10:37:53 +02:00
parent 39563645c6
commit 970abc63ba

View 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
}