commit:     b7e37226a665a0613facd10386bbbbec8696699e
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Thu May  9 20:07:19 2024 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Mon May 13 13:13:26 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b7e37226

eclass/acct-user.eclass: use $PN to construct make.conf override vars

If (after upcasing and replacing hyphens by underscores) ACCT_USER_NAME
is set to something that isn't valid in a bash variable name, the eclass
will crash: it uses ACCT_USER_NAME to construct the make.conf override
variables in pkg_pretend() and src_install(). This commit constructs the
variable names using PN instead of ACCT_USER_NAME. In ::gentoo, the two
are equivalent, but in an overlay this allows weirder usernames at the
expense of slightly mismatched variable names.

Signed-off-by: Michael Orlitzky <mjo <AT> gentoo.org>

 eclass/acct-user.eclass | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/eclass/acct-user.eclass b/eclass/acct-user.eclass
index 765487391fbd..9eab1f4c4ae6 100644
--- a/eclass/acct-user.eclass
+++ b/eclass/acct-user.eclass
@@ -231,8 +231,9 @@ acct-user_pkg_pretend() {
        [[ ${ACCT_USER_ID} -ge -1 ]] || die "Ebuild error: 
ACCT_USER_ID=${ACCT_USER_ID} invalid!"
        local user_id=${ACCT_USER_ID}
 
-       # check for the override
-       local override_name=${ACCT_USER_NAME^^}
+       # check for the override, use PN in case this is an overlay and
+       # ACCT_USER_NAME is not PN and not valid in a bash variable name
+       local override_name=${PN^^}
        local override_var=ACCT_USER_${override_name//-/_}_ID
        if [[ -n ${!override_var} ]]; then
                user_id=${!override_var}
@@ -274,8 +275,9 @@ acct-user_src_install() {
        # serialize for override support
        local ACCT_USER_GROUPS=${ACCT_USER_GROUPS[*]}
 
-       # support make.conf overrides
-       local override_name=${ACCT_USER_NAME^^}
+       # support make.conf overrides, use PN in case this is an overlay and
+       # ACCT_USER_NAME is not PN and not valid in a bash variable name
+       local override_name=${PN^^}
        override_name=${override_name//-/_}
        local var
        for var in ACCT_USER_{ID,COMMENT,SHELL,HOME{,_OWNER,_PERMS},GROUPS}; do
@@ -437,7 +439,7 @@ acct-user_pkg_postinst() {
                has "${g}" "${groups[@]}" || del_groups+="${del_groups:+, }${g}"
        done
        if [[ -n ${del_groups} ]]; then
-               local override_name=${ACCT_USER_NAME^^}
+               local override_name=${PN^^}
                override_name=${override_name//-/_}
                ewarn "Removing user ${ACCT_USER_NAME} from group(s): 
${del_groups}"
                ewarn "To retain the user's group membership in the local 
system"

Reply via email to