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

Collapse All | Expand All

(-)modules/univention/s4connector/s4/__init__.py (+21 lines)
 Lines 2422-2427    Link Here 
2422
				ud.debug(ud.LDAP, ud.ALL, "sync_from_ucs: addlist: %s" % addlist)
2422
				ud.debug(ud.LDAP, ud.ALL, "sync_from_ucs: addlist: %s" % addlist)
2423
				try:
2423
				try:
2424
					self.lo_s4.lo.add_ext_s(compatible_modstring(object['dn']), compatible_addlist(addlist), serverctrls=ctrls) #FIXME encoding
2424
					self.lo_s4.lo.add_ext_s(compatible_modstring(object['dn']), compatible_addlist(addlist), serverctrls=ctrls) #FIXME encoding
2425
				except ldap.ALREADY_EXISTS as ex:
2426
					sAMAccountName_attr_value = object['attributes'].get('sAMAccountName')[0]
2427
					objectSid_attr_value = object['attributes'].get('objectSid')[0]
2428
					objectSid = decode_sid(objectSid_attr_value)
2429
					if not (sAMAccountName_attr_value and objectSid):
2430
						raise	## unknown situation
2431
					filter_s4 = '(&(sAMAccountName=%s)(objectSid=%s)(isDeleted=TRUE))' % (sAMAccountName_attr_value, objectSid)
2432
					ud.debug(ud.LDAP, ud.WARN, "sync_from_ucs: Error during add, searching for conflicting deleted object in S4. Filter: %s" % filter_s4)
2433
					result = self.lo_s4.lo.search_ext_s(self.lo_s4.base,ldap.SCOPE_SUBTREE, filter_s4, ['dn'], serverctrls=[LDAPControl(LDAP_SERVER_SHOW_DELETED_OID, criticality=1), LDAPControl(LDB_CONTROL_DOMAIN_SCOPE_OID, criticality=0)])
2434
					if not result or len(result)>1:	## the latter would indicate corruption
2435
						ud.debug(ud.LDAP, ud.WARN,"sync_from_ucs: No conflicting object found.")
2436
						raise	## unknown situation
2437
					ud.debug(ud.LDAP, ud.INFO,"sync_from_ucs: Ok, deleting conflicting object: %s"% result[0][0])
2438
					self.lo_s4.lo.delete_ext_s(compatible_modstring(result[0][0]),  serverctrls=[LDAPControl(LDB_CONTROL_RELAX_OID, criticality=0)])
2439
					## and try again
2440
					try:
2441
						self.lo_s4.lo.add_ext_s(compatible_modstring(object['dn']), compatible_addlist(addlist), serverctrls=ctrls) #FIXME encoding
2442
					except:
2443
						ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback during add object: %s" % object['dn'])
2444
						ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback due to addlist: %s" % addlist)
2445
						raise
2425
				except:
2446
				except:
2426
					ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback during add object: %s" % object['dn'])
2447
					ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback during add object: %s" % object['dn'])
2427
					ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback due to addlist: %s" % addlist)
2448
					ud.debug(ud.LDAP, ud.ERROR, "sync_from_ucs: traceback due to addlist: %s" % addlist)

Return to bug 41864