View | Details | Raw Unified | Return to bug 41694 | Differences between
and this patch

Collapse All | Expand All

(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py (-2 / +4 lines)
 Lines 80-85   def __init__(self, co, lo, position, dn='', superordinate=None): Link Here 
80
		self.co = co
80
		self.co = co
81
		self.lo = lo
81
		self.lo = lo
82
		self.dn = dn
82
		self.dn = dn
83
		self.old_dn = self.dn
83
		self.superordinate = superordinate
84
		self.superordinate = superordinate
84
85
85
		self.set_defaults = 0
86
		self.set_defaults = 0
 Lines 116-121   def save(self): Link Here 
116
		'''saves current state as old state'''
117
		'''saves current state as old state'''
117
118
118
		self.oldinfo = copy.deepcopy(self.info)
119
		self.oldinfo = copy.deepcopy(self.info)
120
		self.old_dn = self.dn
119
		self.oldpolicies = copy.deepcopy(self.policies)
121
		self.oldpolicies = copy.deepcopy(self.policies)
120
		self.options = list(set(self.options))
122
		self.options = list(set(self.options))
121
		self.old_options = []
123
		self.old_options = []
 Lines 801-807   def _modify(self, modify_childs=1, ignore_license=0): Link Here 
801
803
802
		# FIXME: timeout without exception if objectClass of Object is not exsistant !!
804
		# FIXME: timeout without exception if objectClass of Object is not exsistant !!
803
		univention.debug.debug(univention.debug.ADMIN, 99, 'Modify dn=%r;\nmodlist=%r;\noldattr=%r;' % (self.dn, ml, self.oldattr))
805
		univention.debug.debug(univention.debug.ADMIN, 99, 'Modify dn=%r;\nmodlist=%r;\noldattr=%r;' % (self.dn, ml, self.oldattr))
804
		self.lo.modify(self.dn, ml, ignore_license=ignore_license)
806
		self.dn = self.lo.modify(self.dn, ml, ignore_license=ignore_license)
805
807
806
		self._ldap_post_modify()
808
		self._ldap_post_modify()
807
		self.call_udm_property_hook('hook_ldap_post_modify', self)
809
		self.call_udm_property_hook('hook_ldap_post_modify', self)
 Lines 2440-2446   def update_groups(self): Link Here 
2440
			hosts = DN.set(groupObject['hosts'] + [self.dn])
2442
			hosts = DN.set(groupObject['hosts'] + [self.dn])
2441
			if group not in new_groups:
2443
			if group not in new_groups:
2442
				# remove this computer from the group
2444
				# remove this computer from the group
2443
				hosts -= DN.set([self.dn])
2445
				hosts -= DN.set([self.old_dn])
2444
			groupObject['hosts'] = list(DN.values(hosts))
2446
			groupObject['hosts'] = list(DN.values(hosts))
2445
			groupObject.modify(ignore_license=1)
2447
			groupObject.modify(ignore_license=1)
2446
2448
(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/cn.py (-6 / +1 lines)
 Lines 248-265   def _ldap_post_create(self): Link Here 
248
		if changes:
248
		if changes:
249
			self.lo.modify(self.default_dn, changes)
249
			self.lo.modify(self.default_dn, changes)
250
250
251
	def _ldap_pre_modify(self):
252
		if self.hasChanged('name'):
253
			newdn = 'cn=%s,%s' % (ldap.dn.escape_dn_chars(self.info['name']), self.lo.parentDn(self.dn))
254
			self.move(newdn)
255
256
	def _ldap_post_modify(self):
251
	def _ldap_post_modify(self):
257
		changes = []
252
		changes = []
258
253
259
		for i in range(0, len(self.pathKeys)):
254
		for i in range(0, len(self.pathKeys)):
260
			if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]:
255
			if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]:
261
				if self.info[self.pathKeys[i]] == '0':
256
				if self.info[self.pathKeys[i]] == '0':
262
					changes.append((self.ldapKeys[i], self.dn, ''))
257
					changes.append((self.ldapKeys[i], self.old_dn, ''))
263
				else:
258
				else:
264
					changes.append((self.ldapKeys[i], '', self.dn))
259
					changes.append((self.ldapKeys[i], '', self.dn))
265
		if changes:
260
		if changes:
(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/container/ou.py (-6 / +1 lines)
 Lines 261-271   def _ldap_post_create(self): Link Here 
261
		if changes:
261
		if changes:
262
			self.lo.modify(self.default_dn, changes)
262
			self.lo.modify(self.default_dn, changes)
263
263
264
	def _ldap_pre_modify(self):
265
		if self.hasChanged('name'):
266
			newdn = 'ou=%s,%s' % (ldap.dn.escape_dn_chars(self.info['name']), self.lo.parentDn(self.dn))
267
			self.move(newdn)
268
269
	def _ldap_post_move(self, olddn):
264
	def _ldap_post_move(self, olddn):
270
		settings_module = univention.admin.modules.get('settings/directory')
265
		settings_module = univention.admin.modules.get('settings/directory')
271
		settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn=self.default_dn)
266
		settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn=self.default_dn)
 Lines 282-288   def _ldap_post_modify(self): Link Here 
