From: Iker Pedrosa Date: Wed, 10 Sep 2025 07:53:15 +0000 (+0200) Subject: tests/system/framework/roles/shadow.py: implement binding for `gpasswd` X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=df7d2f0849f3322b4167dd94429257e3a220d505;p=thirdparty%2Fshadow.git tests/system/framework/roles/shadow.py: implement binding for `gpasswd` Signed-off-by: Iker Pedrosa --- diff --git a/tests/system/framework/roles/shadow.py b/tests/system/framework/roles/shadow.py index d267feb4e..5cfa10de3 100644 --- a/tests/system/framework/roles/shadow.py +++ b/tests/system/framework/roles/shadow.py @@ -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