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

(-)a/services/univention-ad-connector/modules/univention/connector/__init__.py (-20 / +28 lines)
 Lines 686-704   def recode_attribs(attribs): Link Here 
686
		# we should delete this object
686
		# we should delete this object
687
		ignore_subtree_match = False
687
		ignore_subtree_match = False
688
688
689
		if not new:
689
		_attr = new or old
690
			change_type = "delete"
690
		for k in self.property.keys():
691
			ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: objected was deleted")
691
			if self.modules[k].identify(unicode(dn, 'utf8'), _attr):
692
			for k in self.property.keys():
692
				key = k
693
				if self.modules[k].identify(unicode(dn, 'utf8'), old):
693
				break
694
					key = k
695
					break
696
		else:
697
			for k in self.property.keys():
698
				if self.modules[k].identify(unicode(dn, 'utf8'), new):
699
					key = k
700
					break
701
694
695
		if new:
702
			entryUUID = new.get('entryUUID', [None])[0]
696
			entryUUID = new.get('entryUUID', [None])[0]
703
			if entryUUID:
697
			if entryUUID:
704
				if self.was_entryUUID_deleted(entryUUID):
698
				if self.was_entryUUID_deleted(entryUUID):
 Lines 761-766   def recode_attribs(attribs): Link Here 
761
					old_dn = ''  # there may be an old_dn if object was moved from ignored container
755
					old_dn = ''  # there may be an old_dn if object was moved from ignored container
762
					ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: objected was added")
756
					ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: objected was added")
763
757
758
		if not new:
759
			change_type = "delete"
760
			ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: objected was deleted")
761
764
		if key:
762
		if key:
765
			if change_type == 'delete':
763
			if change_type == 'delete':
766
				if old_dn:
764
				if old_dn:
 Lines 816-831   def get_ucs_ldap_object(self, dn): Link Here 
816
	def get_ucs_object(self, property_type, dn):
814
	def get_ucs_object(self, property_type, dn):
817
		_d = ud.function('ldap.get_ucs_object')
815
		_d = ud.function('ldap.get_ucs_object')
818
		ucs_object = None
816
		ucs_object = None
819
		if isinstance(dn, type(u'')):
817
		if isinstance(dn, unicode):
820
			searchdn = dn
818
			searchdn = dn
821
		else:
819
		else:
822
			searchdn = unicode(dn)
820
			searchdn = unicode(dn)
823
		try:
821
		try:
824
			if not self.get_ucs_ldap_object(searchdn):  # fails if object doesn't exist
822
			attr = self.get_ucs_ldap_object(searchdn)
823
			if not attr:
825
				ud.debug(ud.LDAP, ud.INFO, "get_ucs_object: object not found: %s" % searchdn)
824
				ud.debug(ud.LDAP, ud.INFO, "get_ucs_object: object not found: %s" % searchdn)
826
				return None
825
				return None
827
			module = self.modules[property_type]
826
			module = self.modules[property_type]  # old default
828
			ucs_object = univention.admin.objects.get(module, co='', lo=self.lo, position='', dn=searchdn)  # does not fail if object doesn't exist
827
			if not module.identify(searchdn, attr):
828
				for m in self.modules_others.get(property_type, []):
829
					if m and m.identify(searchdn, attr):
830
						module = m
831
						break
832
				else:
833
					ud.debug(ud.LDAP, ud.ERROR, "get_ucs_object: could not identify UDM object type: %s" % searchdn)
834
					ud.debug(ud.LDAP, ud.PROCESS, "get_ucs_object: using default: %s" % module.module)
835
836
			ucs_object = univention.admin.objects.get(module, co=None, lo=self.lo, position='', dn=searchdn)
829
			ud.debug(ud.LDAP, ud.INFO, "get_ucs_object: object found: %s" % searchdn)
837
			ud.debug(ud.LDAP, ud.INFO, "get_ucs_object: object found: %s" % searchdn)
830
		except (ldap.SERVER_DOWN, SystemExit):
838
		except (ldap.SERVER_DOWN, SystemExit):
831
			raise
839
			raise
 Lines 1179-1185   def add_in_ucs(self, property_type, object, module, position): Link Here 
1179
1187
1180
	def modify_in_ucs(self, property_type, object, module, position):
