From: Iker Pedrosa Date: Tue, 19 Aug 2025 09:23:16 +0000 (+0200) Subject: tests/system/framework/roles/shadow.py: implement binding for `groupmems` X-Git-Tag: 4.19.0-rc1~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79d1e363841d4de49df83cf2e44c3aa9b2fb604f;p=thirdparty%2Fshadow.git tests/system/framework/roles/shadow.py: implement binding for `groupmems` Signed-off-by: Iker Pedrosa --- diff --git a/tests/system/framework/roles/shadow.py b/tests/system/framework/roles/shadow.py index f6b7481b6..6be27151c 100644 --- a/tests/system/framework/roles/shadow.py +++ b/tests/system/framework/roles/shadow.py @@ -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