Vielleicht ging die Antwort noch etwas an der Zielrichtung der Frage vorbei. Die von UDM bereitgestellte Funktionalität kann generell auf zwei Arten verwendet werden:
[ul]
[li] Python-API, die direkt die UDM-Module verwendet[/li]
[li] Shell-Skripting per univention-directory-manager Commandline Programm.[/li][/ul]
Die Kernfunktionalität des univention-directory-manager Commandline Programms wird durch den univention-cli-server bereitgestellt (aus dem Paket univention-directory-manager-tools), der über das univention.admincli.admin Python-Modul die Commandline in die Python-API übersetzt.
Zu der Frage bezüglich der Python Klassenstruktur und Methoden: Der Begriff “object” ist doppelt belegt: Eine so benannte Objektklasse wird zum Einen direkt von Python bereitgestellt und liefert einfach nur den sogenannten “new-style” Klassen-Typus. Die gleichnamigen Objektklassen der UDM Python-API hingegen werden über die sogenannten ‘handler’, auch UDM-Module genannt, definiert. Jeder dieser Handler stellt eine eigene Klasse “object” bereit (z.B. univention.admin.handlers.users.user.object).
Eine Objekt-Instanz einer solchen UDM-Modulklasse wird entweder durch normale Instanziierung der gewünschten Klasse neu erzeugt oder ein existierendes Objekt kann bei Kenntnis der LDAP-DN über die Methode univention.admin.objects.get konstruiert werden. Durch anschließendes Aufrufen der ‘open’-Methode liest die UDM-Modulinstanz die Objektdaten aus dem LDAP-Backend und speichert sie in den Datenstrukturen simpleLdap.oldattr (LDAP attribute) und in simpleLdap.oldinfo (UDM properties, übersetzt aus LDAP-Attributen) zwischen und stellt sie dann zu Bearbeitung als simpleLdap.info bereit (quasi als Cache).
simpleLdap stellt unter anderem die Methoden create, modify, move und remove bereit (über seine Basisklasse ‘base’). Diese Methoden vergleichen simpleLdap.info mit simpleLdap.oldinfo und schreiben Änderungen entsprechend in das LDAP-Backend. Die Änderungen werden also erst dann in das LDAP-Backend geschrieben, wenn die entsprechende Methode aufgerufen wird (d.h. noch nicht, wenn einfach nur ein Wert in das lokale Dictionary des UDM-Modulobjekts geschrieben wird).
Jede UDM-Modulklasse stellt per ‘lookup’ eine Methode bereit, die über einen modulspezifischen LDAP-Filter genau solche Objekte aus dem LDAP-Backend sucht, die durch das Modul bearbeitet werden können. Die lookup-Methode liefert DN-Strings als Ergebnis. In dem Beispielskript sieht man, dass man diese DN-Strings alternativ natürlich auch per python-ldap selbst aus dem LDAP-Backend heraussuchen kann. Dann muss man allerdings sicher sein, dass das anschließend zum Öffnen und Bearbeiten gewählte UDM-Modul auch zu dem Objekttypen passt. Die Verwendung der python-ldap API sollte sonst vermieden werden, da man dann am UDM vorbei arbeitet.
Viele Grüße,
Arvid Requate