acct-*.eclass: Allow dynamic UID/GID assignment via -1
authorMichał Górny <mgorny@gentoo.org>
Wed, 7 Aug 2019 17:07:45 +0000 (19:07 +0200)
committerMichał Górny <mgorny@gentoo.org>
Sat, 17 Aug 2019 20:36:31 +0000 (22:36 +0200)
Allow a special value of '-1' to dynamically assign UID/GID for the user
or group.  This is intended to be used in overlays where proper
assignment does not take place but whose owners wish to switch to acct-*
packages.

While technically it is possible to choose a free UID/GID, it could be
taken afterwards by some Gentoo package and unnecessarily introduce
a conflict.  Using '999' was also suggested (as the first dynamic
UID/GID) but it would cause issues for people enabling
ACCT_*_ENFORCE_ID.  To avoid this, '-1' does not trigger collision
checks.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
eclass/acct-group.eclass
eclass/acct-user.eclass

index 9eab00db690fbd279d2c751df1dea2d67a0f6086..d5ccd209c9e3d41224ac1b3c6baf6cdd7ef85d0d 100644 (file)
@@ -59,6 +59,9 @@ readonly ACCT_GROUP_NAME
 # @DESCRIPTION:
 # Preferred GID for the new group.  This variable is obligatory, and its
 # value must be unique across all group packages.
+#
+# Overlays should set this to -1 to dynamically allocate GID.  Using -1
+# in ::gentoo is prohibited by policy.
 
 # @ECLASS-VARIABLE: ACCT_GROUP_ENFORCE_ID
 # @DESCRIPTION:
@@ -87,6 +90,7 @@ acct-group_pkg_pretend() {
 
        # verify ACCT_GROUP_ID
        [[ -n ${ACCT_GROUP_ID} ]] || die "Ebuild error: ACCT_GROUP_ID must be set!"
+       [[ ${ACCT_GROUP_ID} -eq -1 ]] && return
        [[ ${ACCT_GROUP_ID} -ge 0 ]] || die "Ebuild errors: ACCT_GROUP_ID=${ACCT_GROUP_ID} invalid!"
 
        # check for ACCT_GROUP_ID collisions early
index 008dc6bb7d6888af61256afb5dc835aaa37be90d..fa4f9daef8f798b69ba445e25a60ef0aa1f64e92 100644 (file)
@@ -67,6 +67,9 @@ readonly ACCT_USER_NAME
 # @DESCRIPTION:
 # Preferred UID for the new user.  This variable is obligatory, and its
 # value must be unique across all user packages.
+#
+# Overlays should set this to -1 to dynamically allocate UID.  Using -1
+# in ::gentoo is prohibited by policy.
 
 # @ECLASS-VARIABLE: ACCT_USER_ENFORCE_ID
 # @DESCRIPTION:
@@ -279,6 +282,7 @@ acct-user_pkg_pretend() {
 
        # verify ACCT_USER_ID
        [[ -n ${ACCT_USER_ID} ]] || die "Ebuild error: ACCT_USER_ID must be set!"
+       [[ ${ACCT_USER_ID} -eq -1 ]] && return
        [[ ${ACCT_USER_ID} -ge 0 ]] || die "Ebuild errors: ACCT_USER_ID=${ACCT_USER_ID} invalid!"
 
        # check for ACCT_USER_ID collisions early