Univention Corporate Server (UCS) » Univention Directory Manager (UDM)

ID #1080

Erstellung von Hook-Funktionen für erweiterte Attribute

Die im Univention Directory Manager verfügbaren erweiterten Attribute stellen im Gegensatz zu den benutzerdefinierten Attributen einen neuen, sehr flexiblen Mechanismus zur Verfügung: Hooks. Durch sie können bei der Verwendung von erweiterten Attributen automatisch Änderungen an beliebigen Objekten durchgeführt werden.

 

Hinweis: Für die Erstellung eigener Hooks sind mindestens Programmierkenntnisse in Python notwendig!

 

Was ist ein Hook?

Ein Hook stellt eine Python-Funktion dar, die zu einem bestimmten Zeitpunkt während der Modifikation eines LDAP-Objektes ausgeführt wird und in der Lage ist, in den Modifikationsvorgang einzugreifen. Die aufzurufenden Python-Funktionen werden in einer Hook-Klasse zusammengefasst. Die Hook-Klasse kann derzeit Funktionen für folgende Ansprungspunkte bereitstellen:

 

  • hook_open
  • hook_ldap_pre_create
  • hook_ldap_addlist
  • hook_ldap_post_create
  • hook_ldap_pre_modify
  • hook_ldap_modlist
  • hook_ldap_post_modify
  • hook_ldap_pre_remove
  • hook_ldap_post_remove


Die Pre- und Post-Funktionen werden jeweils vor bzw. nach dem Anlegen/Modifizieren/Löschen eines LDAP-Objektes aufgerufen und können verwendet werden, um zum Beispiel

 

  • vor dem Anlegen/Modifizieren Attributwerte des LDAP-Objektes automatisch anzupassen
  • andere LDAP-Objekte zu modifizieren
  • Plausibilitätschecks durchzuführen und ggf. eine Fehlermeldung zu erzeugen
  • u.v.m.

 

Die Funktionen hook_ldap_addlist und hook_ldap_modlist geben lesenden und schreibenden Zugriff auf eine Liste mit LDAP-Modifikationen beim Erzeugen/Verändern eines LDAP-Objektes. Über diese Funktionen können ebenfalls Werte automatisch angepasst werden. Die Funktion hook_open wird beim Öffnen eines Objektes im Univention Directory Manager (UDM)  bzw. beim Start des UDM-CLI ausgeführt und kann z.B. für zu berechnende Vorgabewerte verwendet werden.

 

Hook-Interna

Alle Funktionen der Hook-Klasse bekommen beim Aufruf eine Referenz auf die UDM-Modul-Instanz übergeben, für die sie gerade aufgerufen wurde. Über diese Referenz können sämtliche Informationen des UDM-Moduls abgerufen und ggf. modifiziert werden. So ist z.B. der lesende und schreibende Zugriff auf die Modul-Variablen info, oldinfo, attr, oldattr usw. möglich. Zusätzlich erhalten die Funktionen hook_ldap_addlist und hook_ldap_modlist als zweiten Parameter eine Liste mit LDAP-Modifikationen. Diese Liste kann von der Funktion modifiziert werden und muss als Rückgabewert wieder zurückgegeben werden.

Sollten für ein UDM-Modul über mehrere erweiterten Attribute auch mehrere unterschiedliche Hook-Klasse definiert worden sein, ist zu beachten, daß die Reihenfolge, in der die Funktionen der unterschiedlichen Hook-Klassen aufgerufen werden, nicht deterministisch ist! Es kann also nicht sichergestellt werden, daß die Hook-Funktion hook_ldap_modlist des erweiterten Attributs A grundsätzlich vor der Hook-Funktion des erweiterten Attributs B aufgerufen wird.

Die Hook-Klasse muss als eigenständige Python-Datei unterhalb von /usr/lib/python2.4/site-packages/univention/admin/hooks.d/ abgelegt werden. Als Vorlage kann die in der Datei /usr/lib/python2.4/site-packages/univention/admin/hook.py vorhandene Hook-Klasse simpleHook dienen.

Die im hooks.d-Verzeichnis abgelegten Python-Dateien werden automatisch geladen und aufgerufen, sofern der jeweilige Hook-Klassenname an einem erweiterten Attribut im Feld "hook" angegeben wurde.

 

Beispiel für eine Hook-Klasse

Ein Beispiel für eine Hook-Klasse ist unter myhook.py zu finden. Darüber hinaus findet sich eine Anleitung zum Erstellen eines erweiterten Attributs mit Hook-Klasse im Univention Wiki unter http://wiki.univention.de/index.php?title=Erstellen_eines_erweiterten_Attributs_mit_Hook.

 

Verwendung von Hook-Klassen

Um diese Hook-Klasse mit einem erweiterten Attribut mit dem Namen myattr zu verknüpfen, kann folgender Befehl verwendet werden:

udm settings/extended_attribute modify \
--dn cn=myattr,cn=univention,dc=univention,dc=test \
--set hook="MyHook"

 

Tags: Erweiterte Attribute, Hook, Python, UDM

Verwandte Artikel:

Letzte Änderung der FAQ: 2011-01-27 15:10
Autor: Sönke Schwardt
Revision: 1.10

Digg it! Share on Facebook FAQ ausdrucken FAQ weiterempfehlen Als PDF-Datei anzeigen
Übersetzungsvorschlag für Übersetzungsvorschlag für
Bewertung der Nützlichkeit dieser FAQ:

Durchschnittliche Bewertung: 0 (0 Abstimmungen)

vollkommen überflüssig 1 2 3 4 5 sehr wertvoll

Kommentieren nicht möglich