From 76b7de943b065a831fe8639aa0348ebceee1ae02 Mon Sep 17 00:00:00 2001 From: jctanner Date: Thu, 19 May 2016 22:37:57 -0400 Subject: [PATCH] Do not ignore the primary group if modifying the list of secondary groups. (#3585) Fixes #1118 --- system/user.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/system/user.py b/system/user.py index 7015d268208..0df5d849eea 100755 --- a/system/user.py +++ b/system/user.py @@ -430,7 +430,8 @@ class User(object): cmd.append(self.group) if self.groups is not None: - current_groups = self.user_group_membership() + # get a list of all groups for the user, including the primary + current_groups = self.user_group_membership(exclude_primary=False) groups_need_mod = False groups = [] @@ -460,7 +461,6 @@ class User(object): cmd.append('-G') cmd.append(','.join(groups)) - if self.comment is not None and info[4] != self.comment: cmd.append('-c') cmd.append(self.comment) @@ -523,12 +523,19 @@ class User(object): groups.remove(g) return groups - def user_group_membership(self): + def user_group_membership(self, exclude_primary=True): + ''' Return a list of groups the user belongs to ''' groups = [] info = self.get_pwd_info() for group in grp.getgrall(): - if self.name in group.gr_mem and not info[3] == group.gr_gid: - groups.append(group[0]) + if self.name in group.gr_mem: + # Exclude the user's primary group by default + if not exclude_primary: + groups.append(group[0]) + else: + if info[3] != group.gr_gid: + groups.append(group[0]) + return groups def user_exists(self):