]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/system/framework/roles/shadow.py: implement binding for `groupmems`
authorIker Pedrosa <ipedrosa@redhat.com>
Tue, 19 Aug 2025 09:23:16 +0000 (11:23 +0200)
committerSerge Hallyn <serge@hallyn.com>
Fri, 5 Dec 2025 22:35:36 +0000 (16:35 -0600)
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/system/framework/roles/shadow.py

index f6b7481b6f4f04d788fc1d4d5dc021f4addf1e29..6be27151ccdb53bc68852f858123c449c708e012 100644 (file)
@@ -166,3 +166,27 @@ class Shadow(BaseLinuxRole[ShadowHost]):
         self.host.discard_file("/etc/gshadow")
 
         return cmd
+
+    def groupmems(self, *args, run_as: str = "root", password: str | None = None) -> ProcessResult:
+        """
+        Administer members of a user's primary group.
+
+        The groupmems command allows management of group membership lists.
+        If `run_as` is provided, then the `password` must be provided and the command groupmems run under this user.
+        If `run_as` isn't provided, then the command is run under `root`.
+        """
+        args_dict = self._parse_args(args)
+
+        if run_as == "root":
+            self.logger.info(f'Administer {args_dict["name"]} group membership as root on {self.host.hostname}')
+            cmd = self.host.conn.run("groupmems " + args[0], log_level=ProcessLogLevel.Error)
+        else:
+            self.logger.info(f'Administer {args_dict["name"]} group membership on {self.host.hostname}')
+            cmd = self.host.conn.run(
+                f"echo '{password}' | su - {run_as} -c 'groupmems {args[0]}'", log_level=ProcessLogLevel.Error
+            )
+
+        self.host.discard_file("/etc/group")
+        self.host.discard_file("/etc/gshadow")
+
+        return cmd