diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py index b88af05..866be35 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py @@ -2430,14 +2430,16 @@ def update_groups(self): return univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'updating groups') + def _append_dn(from_, target, dn): + if not any(self.lo.lo.compare_dn(x, dn) for x in from_): + target.append(dn) + add_to_group = [] remove_from_group = [] for group in self.oldinfo.get('groups', []): - if group not in self.info.get('groups', []): - remove_from_group.append(group) + _append_dn(self.info.get('groups', []), remove_from_group, group) for group in self.info.get('groups', []): - if group not in self.oldinfo.get('groups', []): - add_to_group.append(group) + _append_dn(self.oldinfo.get('groups', []), add_to_group, group) if 'oldPrimaryGroupDn' in self.__dict__: if self.oldPrimaryGroupDn: @@ -2455,14 +2457,14 @@ def update_groups(self): for group in add_to_group: groupObject = univention.admin.objects.get(univention.admin.modules.get('groups/group'), self.co, self.lo, self.position, group) groupObject.open() - if self.dn not in groupObject['hosts']: + if not any(self.lo.lo.compare_dn(x, self.dn) for x in groupObject['hosts']): groupObject['hosts'].append(self.dn) groupObject.modify(ignore_license=1) for group in remove_from_group: groupObject = univention.admin.objects.get(univention.admin.modules.get('groups/group'), self.co, self.lo, self.position, group) groupObject.open() - if self.dn in groupObject['hosts']: + if not any(self.lo.lo.compare_dn(x, self.dn) for x in groupObject['hosts']): groupObject['hosts'].remove(self.dn) groupObject.modify(ignore_license=1)