Moin,
wir möchten mittels AD Connector das Attribute proxyAddresses aus dem AD zur mailAlternativAddress in der UCS LDAP ummappen.
Leider sind die Werte im AD mit führendem SMTP: gespeichert, also z.B.
proxyAddresses: smtp:SAnders@hh.example.com
proxyAddresses: smtp:SAnders@example.com
proxyAddresses: SMTP:S.Anders@example.com
Dieses “SMTP:” bzw. “smtp:” wollen wir im Zuge der Synchronisation entfernen.
Deshalb haben wir versucht, mittels einer mapping Funktion, die Werte umzuschreiben. Hier die AD Configuration:
ad_mapping = {
'user': univention.connector.property (
...
post_attributes={
...
'mailAlternativeAddress': univention.connector.attribute (
ucs_attribute='mailAlternativeAddress',
ldap_attribute='mailAlternativeAddress',
con_attribute='proxyAddresses',
mapping=[mapToWin,mapToUCS],
),
...
)
}
Am Anfang der mapping Datei haben wir unsere Funktionen definiert:
def mapToWin(connector,key,object):
ud.debug(ud.LDAP, ud.WARN, "tb %s"% traceback.extract_stack())
ud.debug(ud.LDAP, ud.WARN, "mapAltWin con: %s" % connector)
ud.debug(ud.LDAP, ud.WARN, "mapAltWin key: %s" % key)
ud.debug(ud.LDAP, ud.WARN, "mapAltWin obj: %s" % object)
proxy=object["attributes"]["proxyAddresses"]
ucslist=[]
for s in proxy:
s=s.replace("smtp:","")
s=s.replace("SMTP:","")
ucslist.append(s)
ud.debug(ud.LDAP, ud.WARN, "mapAltWin out: %s" % ucslist)
return ucslist
def mapToUCS(connector,key,object):
# wir machen nur einen Sync in die eine Richtung, hier eine Exception werfen
b=42/0
return object
Wir haben jetzt leider festgestellt, dass die Funktion zweimal aufgerufen wird und anscheint unterschiedliche Dinge zurückgeben soll:
Stack Trace 1:/usr/lib/pymodules/python2.6/univention/connector/init.py Zeile: 1615
('/usr/share/pyshared/univention/connector/ad/main.py', 315, '<module>', 'main()'),
('/usr/share/pyshared/univention/connector/ad/main.py', 291, 'main', 'connect()'),
('/usr/share/pyshared/univention/connector/ad/main.py', 268, 'connect', 'ad.resync_rejected()'),
('/usr/lib/pymodules/python2.6/univention/connector/ad/__init__.py', 1847, 'resync_rejected', 'mapped_object = self._object_mapping(property_key,object)'),
('/usr/lib/pymodules/python2.6/univention/connector/__init__.py', 1615, '_object_mapping', "object_out['attributes']self.property[key].post_attributes[attr_key].ldap_attribute]=self.property[key].post_attributes[attr_key].mapping[1](self, key, object)"),
Stack Trace 2:/usr/lib/pymodules/python2.6/univention/connector/init.py Zeile: 1049
('/usr/share/pyshared/univention/connector/ad/main.py', 315, '<module>', 'main()'),
('/usr/share/pyshared/univention/connector/ad/main.py', 291, 'main', 'connect()'),
('/usr/share/pyshared/univention/connector/ad/main.py', 268, 'connect', 'ad.resync_rejected()'),
('/usr/lib/pymodules/python2.6/univention/connector/ad/__init__.py', 1850, 'resync_rejected', 'sync_successfull = self.sync_to_ucs(property_key, mapped_object, premapped_ad_dn)'),
('/usr/lib/pymodules/python2.6/univention/connector/__init__.py', 1249, 'sync_to_ucs', 'result = self.modify_in_ucs(property_type, object, module, position)'),
('/usr/lib/pymodules/python2.6/univention/connector/__init__.py', 1110, 'modify_in_ucs', 'self.__set_values(property_type,object,ucs_object)'),
('/usr/lib/pymodules/python2.6/univention/connector/__init__.py', 1049, '__set_values', 'set_values(self.property[property_type].post_attributes[attr_key].mapping[1](self, property_type, object))'),
Gibt es einen anderen Weg oder eine uns unbekannte Doku die uns hier helfen könnte?
Vielen Dank
Sven Anders