Start · Sprachen · PHP · Referenz · ldap_parse_exop

ldap_parse_exop

Funktion

Wertet das Ergebnisobjekt einer erweiterten LDAP-Operation aus und extrahiert Antwortdaten sowie die OID des erweiterten Vorgangs.

seit PHP 7.2.0 Kategorie: misc

Signatur

ldap_parse_exop(LDAP\Connection $ldap, LDAP\Result $result, string &$response_data = null, string &$response_oid = null): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
OID der Operation: (keine OID in Antwort) Antwortdaten (raw): dn:cn=admin,dc=example,dc=com

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);
?>
Antwort-OID: nicht angegeben Rohdaten der Antwort (Länge): 0 Bytes

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