282
		for i in range(0, len(self.pathKeys)):
277
		for i in range(0, len(self.pathKeys)):
283
			if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]:
278
			if self.oldinfo[self.pathKeys[i]] != self.info[self.pathKeys[i]]:
284
				if self.info[self.pathKeys[i]] == '0':
279
				if self.info[self.pathKeys[i]] == '0':
285
					changes.append((self.ldapKeys[i], self.dn, ''))
280
					changes.append((self.ldapKeys[i], self.old_dn, ''))
286
				else:
281
				else:
287
					changes.append((self.ldapKeys[i], '', self.dn))
282
					changes.append((self.ldapKeys[i], '', self.dn))
288
		if changes:
283
		if changes:
(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/groups/group.py (-12 / +13 lines)
 Lines 772-792   def __update_membership(self): Link Here 
772
		# rewrite membership attributes in "supergroup" if we have a new name (rename)
772
		# rewrite membership attributes in "supergroup" if we have a new name (rename)
773
		if old_name and old_name != new_name:
773
		if old_name and old_name != new_name:
774
			univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: rewrite memberuid after rename')
774
			univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: rewrite memberuid after rename')
775
			ldapdn = ldap.dn.str2dn(self.dn)
775
			# ldapdn = ldap.dn.str2dn(self.old_dn)
776
			newldaprdn = []
776
			# newldaprdn = []
777
			for attr, val, ava_type in ldapdn[0]:
777
			# for attr, val, ava_type in ldapdn[0]:
778
				if attr.lower() == 'cn' and val.lower() == new_name.lower():
778
			# 	if attr.lower() == 'cn' and val.lower() == new_name.lower():
779
					val = new_name
779
			# 		val = new_name
780
				newldaprdn.append((attr, new_name, ava_type))
780
			# 	newldaprdn.append((attr, new_name, ava_type))
781
			ldapdn[0] = newldaprdn
781
			# ldapdn[0] = newldaprdn
782
			newdn = ldap.dn.dn2str(ldapdn)
782
			# newdn = ldap.dn.dn2str(ldapdn)
783
			for group in self.info.get('memberOf', []):
783
			for group in self.info.get('memberOf', []):
784
				if isinstance(group, type([])):
784
				if isinstance(group, list):
785
					group = group[0]
785
					group = group[0]
786
				members = self.lo.getAttr(group, 'uniqueMember')
786
				members = self.lo.getAttr(group, 'uniqueMember')
787
				newmembers = copy.deepcopy(members)
787
				newmembers = copy.deepcopy(members)
788
				newmembers = self.__case_insensitive_remove_from_list(self.dn, newmembers)
788
				newmembers = self.__case_insensitive_remove_from_list(self.old_dn, newmembers)
789
				newmembers.append(newdn)
789
				newmembers.append(self.dn)
790
				self.__set_membership_attributes(group, members, newmembers)
790
				self.__set_membership_attributes(group, members, newmembers)
791
791
792
		add_to_group = []
792
		add_to_group = []
 Lines 815-824   def __update_membership(self): Link Here 
815
			if isinstance(group, list):
815
			if isinstance(group, list):
816
				group = group[0]
816
				group = group[0]
817
			members = self.lo.getAttr(group, 'uniqueMember')
817
			members = self.lo.getAttr(group, 'uniqueMember')
818
			if not self.__case_insensitive_in_list(self.dn, members):
818
			if not self.__case_insensitive_in_list(self.dn, members) and not self.__case_insensitive_in_list(self.old_dn, members):
819
				continue
819
				continue
820
			newmembers = copy.deepcopy(members)
820
			newmembers = copy.deepcopy(members)
821
			newmembers = self.__case_insensitive_remove_from_list(self.dn, newmembers)
821
			newmembers = self.__case_insensitive_remove_from_list(self.dn, newmembers)
822
			newmembers = self.__case_insensitive_remove_from_list(self.old_dn, newmembers)
822
			univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: remove from supergroup %s' % group)
823
			univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'groups/group: remove from supergroup %s' % group)
823
			self.__set_membership_attributes(group, members, newmembers)
824
			self.__set_membership_attributes(group, members, newmembers)
824
825
(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py (-1 / +1 lines)
 Lines 1773-1779   def __update_groups(self): Link Here 
1773
		for group in old_groups:
1773
		for group in old_groups:
1774
			if group and not case_insensitive_in_list(group, self.info.get('groups', [])) and group.lower() != self['primaryGroup'].lower():
1774
			if group and not case_insensitive_in_list(group, self.info.get('groups', [])) and group.lower() != self['primaryGroup'].lower():
1775
				grpobj = group_mod.object(None, self.lo, self.position, group)
1775
				grpobj = group_mod.object(None, self.lo, self.position, group)
1776
				grpobj.fast_member_remove([self.dn], [old_uid])
1776
				grpobj.fast_member_remove([self.old_dn], [old_uid])
1777
1777
1778
		univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'users/user: check groups in info[groups]')
1778
		univention.debug.debug(univention.debug.ADMIN, univention.debug.INFO, 'users/user: check groups in info[groups]')
1779
		for group in self.info.get('groups', []):
1779
		for group in self.info.get('groups', []):

Return to bug 41694