Signatur
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
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 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);
// 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.