We need to resolve the user and group names to numeric ids before calling fowners.
Closes: https://bugs.gentoo.org/956026 Closes: https://github.com/gentoo/gentoo/pull/42158 Signed-off-by: Mike Gilbert <flop...@gentoo.org> --- eclass/acct-user.eclass | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/eclass/acct-user.eclass b/eclass/acct-user.eclass index b3bcff7e550c..12a2110b1a87 100644 --- a/eclass/acct-user.eclass +++ b/eclass/acct-user.eclass @@ -1,4 +1,4 @@ -# Copyright 2019-2024 Gentoo Authors +# Copyright 2019-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: acct-user.eclass @@ -370,14 +370,20 @@ acct-user_pkg_preinst() { if [[ ${_ACCT_USER_HOME} != /dev/null ]]; then # default ownership to user:group - if [[ -z ${_ACCT_USER_HOME_OWNER} ]]; then - if [[ -n ${ROOT} ]]; then - local euid=$(egetent passwd ${ACCT_USER_NAME} | cut -d: -f3) - local egid=$(egetent passwd ${ACCT_USER_NAME} | cut -d: -f4) - _ACCT_USER_HOME_OWNER=${euid}:${egid} - else - _ACCT_USER_HOME_OWNER=${ACCT_USER_NAME}:${groups[0]} + local user=${ACCT_USER_NAME} + local group=${groups[0]} + if [[ -n ${ROOT} ]]; then + # resolve user:group to uid:gid + if [[ -n ${_ACCT_USER_HOME_OWNER} ]]; then + user=${_ACCT_USER_HOME_OWNER%:*} + group=${_ACCT_USER_HOME_OWNER#*:} fi + local euid= egid= + [[ -z ${user} ]] || euid=$(egetent passwd "${user}" | cut -d: -f3) + [[ -z ${group} ]] || egid=$(egetent group "${group}" | cut -d: -f3) + _ACCT_USER_HOME_OWNER=${euid}:${egid} + elif [[ -z ${_ACCT_USER_HOME_OWNER} ]]; then + _ACCT_USER_HOME_OWNER=${user}:${group} fi # Path might be missing due to INSTALL_MASK, etc. # https://bugs.gentoo.org/691478 -- 2.49.0