LDAP Funktionen
Einführung
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, dass 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 Personen 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 (organisationalUnit) = 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. 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.
Weitere nützliche Informationen zu LDAP finden Sie unter
Das Netscape SDK enthält einen hilfreichen » Programmer´s Guide im HTML Format.
Anforderungen
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, das » Netscape Directory SDK 3.0 oder » OpenLDAPverwenden um PHP mit LDAP Unterstützung zu kompilieren.
Installation
LDAP Unterstützung ist in PHP im Standard nicht aktiviert. Sie müssen die Konfigurationsoption --with-ldap[=DIR] beim Übersetzen von PHP angeben. DIR bezeichnet das Installationsverzeichnis von LDAP.
Hinweis: Hinweis für Win32 Benutzer Um dieses Modul unter Windows nutzen zu können, müssen Sie einige Dateien aus dem DLL Ordner des PHP/Win32 Packets in Ihr SYSTEM32 Verzeichnis Ihres Systems kopieren (z.B.: C:\WINNT\SYSTEM32, C:\WINDOWS\SYSTEM32 oder c:\WINDOWS\SYSTEM). Für PHP <= 4.2.0 kopieren Sie libsasl.dll, für PHP >= 4.3.0 kopieren Sie libeay32.dll und ssleay32.dll in Ihr SYSTEM Verzeichnis.
Laufzeit Konfiguration
Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
Name | Standard | Veränderbar |
---|---|---|
ldap.max_links | "-1" | PHP_INI_SYSTEM |
Resource Typen
Diese Erweiterung definiert keine Resource-Typen.
Vordefinierte Konstanten
Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.
- LDAP_DEREF_NEVER (integer)
- LDAP_DEREF_SEARCHING (integer)
- LDAP_DEREF_FINDING (integer)
- LDAP_DEREF_ALWAYS (integer)
- LDAP_OPT_DEREF (integer)
- LDAP_OPT_SIZELIMIT (integer)
- LDAP_OPT_TIMELIMIT (integer)
- LDAP_OPT_NETWORK_TIMEOUT (integer)
- Option for ldap_set_option() to allow setting network timeout. (Available as of PHP 5.3.0)
- LDAP_OPT_PROTOCOL_VERSION (integer)
- LDAP_OPT_ERROR_NUMBER (integer)
- LDAP_OPT_REFERRALS (integer)
- LDAP_OPT_RESTART (integer)
- LDAP_OPT_HOST_NAME (integer)
- LDAP_OPT_ERROR_STRING (integer)
- LDAP_OPT_MATCHED_DN (integer)
- LDAP_OPT_SERVER_CONTROLS (integer)
- LDAP_OPT_CLIENT_CONTROLS (integer)
- LDAP_OPT_DEBUG_LEVEL (integer)
- GSLC_SSL_NO_AUTH (integer)
- GSLC_SSL_ONEWAY_AUTH (integer)
- GSLC_SSL_TWOWAY_AUTH (integer)
Beispiele
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.
Example#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 zum LDAP Server nicht möglich</h4>";
}
?>
Verwenden der PHP LDAP Aufrufe
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"
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_sasl_bind — Bind to LDAP directory using SASL
- 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