1188
	def modify_in_ucs(self, property_type, object, module, position):
1181
		_d = ud.function('ldap.modify_in_ucs')
1189
		_d = ud.function('ldap.modify_in_ucs')
1182
		module = self.modules[property_type]
1183
		if 'olddn' in object:
1190
		if 'olddn' in object:
1184
			ucs_object = univention.admin.objects.get(module, None, self.lo, dn=object['olddn'], position='')
1191
			ucs_object = univention.admin.objects.get(module, None, self.lo, dn=object['olddn'], position='')
1185
		else:
1192
		else:
 Lines 1189-1195   def modify_in_ucs(self, property_type, object, module, position): Link Here 
1189
1196
1190
	def move_in_ucs(self, property_type, object, module, position):
1197
	def move_in_ucs(self, property_type, object, module, position):
1191
		_d = ud.function('ldap.move_in_ucs')
1198
		_d = ud.function('ldap.move_in_ucs')
1192
		module = self.modules[property_type]
1193
		try:
1199
		try:
1194
			if object['olddn'].lower() == object['dn'].lower():
1200
			if object['olddn'].lower() == object['dn'].lower():
1195
				ud.debug(ud.LDAP, ud.WARN, "move_in_ucs: cancel move, old and new dn are the same ( %s to %s)" % (object['olddn'], object['dn']))
1201
				ud.debug(ud.LDAP, ud.WARN, "move_in_ucs: cancel move, old and new dn are the same ( %s to %s)" % (object['olddn'], object['dn']))
 Lines 1237-1243   def was_entryUUID_deleted(self, entryUUID): Link Here 
1237
1243
1238
	def delete_in_ucs(self, property_type, object, module, position):
1244
	def delete_in_ucs(self, property_type, object, module, position):
1239
		_d = ud.function('ldap.delete_in_ucs')
1245
		_d = ud.function('ldap.delete_in_ucs')
1240
		module = self.modules[property_type]
1241
		ucs_object = univention.admin.objects.get(module, None, self.lo, dn=object['dn'], position='')
1246
		ucs_object = univention.admin.objects.get(module, None, self.lo, dn=object['dn'], position='')
1242
1247
1243
		if object['attributes'].get('objectGUID'):
1248
		if object['attributes'].get('objectGUID'):
 Lines 1332-1338   def sync_to_ucs(self, property_type, object, premapped_ad_dn, retry=True): Link Here 
1332
		except:  # FIXME: which exception is to be caught?
1337
		except:  # FIXME: which exception is to be caught?
1333
			ud.debug(ud.LDAP, ud.PROCESS, 'sync to ucs...')
1338
			ud.debug(ud.LDAP, ud.PROCESS, 'sync to ucs...')
1334
1339
1335
		module = self.modules[property_type]
1336
		position = univention.admin.uldap.position(self.baseConfig['ldap/base'])
1340
		position = univention.admin.uldap.position(self.baseConfig['ldap/base'])
1337
1341
1338
		parent_dn = string.join(ldap.explode_dn(object['dn'])[1:], ",")
1342
		parent_dn = string.join(ldap.explode_dn(object['dn'])[1:], ",")
 Lines 1354-1359   def sync_to_ucs(self, property_type, object, premapped_ad_dn, retry=True): Link Here 
1354
				ud.debug(ud.LDAP, ud.PROCESS, 'The object (%s) will be ignored because a valid match filter for this object was not found.' % old_ucs_ldap_object['dn'])
1358
				ud.debug(ud.LDAP, ud.PROCESS, 'The object (%s) will be ignored because a valid match filter for this object was not found.' % old_ucs_ldap_object['dn'])
1355
				return True
1359
				return True
1356
1360
1361
			module = self.modules[property_type]
1362
			if old_object:
1363
				module = univention.admin.modules.get(old_object.module)
1364
1357
			if object['modtype'] == 'add':
1365
			if object['modtype'] == 'add':
1358
				result = self.add_in_ucs(property_type, object, module, position)
1366
				result = self.add_in_ucs(property_type, object, module, position)
1359
				self._check_dn_mapping(object['dn'], premapped_ad_dn)
1367
				self._check_dn_mapping(object['dn'], premapped_ad_dn)

Return to bug 45011