Signatur
Beschreibung
Mit ldap_exop() können erweiterte LDAP-Operationen gemäß RFC 4511 ausgeführt werden. Erweiterte Operationen erlauben es, über das standardmäßige LDAP-Protokoll hinausgehende Funktionen zu nutzen, die der Server bereitstellt – zum Beispiel das Ändern von Passwörtern (OID: 1.3.6.1.4.1.4203.1.11.1), WHOAMI-Abfragen (1.3.6.1.4.1.4203.1.11.3) oder das Starten/Stoppen von TLS.
Die Funktion kann synchron (mit Rückgabewert und Referenzparametern) oder asynchron über ldap_exop_passwd() bzw. spezifische Helfer-Funktionen genutzt werden. Wenn $response_data und $response_oid als Referenzen übergeben werden, arbeitet ldap_exop() im synchronen Modus und befüllt diese Variablen mit der Antwort des Servers.
Für häufig verwendete erweiterte Operationen stellt PHP spezialisierte Wrapper bereit: ldap_exop_passwd() für Passwortänderungen und ldap_exop_whoami() für WHOAMI-Anfragen. Diese sollten bevorzugt verwendet werden, da sie eine einfachere Schnittstelle bieten.
Die Funktion setzt eine aktive und gebundene LDAP-Verbindung voraus. Fehler bei der Ausführung können mit ldap_error() bzw. ldap_errno() abgefragt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, wie sie von ldap_connect() zurückgegeben wird. Die Verbindung muss bereits mit ldap_bind() authentifiziert sein. |
|
| $request_oid Pflicht | string | Die OID (Object Identifier) der gewünschten erweiterten Operation, z. B. LDAP_EXOP_WHOAMI oder LDAP_EXOP_MODIFY_PASSWD. |
|
| $request_data | string | "" | Optionale BER-kodierte Anfragedaten, die an den Server übermittelt werden. Das Format ist abhängig von der jeweiligen erweiterten Operation. Kann leer sein, wenn die Operation keine zusätzlichen Daten erfordert. |
| $controls | array | [] | Ein optionales Array mit LDAP-Server-Controls, die mit der Anfrage gesendet werden sollen. Jedes Element ist ein assoziatives Array mit den Schlüsseln oid, iscritical und value. |
| $response_data | string | null | Wenn als Referenz übergeben, wird diese Variable mit den BER-kodierten Antwortdaten des Servers befüllt. Das Vorhandensein dieses Parameters schaltet den synchronen Modus ein. |
| $response_oid | string | null | Wenn als Referenz übergeben, enthält diese Variable nach dem Aufruf die OID der Serverantwort, sofern der Server eine abweichende OID zurückgibt. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler. Im asynchronen Modus (ohne Referenzparameter) wird eine Ergebniskennung zurückgegeben, die mit ldap_parse_exop() ausgewertet werden kann.Beispiele
WHOAMI-Anfrage über ldap_exop
<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$response_data = '';
$response_oid = '';
$result = ldap_exop(
$ldap,
LDAP_EXOP_WHOAMI,
'',
[],
$response_data,
$response_oid
);
if ($result) {
echo 'Angemeldeter Benutzer: ' . $response_data . PHP_EOL;
} else {
echo 'Fehler: ' . ldap_error($ldap) . PHP_EOL;
}
ldap_unbind($ldap);
Passwort über erweiterte Operation ändern
<?php
// BER-Kodierung für LDAP Modify Password Operation
// In der Praxis sollte ldap_exop_passwd() verwendet werden
$ldap = ldap_connect('ldaps://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
// Passwort direkt über Helfer-Funktion ändern (empfohlen)
$erfolg = ldap_exop_passwd(
$ldap,
'cn=benutzer,dc=example,dc=com',
'altesPasswort',
'neuesPasswort'
);
if ($erfolg) {
echo 'Passwort erfolgreich geändert.' . PHP_EOL;
} else {
echo 'Fehler beim Ändern des Passworts: ' . ldap_error($ldap) . PHP_EOL;
}
ldap_unbind($ldap);
// Wichtig · Fallstricke
Sicherheitshinweis: Passwortoperationen und andere sensible erweiterte Operationen sollten ausschließlich über eine gesicherte TLS/SSL-Verbindung (ldaps:// oder StartTLS via ldap_start_tls()) durchgeführt werden, um die Übertragung von Anmeldedaten im Klartext zu vermeiden.
Verfügbarkeit: Die Konstanten LDAP_EXOP_WHOAMI, LDAP_EXOP_MODIFY_PASSWD und LDAP_EXOP_REFRESH sind seit PHP 7.2 verfügbar. Die Funktion erfordert, dass die OpenLDAP-Bibliothek in einer ausreichend aktuellen Version installiert ist.
Asynchroner Modus: Werden $response_data und $response_oid nicht übergeben, arbeitet die Funktion asynchron und gibt eine Ergebniskennung zurück, die mit ldap_parse_exop() weiterverarbeitet werden muss. Dieser Modus ist für Szenarien geeignet, in denen mehrere Operationen parallel ausgeführt werden sollen.