]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/system/framework/roles/shadow.py: implement binding for `gpasswd`
authorIker Pedrosa <ipedrosa@redhat.com>
Wed, 10 Sep 2025 07:53:15 +0000 (09:53 +0200)
committerSerge Hallyn <serge@hallyn.com>
Wed, 25 Mar 2026 02:33:15 +0000 (21:33 -0500)
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/system/framework/roles/shadow.py

index d267feb4e393e90c274a5d97623083a56845d9f8..5cfa10de3e7cb59433c9e63270a80f56cae584c1 100644 (file)
@@ -434,3 +434,23 @@ class Shadow(BaseLinuxRole[ShadowHost]):
         self.host.discard_file("/etc/shadow")
 
         return cmd
+
+    def gpasswd(self, *args, run_as: str = "root") -> ProcessResult:
+        """
+        Administer group passwords and membership.
+
+        Groups can have administrators, members, and passwords.
+        """
+        args_dict = self._parse_args(args)
+
+        if run_as == "root":
+            self.logger.info(f'Administering group "{args_dict["name"]}" as root on {self.host.hostname}')
+            cmd = self.host.conn.run("gpasswd " + args[0], log_level=ProcessLogLevel.Error)
+        else:
+            self.logger.info(f'Administering group "{args_dict["name"]}" as user "{run_as}" on {self.host.hostname}')
+            cmd = self.host.conn.run(f"su - {run_as} -c 'gpasswd {args[0]}'", log_level=ProcessLogLevel.Error)
+
+        self.host.discard_file("/etc/group")
+        self.host.discard_file("/etc/gshadow")
+
+        return cmd