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


Reply via email to