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 df632e1..323d1e3 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 @@ -80,6 +80,7 @@ def __init__(self, co, lo, position, dn='', superordinate=None): self.co = co self.lo = lo self.dn = dn + self.old_dn = self.dn self.superordinate = superordinate self.set_defaults = 0 @@ -116,6 +117,7 @@ def save(self): '''saves current state as old state''' self.oldinfo = copy.deepcopy(self.info) + self.old_dn = self.dn self.oldpolicies = copy.deepcopy(self.policies) self.options = list(set(self.options)) self.old_options = [] @@ -801,7 +803,7 @@ def _modify(self, modify_childs=1, ignore_license=0): # FIXME: timeout without exception if objectClass of Object is not exsistant !! univention.debug.debug(univention.debug.ADMIN, 99, 'Modify dn=%r;\nmodlist=%r;\noldattr=%r;' % (self.dn, ml, self.oldattr)) - self.lo.modify(self.dn, ml, ignore_license=ignore_license) + self.dn = self.lo.modify(self.dn, ml, ignore_license=ignore_license) self._ldap_post_modify() self.call_udm_property_hook('hook_ldap_post_modify', self) @@ -2440,7 +2442,7 @@ def update_groups(self): hosts = DN.set(groupObject['hosts'] + [self.dn]) if group not in new_groups: # remove this computer from the group - hosts -= DN.set([self.dn]) + hosts -= DN.set([self.old_dn]) groupObject['hosts'] = list(DN.values(hosts)) groupObject.modify(ignore_license=1) diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/cn.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/cn.py index 3ab5ca6..93289d4 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/cn.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/cn.py @@ -248,18 +248,13 @@ def _ldap_post_create(self): if changes: self.lo.modify(self.default_dn, changes) - def _ldap_pre_modify(self): - if self.hasChanged('name'): - newdn = 'cn=%s,%s' % (ldap.dn.escape_dn_chars(self.info['name']), self.lo.parentDn(self.dn)) - self.move(newdn) - def _ldap_post_modify(self): changes = [] for i in range(0, len(self.pathKeys)): if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]: if self.info[self.pathKeys[i]] == '0': - changes.append((self.ldapKeys[i], self.dn, '')) + changes.append((self.ldapKeys[i], self.old_dn, '')) else: changes.append((self.ldapKeys[i], '', self.dn)) if changes: diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/ou.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/ou.py index 539e81a..3d59ee0 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/ou.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/ou.py @@ -261,11 +261,6 @@ def _ldap_post_create(self): if changes: self.lo.modify(self.default_dn, changes) - def _ldap_pre_modify(self): - if self.hasChanged('name'): - newdn = 'ou=%s,%s' % (ldap.dn.escape_dn_chars(self.info['name']), self.lo.parentDn(self.dn)) - self.move(newdn) - def _ldap_post_move(self, olddn): settings_module = univention.admin.modules.get('settings/directory') settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn=self.default_dn) @@ -282,7 +277,7 @@ def _ldap_post_modify(self): for i in range(0, len(self.pathKeys)): if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]: if self.info[self.pathKeys[i]] == '0': - changes.append((self.ldapKeys[i], self.dn, '')) + changes.append((self.ldapKeys[i], self.old_dn, '')) else: changes.append((self.ldapKeys[i], '', self.dn)) if changes: diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/groups/group.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/groups/group.py index c754564..2a68816 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/groups/group.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/groups/group.py @@ -772,21 +772,21 @@ def __update_membership(self): # rewrite membership attributes in "supergroup" if we have a new name (rename) if old_name and old_name != new_name: univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: rewrite memberuid after rename') - ldapdn = ldap.dn.str2dn(self.dn) - newldaprdn = [] - for attr, val, ava_type in ldapdn[0]: - if attr.lower() == 'cn' and val.lower() == new_name.lower(): - val = new_name - newldaprdn.append((attr, new_name, ava_type)) - ldapdn[0] = newldaprdn - newdn = ldap.dn.dn2str(ldapdn) + # ldapdn = ldap.dn.str2dn(self.old_dn) + # newldaprdn = [] + # for attr, val, ava_type in ldapdn[0]: + # if attr.lower() == 'cn' and val.lower() == new_name.lower(): + # val = new_name + # newldaprdn.append((attr, new_name, ava_type)) + # ldapdn[0] = newldaprdn + # newdn = ldap.dn.dn2str(ldapdn) for group in self.info.get('memberOf', []): - if isinstance(group, type([])): + if isinstance(group, list): group = group[0] members = self.lo.getAttr(group, 'uniqueMember') newmembers = copy.deepcopy(members) - newmembers = self.__case_insensitive_remove_from_list(self.dn, newmembers) - newmembers.append(newdn) + newmembers = self.__case_insensitive_remove_from_list(self.old_dn, newmembers) + newmembers.append(self.dn) self.__set_membership_attributes(group, members, newmembers) add_to_group = [] @@ -815,10 +815,11 @@ def __update_membership(self): if isinstance(group, list): group = group[0] members = self.lo.getAttr(group, 'uniqueMember') - if not self.__case_insensitive_in_list(self.dn, members): + if not self.__case_insensitive_in_list(self.dn, members) and not self.__case_insensitive_in_list(self.old_dn, members): continue newmembers = copy.deepcopy(members) newmembers = self.__case_insensitive_remove_from_list(self.dn, newmembers) + newmembers = self.__case_insensitive_remove_from_list(self.old_dn, newmembers) univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: remove from supergroup %s' % group) self.__set_membership_attributes(group, members, newmembers) diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py index 74d1d32..47d0a07 100644 --- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py +++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py @@ -1773,7 +1773,7 @@ def __update_groups(self): for group in old_groups: if group and not case_insensitive_in_list(group, self.info.get('groups', [])) and group.lower() != self['primaryGroup'].lower(): grpobj = group_mod.object(None, self.lo, self.position, group) - grpobj.fast_member_remove([self.dn], [old_uid]) + grpobj.fast_member_remove([self.old_dn], [old_uid]) univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'users/user: check groups in info[groups]') for group in self.info.get('groups', []):