Start · Sprachen · PHP · Referenz · ldap_exop

ldap_exop

Funktion

Führt eine erweiterte LDAP-Operation (Extended Operation) auf einem LDAP-Server aus und gibt bei Erfolg <code>true</code> zurück.

seit PHP 7.2.0 Kategorie: misc

Signatur

ldap_exop(LDAP\Connection $ldap, string $request_oid, string $request_data = "", array $controls = [], string &$response_data = null, string &$response_oid = null): bool

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

Typ
bool
Beschreibung
Gibt 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);
Angemeldeter Benutzer: dn:cn=admin,dc=example,dc=com

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);
Passwort erfolgreich geändert.

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