diff mbox series

[PATCHv2,4/6] useradd_base.bbclass: Emulate the groupmems command using usermod

Message ID 20260526124420.2564500-4-pkj@axis.com
State Under Review
Headers show
Series [PATCHv2,1/6] useradd.bbclass: Some clean-ups and simplifications | expand

Commit Message

Peter Kjellerstedt May 26, 2026, 12:44 p.m. UTC
The groupmems command does to support the --prefix option, which is
being used since commit a7b846ba7d6d63a5e59939d75d9c5fe3e4cbb0e9.
However, the groupmems command can easily be emulated using the usermod
command.

[YOCTO#16277]

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---

PATCHv2: Fail if --add and/or --group are not specified.

 meta/classes/useradd_base.bbclass | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/meta/classes/useradd_base.bbclass b/meta/classes/useradd_base.bbclass
index 5e1c699118..5e12880b64 100644
--- a/meta/classes/useradd_base.bbclass
+++ b/meta/classes/useradd_base.bbclass
@@ -56,13 +56,20 @@  perform_groupmems () {
 	bbnote "${PN}: Performing groupmems with [$opts]"
 	local groupname=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-g" || $i == "--group") print $(i+1) }'`
 	local username=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-a" || $i == "--add") print $(i+1) }'`
-	bbnote "${PN}: Running groupmems command with group $groupname and user $username"
+	local prefix=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-P" || $i == "--prefix") print $(i+1) }'`
+	if test "x$groupname" = "x"; then
+		bbfatal "${PN}: groupmems: No user specified using --add."
+
+	elif test "x$username" = "x"; then
+		bbfatal "${PN}: groupmems: No group specified using --group."
+	fi
+	bbnote "${PN}: Emulating groupmems command using usermod with group $groupname and user $username"
 	local mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*$" $rootdir/etc/group || true`"
 	if test "x$mem_exists" = "x"; then
-		eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupmems \$opts\" || true
+		eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO usermod \${prefix:+--prefix \$prefix} --append --groups \$groupname \$username\" || true
 		mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*$" $rootdir/etc/group || true`"
 		if test "x$mem_exists" = "x"; then
-			bbfatal "${PN}: groupmems command did not succeed."
+			bbfatal "${PN}: groupmems command (emulated using usermod) did not succeed."
 		fi
 	else
 		bbnote "${PN}: group $groupname already contains $username, not re-adding it"