Skip to content

Commit

Permalink
[pfsense_user] Fix groups processing
Browse files Browse the repository at this point in the history
  • Loading branch information
opoplawski committed Jan 31, 2025
1 parent 3dbbf08 commit 48cd9dc
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions plugins/modules/pfsense_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,15 +180,14 @@ def __init__(self, module, pfsense=None):
##############################
# XML processing
#
def _find_group(self, name):
def _find_group_elt(self, name):
return self.pfsense.find_elt('group', name, search_field='name', root_elt=self.root_elt)

def _find_groups_for_uid(self, uid):
groups = self.pfsense.find_elt_xpath("group[member='{0}']".format(uid), root_elt=self.root_elt, multiple_ok=True)
if groups is not None:
return groups
else:
return []
def _find_group_names_for_uid(self, uid):
groups = []
for group_elt in self.pfsense.find_elt("group", uid, search_field="member", root_elt=self.root_elt, multiple_ok=True):
groups.append(group_elt.find('name').text)
return groups

def _nextuid(self):
nextuid_elt = self.root_elt.find('nextuid')
Expand Down Expand Up @@ -241,11 +240,11 @@ def _update_groups(self):
# Handle group member element - need uid set or retrieved above
uid = self.target_elt.find('uid').text
# Get current group membership
self.diff['before']['groups'] = self._find_groups_for_uid(uid)
self.diff['before']['groups'] = self._find_group_names_for_uid(uid)

# Add user to groups if needed
for group in self.user_groups:
group_elt = self._find_group(group)
group_elt = self._find_group_elt(group)
if group_elt is None:
self.module.fail_json(msg='Group (%s) does not exist' % group)
if len(group_elt.findall("[member='{0}']".format(uid))) == 0:
Expand All @@ -256,7 +255,7 @@ def _update_groups(self):
# Remove user from groups if needed
for group in self.diff['before']['groups']:
if group not in self.user_groups:
group_elt = self._find_group(group)
group_elt = self._find_group_elt(group)
if group_elt is None:
self.module.fail_json(msg='Group (%s) does not exist' % group)
for member_elt in group_elt.findall('member'):
Expand Down Expand Up @@ -293,11 +292,11 @@ def _pre_remove_target_elt(self):
self.obj['uid'] = self.target_elt.find('uid').text

# Get current group membership
self.diff['before']['groups'] = self._find_groups_for_uid(self.obj['uid'])
self.diff['before']['groups'] = self._find_group_names_for_uid(self.obj['uid'])

# Remove user from groups if needed
for group in self.diff['before']['groups']:
group_elt = self._find_group(group)
group_elt = self._find_group_elt(group)
if group_elt is None:
self.module.fail_json(msg='Group (%s) does not exist' % group)
for member_elt in group_elt.findall('member'):
Expand Down

0 comments on commit 48cd9dc

Please sign in to comment.