View | Details | Raw Unified | Return to bug 41032
Collapse All | Expand All

(-)a/base/univention-python/modules/uldap.py (-3 / +8 lines)
 Lines 462-472   def modify(self, dn, changes, atomic=0): Link Here 
462
462
463
		univention.debug.debug(univention.debug.LDAP, univention.debug.INFO, 'uldap.modify %s' % dn)
463
		univention.debug.debug(univention.debug.LDAP, univention.debug.INFO, 'uldap.modify %s' % dn)
464
464
465
		dn_parts = dict((x[0].lower(), x[1]) for x in ldap.dn.str2dn(dn)[0])
466
		dn_values = dict()
465
		rename=None
467
		rename=None
466
		ml=[]
468
		ml=[]
467
		for key, oldvalue, newvalue in changes:
469
		for key, oldvalue, newvalue in changes:
468
			if dn.startswith(key+'='):
470
			if key.lower() in dn_parts:
469
				rename=key+'='+newvalue
471
				dn_values[key.lower()] = newvalue
472
				rename = True
470
			if oldvalue and newvalue:
473
			if oldvalue and newvalue:
471
				if oldvalue == newvalue:
474
				if oldvalue == newvalue:
472
					continue
475
					continue
 Lines 499-506   def modify(self, dn, changes, atomic=0): Link Here 
499
		ml=self.__encode_entry(ml)
502
		ml=self.__encode_entry(ml)
500
		if rename:
503
		if rename:
501
			univention.debug.debug(univention.debug.LDAP, univention.debug.WARN, 'rename %s' % rename)
504
			univention.debug.debug(univention.debug.LDAP, univention.debug.WARN, 'rename %s' % rename)
505
			rdn = [(x, dn_values.get(x.lower(), y), z) for x, y, z in ldap.dn.str2dn(dn)[0]]
506
			rename = ldap.dn.dn2str([rdn])
502
			self.lo.rename_s(dn, rename, None, delold=1)
507
			self.lo.rename_s(dn, rename, None, delold=1)
503
			dn=rename+dn[dn.find(','):]
508
			dn = ldap.dn.dn2str([rdn] + ldap.dn.str2dn(dn)[1:])
504
		if ml:
509
		if ml:
505
			try:
510
			try:
506
				self.lo.modify_s(dn, ml)
511
				self.lo.modify_s(dn, ml)
(-)a/management/univention-directory-manager-modules/modules/univention/admin/uldap.py (-5 / +6 lines)
 Lines 147-156   def setDn(self, dn): Link Here 
147
			self.__pos=string.join(dnlist, ',')
147
			self.__pos=string.join(dnlist, ',')
148
			components=explodeDn(self.__pos,0)
148
			components=explodeDn(self.__pos,0)
149
			for i in components:
149
			for i in components:
150
				mytype, ign = string.split(i,'=')
150
				for x in i.split('+'):
151
				if mytype=='dc':
151
					mytype, ign = x.split('=', 1)
152
					self.__indomain=1
152
					if mytype=='dc':
153
					break
153
						self.__indomain=1
154
						break
154
		except ValueError:
155
		except ValueError:
155
			raise univention.admin.uexceptions.noObject, _("DN not found: %s.") % dn
156
			raise univention.admin.uexceptions.noObject, _("DN not found: %s.") % dn
156
157
 Lines 171-177   def getDomain(self): Link Here 
171
		components.reverse()
172
		components.reverse()
172
		domaincomponents=[]
173
		domaincomponents=[]
173
		for i in components:
174
		for i in components:
174
			mytype, ign = string.split(i,'=')
175
			mytype, ign = string.split(i,'=')  # FIXME: doesn't recognize multiple components like cn=foo+dc=bar
175
			if mytype=='dc':
176
			if mytype=='dc':
176
				domaincomponents.append(i)
177
				domaincomponents.append(i)
177
			else:
178
			else:
(-)a/management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py (+2 lines)
 Lines 333-338   def _tmp_cmp(i, j): Link Here 
333
	@LDAP_Connection
333
	@LDAP_Connection
334
	def create(self, ldap_object, container=None, superordinate=None, ldap_connection=None, ldap_position=None):
334
	def create(self, ldap_object, container=None, superordinate=None, ldap_connection=None, ldap_position=None):
335
		"""Creates a LDAP object"""
335
		"""Creates a LDAP object"""
336
		ldap_object = ldap_object.copy()
336
		if superordinate not in (None, 'None'):
337
		if superordinate not in (None, 'None'):
337
			try:
338
			try:
338
				ldap_position.setDn(superordinate)
339
				ldap_position.setDn(superordinate)
 Lines 419-424   def remove(self, ldap_dn, cleanup=False, recursive=False, ldap_connection=None, Link Here 
419
	@LDAP_Connection
420
	@LDAP_Connection
420
	def modify(self, ldap_object, ldap_connection=None, ldap_position=None):
421
	def modify(self, ldap_object, ldap_connection=None, ldap_position=None):
421
		"""Modifies a LDAP object"""
422
		"""Modifies a LDAP object"""
423
		ldap_object = ldap_object.copy()
422
		superordinate = udm_objects.get_superordinate(self.module, None, ldap_connection, ldap_object['$dn$'])
424
		superordinate = udm_objects.get_superordinate(self.module, None, ldap_connection, ldap_object['$dn$'])
423
		MODULE.info('Modifying object %s with superordinate %s' % (ldap_object['$dn$'], superordinate))
425
		MODULE.info('Modifying object %s with superordinate %s' % (ldap_object['$dn$'], superordinate))
424
		obj = self.module.object(None, ldap_connection, ldap_position, dn=ldap_object.get('$dn$'), superordinate=superordinate)
426
		obj = self.module.object(None, ldap_connection, ldap_position, dn=ldap_object.get('$dn$'), superordinate=superordinate)

Return to bug 41032