--- __init__.py 2018-03-07 06:15:10.584000000 +0100 +++ /usr/share/pyshared/univention/s4connector/__init__.py 2018-03-07 06:37:37.208000000 +0100 @@ -182,6 +182,22 @@ self._dbcon.close() self._dbcon = lite.connect(self.filename) + def get_key(self, section, value): + for i in [1, 2]: + try: + cur = self._dbcon.cursor() + cur.execute("SELECT key FROM '%s' WHERE value=?" % section, (value,)) + self._dbcon.commit() + rows = cur.fetchall() + cur.close() + if rows: + return rows[0][0] + return '' + except lite.Error, e: + if self._dbcon: + self._dbcon.close() + self._dbcon = lite.connect(self.filename) + def set(self, section, option, value): for i in [1, 2]: try: @@ -1418,6 +1434,13 @@ else: return False + def was_objectGUID_deleted(self, objectGUID): + entryUUID = self.config.get_key('UCS deleted', objectGUID) + if entryUUID: + return True + else: + return False + def delete_in_ucs(self, property_type, object, module, position): _d = ud.function('ldap.delete_in_ucs') @@ -1431,6 +1454,10 @@ else: objectGUID = None entryUUID = self._get_entryUUID(object['dn']) + deleted_entryUUID = self.config.get_key('UCS deleted', objectGUID) + if deleted_entryUUID and entryUUID and entryUUID != deleted_entryUUID: + ## Or maybe simply: if self.was_objectGUID_deleted(objectGUID) ? + ud.debug(ud.LDAP, ud.PROCESS, "delete_in_ucs: entryUUID %s of existing UCS Object doesn't match cached entryUUID %s of deleted object. Skipping." % (entryUUID, deleted_entryUUID)) + return True if property_type == 'windowscomputer': # Sepcial handling for windows computer: