XLIX. LDAP Funktionen

Einführung zu LDAP

LDAP steht für Lightweight Directory Access Protocol und ist ein Protokoll um auf "Directory Servers" - "Verzeichnis- Server" - zuzugreifen. Das Verzeichnis ist dabei eine spezielle Art einer Datenbank, das Informationen in einer Baumstruktur bereithält.

Das Konzept ist dabei ähnlich der Verzeichnisstruktur Ihrer Festplatte, mit der Ausnahme, daß in diesem Zusammenhang das Wurzelverzeichnis "Die Welt" ist und die Unterverzeichnisse der ersten Ebene "Länder" abbilden. Die weiteren Verzeichnisse unterhalb der Länderebene enthalten Einträge für Firmen, Organisationen oder Städte. Noch tiefer geschachtelt stehen Verzeichniseinträge für Menschen und vielleicht für Ausstattung oder Dokumente.

Um auf eine Datei in einem Unterverzeichnis auf Ihrer Festplatte zu verweisen, könnten Sie eine Schreibweise wie folgt verwenden


    /usr/local/meine_daten/doku
    

Die Schrägstriche markieren jeden Teil in diesem Verweis und die Sequenz wird von links nach rechts gelesen.

Das entsprechende Gegenstück zu einer voll qualifizierten Dateireferenz ist in LDAP der "Eindeutige Name" ("distinguished name"), der Einfachheit halber als "dn" bezeichnet. Ein Beispiel für einen solchen dn könnte sein


    cn=Hans Mustermann,ou=Buchhaltung,o=Meine Firma,c=DE
    

Das Komma markiert jeden Teil in diesem Verweis und die Sequenz wird von rechts nach links gelesen. Diesen dn würden Sie wie folgt lesen ...


    Land = DE
    Organisation (organisation) = Meine Firma
    Organisationseinheit (organisational unit) = Buchhaltung
    Einfacher Name (commonName) = Hans Mustermann
    

In der gleichen Weise, in der es keine allgemeinverbindlichen Regeln gibt, wie Sie die Verzeichnisstruktur Ihrer Festplatte organsieren, kann der Verwalter eines Verzeichnis-Servers jede beliebige Struktur implementieren, die für den Einsatzzweck sinnvoll ist. Trotzdem gibt es einige Konventionen die benutzt werden. Die Botschaft ist folgende: Sie können keinen Code schreiben um auf einen Verzeichnis-Server zuzugreifen, ohne etwas über dessen Struktur zu wissen. Genauso wenig können Sie eine Datenbank nutzen ohne Kenntnis darüber, was in derselben vorhanden ist.

Komplettes Code Beispiel

Informationen von einem Verzeichnis-Server beziehen für alle Einträge bei denen der Nachname mit "S" beginnt. Darstellung eines Auszugs mit Name und Email-Adresse.

Beispiel 1. LDAP Such-Beispiel

<?php
    // Grundlegende Abfolge bei LDAP ist verbinden, binden, suchen,
    // interpretieren des Sucheergebnisses, Verbindung schließen

    echo "<h3>LDAP query Test</h3>";
    echo "Verbindung ...";
    $ds=ldap_connect("localhost");  // muss ein gültiger LDAP Server
                                    // sein!

    echo "Ergebnis der Verbindung: ".$ds."<p>";

    if ($ds) {
    echo "Bindung ...";
    $r=ldap_bind($ds);     // das ist ein "anonymer" bind,
                           // typischerweise nur Lese Zugriff
    echo "Ergebnis der Bindung ".$r."<p>";

    echo "Suche nach (sn=S*) ...";
    // Suchen des Nachnamen-Eintrags
    $sr=ldap_search($ds,"o=Meine Firma, c=DE", "sn=S*");
    echo "Ergebnis der Suche ".$sr."<p>";

    echo "Anzahl gefundenen Einträge ".ldap_count_entries($ds,$sr)."<p>";

    echo "Einträge holen ...<p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Daten für ".$info["count"]." Items gefunden:<p>";

    for ($i=0; $i<$info["count"]; $i++) {
        echo "dn ist: ". $info[$i]["dn"] ."<br>";
        echo "erster cn Eintrag: ". $info[$i]["cn"][0] ."<br>";
        echo "erster email Eintrag: ". $info[$i]["mail"][0] ."<p>";
    }

    echo "Verbindung schließen";
    ldap_close($ds);

} else {
    echo "<h4>Verbindung zu LDAP Server nicht möglich</h4>";
}
?>

Verwenden der PHP LDAP Aufrufe

Sie müssen sich die LDAP Client Bibliotheken herunterladen und übersetzen. Sie können entweder das ldap-3.3 Packet von der University of Michigan oder das Netscape Directory SDK 3.0 verwenden. Ebenso müssen Sie Ihr PHP mit LDAP Unterstützung aktiviert neu übersetzen bevor die PHP LDAP-Aufrufe funktionieren.

Bevor Sie die LDAP Aufrufe benutzen können, müssen Sie folgendes wissen...

  • Den Namen oder die Adresse des Verzeichnis-Servers den Sie benutzen wollen

  • Den "Basis dn" des Servers (den Teil des Weltverzeichnisses, das auf diesem Server eingerichtet ist, das könnte "o=Meine Firma,c=DE" sein.

  • Brauchen Sie ein Passwort um auf den Server zuzugreifen? (Viele Server bieten Lesezugriff für einen "anonymen bind", verlangen aber ein Passwort für alles weitere)

Die typische Abfolge von LDAP Aufrufen in einer Anwendung folgen diesem Muster


  ldap_connect()    // Aufbau einer Verbindung zum Server

  connection to server
     |
  ldap_bind()       // anonymes oder authentifiziertes "login"
     |
  mache irgendwas, z.B. Verzeichnis durchsuchen oder aktualisieren
  und stelle das Ergebnis dar
     |
  ldap_close()      // "logout"

Mehr Informationen

Viele Informationen finden Sie unter

Das Netscape SDK enthält einen hilfreichen Programmer´s Guide im .html Format.

Inhaltsverzeichnis
ldap_8859_to_t61 --  Übersetzt 8859 Zeichen nach t61 Zeichen
ldap_add --  Einträge einem LDAP Verzeichnis hinzufügen
ldap_bind -- Bindung zu einem LDAP Verzeichnis
ldap_close -- Verbindung zum LDAP Server schliessen
ldap_compare --  Vergleicht gefundenen Wert eines Merkmal in einem Eintrag, der durch Angabe von dn bestimmt wird.
ldap_connect -- Verbindung zu einem LDAP Server
ldap_count_entries -- Zählt die Anzahl der Einträge bei einer Suche
ldap_delete -- Löscht einen Eintrag aus einem Verzeichnis
ldap_dn2ufn --  Konvertiert DN in ein benutzerfreundliches Namensformat
ldap_err2str --  Konvertiert eine LDAP Fehlernummer in einen Fehlertext
ldap_errno --  Liefert die LDAP Fehlernummer des letzten LDAP Kommandos
ldap_error --  Liefert die LDAP Fehlermeldung des letzten LDAP Kommandos
ldap_explode_dn --  Aufteilung eines DN in seine Bestandteile
ldap_first_attribute -- Liefert das erste Merkmal
ldap_first_entry --  Liefert die Kennung des ersten Ergebnisses
ldap_first_reference --  Liefert die erste Referenz
ldap_free_result --  Gibt den belegten Speicher wieder frei
ldap_get_attributes --  Liefert Merkmale eines Suchergebnis-Eintrags
ldap_get_dn -- Liefert den DN eines Ergebnis-Eintrags
ldap_get_entries -- Liefert alle Ergebnis-Einträge
ldap_get_option --  Liefert den aktuellen Wert für eine gegebene Option
ldap_get_values_len --  Liefert alle binären Werte eines Ergebnis-Eintrags
ldap_get_values --  Liefert alle Werte eines Ergebnis-Eintrags
ldap_list -- Einstufige Suche
ldap_mod_add --  Hinzufügen von Merkmalswerten zu aktuellen Merkmalen
ldap_mod_del --  Löschen von Merkmalswerten aktueller Merkmale
ldap_mod_replace --  Ersetzen von Merkmalswerten mit neuen Merkmalswerten
ldap_modify -- Verändern eines LDAP-Eintrags
ldap_next_attribute --  Liefert das nächste Merkmal im Ergebnis
ldap_next_entry --  Liefert den nächsten Eintrag des Ergebnisses
ldap_next_reference --  Holt die nächste Referenz
ldap_parse_reference --  Gewinnt Informationen aus einem Referenz-Eintrag
ldap_parse_result --  Gewinnt Informationen aus einem Ergebnis
ldap_read -- Lesen eines Eintrags
ldap_rename --  Verändert den Namen eines Eintrags
ldap_search -- Suche im LDAP Baum
ldap_set_option -- Setzt den Wert der gegebenen Option
ldap_set_rebind_proc --  Set a callback function to do re-binds on referral chasing.
ldap_sort --  Sortiert LDAP Ergebniseinträge
ldap_start_tls --  Startet TLS
ldap_t61_to_8859 --  Übersetzt t61 Zeichen nach 8859 Zeichen
ldap_unbind -- Unbind von einem LDAP Verzeichnis