Start · Sprachen · PHP · Referenz · ldap_get_dn

ldap_get_dn

Funktion

Gibt den Distinguished Name (DN) eines LDAP-Ergebnis-Eintrags zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_get_dn(LDAP\Connection $ldap, LDAP\ResultEntry $entry): string|false

Beschreibung

ldap_get_dn() liest den Distinguished Name (DN) aus einem einzelnen Eintrag eines LDAP-Suchergebnisses aus. Der DN ist der eindeutige Bezeichner eines Eintrags im LDAP-Verzeichnisbaum, z. B. cn=Max Mustermann,ou=Users,dc=example,dc=com.

Die Funktion wird typischerweise innerhalb einer Schleife verwendet, die mit ldap_first_entry() und ldap_next_entry() über die Ergebnisse eines ldap_search()-Aufrufs iteriert. So kann für jeden gefundenen Eintrag der zugehörige DN abgerufen werden.

Der zurückgegebene DN kann anschließend z. B. für ldap_read(), ldap_mod_replace(), ldap_delete() oder zur Authentifizierung mit ldap_bind() verwendet werden.

Ab PHP 8.1 werden dedizierte Objekte vom Typ LDAP\Connection und LDAP\ResultEntry statt einfacher Ressourcen verwendet.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine aktive LDAP-Verbindung, die von ldap_connect() zurückgegeben wurde.
$entry Pflicht LDAP\ResultEntry Ein einzelner Ergebnis-Eintrag, wie er von ldap_first_entry() oder ldap_next_entry() geliefert wird.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den DN des Eintrags als string zurück. Im Fehlerfall wird false zurückgegeben.

Beispiele

DN aller gefundenen Benutzer ausgeben

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimes_passwort');

$baseDn = 'ou=Users,dc=example,dc=com';
$filter = '(objectClass=person)';

$result = ldap_search($ldap, $baseDn, $filter);

if ($result) {
    $entry = ldap_first_entry($ldap, $result);
    while ($entry !== false) {
        $dn = ldap_get_dn($ldap, $entry);
        if ($dn !== false) {
            echo 'DN: ' . $dn . PHP_EOL;
        }
        $entry = ldap_next_entry($ldap, $entry);
    }
}

ldap_unbind($ldap);
DN: cn=Max Mustermann,ou=Users,dc=example,dc=com DN: cn=Erika Musterfrau,ou=Users,dc=example,dc=com

DN für späteres Binden (Authentifizierung) verwenden

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

// Anonymes Bind zum Suchen des Nutzers
ldap_bind($ldap);

$username = 'max.mustermann';
$baseDn   = 'dc=example,dc=com';
$filter   = '(uid=' . ldap_escape($username, '', LDAP_ESCAPE_FILTER) . ')';

$result = ldap_search($ldap, $baseDn, $filter, ['dn']);
$entry  = ldap_first_entry($ldap, $result);

if ($entry !== false) {
    $dn = ldap_get_dn($ldap, $entry);
    // Nun mit dem echten Passwort des Nutzers binden
    $password = 'nutzer_passwort';
    if ($dn !== false && @ldap_bind($ldap, $dn, $password)) {
        echo 'Authentifizierung erfolgreich für: ' . $dn . PHP_EOL;
    } else {
        echo 'Authentifizierung fehlgeschlagen.' . PHP_EOL;
    }
}

ldap_unbind($ldap);
Authentifizierung erfolgreich für: uid=max.mustermann,ou=Users,dc=example,dc=com

// Wichtig · Fallstricke

Sicherheit: Wenn Benutzereingaben in LDAP-Filter oder DNs einfließen, müssen diese zwingend mit ldap_escape() escaped werden, um LDAP-Injection-Angriffe zu verhindern.

PHP 8.1+: Die bisherigen LDAP-Ressourcen (resource) wurden durch die dedizierten Klassen LDAP\Connection, LDAP\Result und LDAP\ResultEntry ersetzt. Code, der noch Ressource-Typen prüft, muss entsprechend angepasst werden.

Wenn der Eintrag keinen gültigen DN besitzt oder ein interner Fehler auftritt, gibt die Funktion false zurück. Der Rückgabewert sollte daher stets mit === false geprüft werden.