Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions sssd_test_framework/utils/local_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,33 @@ def add_member(self, member: GroupMemberField) -> LocalGroup:
"""
return self.add_members([member])

def _group_member_add_cmd(self, member: GroupMemberField) -> str:
"""Build shell to add one member; groupmems was removed from recent Fedora."""
name = self._member_principal_name(member)
group = self._name
if isinstance(member, LocalGroup):
return (
f"current=$(getent group '{group}' | cut -d: -f4); "

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you for readability sake use f""" here instead multiple lines?

f'case ",$current," in *,"{name}",*) ;; '
f"*) "
f'if [ -n "$current" ]; then gpasswd -M "$current,{name}" \'{group}\'; '
f"else gpasswd -M '{name}' '{group}'; fi ;; "
f"esac"
)
return f"gpasswd -a '{name}' '{group}'"

def _group_member_remove_cmd(self, member: GroupMemberField) -> str:
"""Build shell to remove one member; groupmems was removed from recent Fedora."""
name = self._member_principal_name(member)
group = self._name
if isinstance(member, LocalGroup):
return (
f"current=$(getent group '{group}' | cut -d: -f4); "

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the same as above.

f"new=$(printf '%s\\n' \"${{current//,/ }}\" | grep -vxF '{name}' | paste -sd,); "
f"gpasswd -M \"$new\" '{group}'"
)
return f"gpasswd -d '{name}' '{group}'"

def add_members(self, members: list[GroupMemberField]) -> LocalGroup:
"""
Add multiple group members.
Expand All @@ -669,9 +696,7 @@ def add_members(self, members: list[GroupMemberField]) -> LocalGroup:
if not members:
return self

cmd = "\n".join(
[f"groupmems --group '{self._name}' --add '{self._member_principal_name(x)}'" for x in members]
)
cmd = "\n".join([self._group_member_add_cmd(x) for x in members])
self.util.host.conn.run("set -ex\n" + cmd, log_level=ProcessLogLevel.Error)

return self
Expand Down Expand Up @@ -701,9 +726,7 @@ def remove_members(self, members: list[GroupMemberField]) -> LocalGroup:
if not members:
return self

cmd = "\n".join(
[f"groupmems --group '{self._name}' --delete '{self._member_principal_name(x)}'" for x in members]
)
cmd = "\n".join([self._group_member_remove_cmd(x) for x in members])
self.util.host.conn.run("set -ex\n" + cmd, log_level=ProcessLogLevel.Error)

return self
Expand Down
Loading