XLVIII. 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 . Viele Informationen 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 oder das Netscape Directory SDK 3.0 verwenden .

Installation

LDAP Unterstützung ist in PHP im Standard nicht aktiviert . Sie müssen die Konfigurationsoption --with-ldap beim Übersetzen von PHP angeben .

Hinweis für Win32 Benutzer : Um dieses Modul unter Windows nutzen zu können , müssen Sie libsasl.dll aus dem DLL Ordner des PHP / Win32 Packets in den SYSTEM32 Ordner Ihres Systems kopieren ( z.B. : C:\WINNT\SYSTEM32 oder C:\WINDOWS\SYSTEM32 ) .

Laufzeit Konfiguration

Das Verhalten dieser Funktionen wird von Einstellungen in der php.ini bestimmt .

Tabelle 1 . LDAP Konfigurations-Optionen

Standard Veränderbar
Weitere Details und die Definition der PHP_INI_* Konstanten sind unter ini_set() zu finden.

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_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 .

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

 
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 " |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_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