Signatur
Beschreibung
ldap_parse_exop() analysiert das Ergebnisobjekt einer erweiterten LDAP-Operation (Extended Operation), wie sie z. B. durch ldap_exop() oder ldap_exop_passwd() erzeugt wird. Erweiterte Operationen sind im LDAP-Protokoll (RFC 4511) definierte Mechanismen, die über die Standard-CRUD-Operationen hinausgehen – beispielsweise Passwortänderungen, StartTLS oder WhoAmI-Anfragen.
Die Funktion füllt optional zwei Variablen: $response_data enthält die rohen, BER-kodierten Nutzdaten der Serverantwort, und $response_oid enthält die OID (Object Identifier) der Operation, sofern der Server sie in der Antwort zurücksendet. Nicht jeder LDAP-Server liefert eine OID in der Antwort – in diesem Fall bleibt $response_oid leer.
Typische Anwendungsfälle sind die Auswertung benutzerdefinierter oder standardisierter erweiterter Operationen, bei denen die Serverantwort programmatisch verarbeitet werden muss. Die zurückgegebenen Rohdaten müssen in der Regel weiter geparst werden, da sie im ASN.1-BER-Format vorliegen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die mit ldap_connect() erzeugt und mit ldap_bind() authentifiziert wurde. |
|
| $result Pflicht | LDAP\Result | Das Ergebnisobjekt einer erweiterten LDAP-Operation, z. B. das Rückgabeobjekt von ldap_exop(). |
|
| $response_data | string | null | Wird nach dem Aufruf mit den rohen BER-kodierten Antwortdaten des Servers gefüllt. Wenn keine Daten vorhanden sind, wird die Variable auf einen leeren String gesetzt. |
| $response_oid | string | null | Wird nach dem Aufruf mit der OID der erweiterten Operation gefüllt, sofern der Server eine OID in der Antwort mitsendet. Andernfalls wird die Variable auf einen leeren String gesetzt. |
Rückgabewert
true zurück, wenn das Ergebnisobjekt erfolgreich ausgewertet werden konnte, andernfalls false.Beispiele
WhoAmI-Extended-Operation auswerten
<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimes_passwort');
// WhoAmI-OID: 1.3.6.1.4.1.4203.1.11.3
$result = ldap_exop($ldap, '1.3.6.1.4.1.4203.1.11.3');
if ($result !== false) {
$responseData = '';
$responseOid = '';
if (ldap_parse_exop($ldap, $result, $responseData, $responseOid)) {
echo "OID der Operation: " . ($responseOid ?: '(keine OID in Antwort)') . PHP_EOL;
echo "Antwortdaten (raw): " . $responseData . PHP_EOL;
} else {
echo "Fehler beim Parsen der Extended-Operation-Antwort." . PHP_EOL;
}
} else {
echo "Extended Operation fehlgeschlagen." . PHP_EOL;
}
ldap_unbind($ldap);
?>
Passwort-Extended-Operation mit ldap_exop_passwd und Ergebnisauswertung
<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimes_passwort');
// Passwort des Benutzers ändern und Ergebnis-Objekt anfordern
$result = ldap_exop(
$ldap,
LDAP_EXOP_MODIFY_PASSWD,
null,
null
);
if ($result !== false) {
$responseData = '';
$responseOid = '';
if (ldap_parse_exop($ldap, $result, $responseData, $responseOid)) {
echo "Antwort-OID: " . ($responseOid ?: 'nicht angegeben') . PHP_EOL;
echo "Rohdaten der Antwort (Länge): " . strlen($responseData) . " Bytes" . PHP_EOL;
} else {
echo "Fehler beim Parsen des Ergebnisses." . PHP_EOL;
}
}
ldap_unbind($ldap);
?>
// Wichtig · Fallstricke
BER-Kodierung: Die in $response_data zurückgegebenen Daten liegen im ASN.1 BER-Format vor. Für die Verarbeitung strukturierter Antworten (z. B. beim Passwort-Exop) ist eine weitere Dekodierung notwendig, die PHP nicht nativ bereitstellt – hier kann die Funktion ldap_exop_passwd() als bequemere Alternative verwendet werden.
Versionshinweis: Die Parameter $response_data und $response_oid werden als Referenz übergeben (&). Ab PHP 8.0 wurden die LDAP-Ressourcentypen durch die Klassen LDAP\Connection und LDAP\Result ersetzt.
LDAP v3 erforderlich: Erweiterte Operationen sind ausschließlich im LDAP-Protokoll Version 3 verfügbar. Setze daher ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) vor der Verwendung.