Start · Sprachen · PHP · Referenz · ldap_rename_ext

ldap_rename_ext

Funktion

Ändert den Namen (RDN) eines LDAP-Eintrags und gibt ein <code>LDAP\Result</code>-Objekt zurück, das eine asynchrone Auswertung ermöglicht.

seit PHP 7.3.0 Kategorie: misc

Signatur

ldap_rename_ext(LDAP\Connection $ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, ?array $controls = null): LDAP\Result|false

Beschreibung

ldap_rename_ext funktioniert analog zu ldap_rename, gibt jedoch anstelle eines booleschen Wertes ein LDAP\Result-Objekt zurück. Damit lässt sich die Operation asynchron auswerten, z. B. durch anschließendes Übergeben des Ergebnisses an ldap_parse_result, um Serversteuerungen (Controls) und Fehlercodes auszulesen.

Mit dieser Funktion kann der relative Distinguished Name (RDN) eines LDAP-Eintrags geändert werden, optional verbunden mit einem Umzug in einen anderen Zweig des Verzeichnisbaums (neuer übergeordneter DN). Der Parameter delete_old_rdn steuert, ob der bisherige RDN-Wert als Attribut im Eintrag erhalten bleibt oder gelöscht wird.

Der Einsatz von LDAP-Controls über den Parameter controls ermöglicht es, serverseitige Erweiterungen zu nutzen, z. B. das Mitführen einer Tree-Delete- oder Pre-Read-Control. Das zurückgegebene LDAP\Result-Objekt kann anschließend mit ldap_parse_result analysiert werden, um Serverantworten inklusive enthaltener Controls auszuwerten.

Diese Funktion ist besonders nützlich in Szenarien, in denen eine feinere Kontrolle über die LDAP-Serverantwort erforderlich ist oder wenn Controls verwendet werden sollen, die über den einfachen Erfolg/Fehler-Status hinausgehen.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect und ldap_bind erstellt wurde.
$dn Pflicht string Der Distinguished Name (DN) des Eintrags, der umbenannt werden soll, z. B. cn=Max Mustermann,ou=Users,dc=example,dc=com.
$new_rdn Pflicht string Der neue relative Distinguished Name (RDN) des Eintrags, z. B. cn=Max Muster.
$new_parent Pflicht string Der DN des neuen übergeordneten Eintrags. Soll der Eintrag im selben Zweig bleiben, wird der aktuelle übergeordnete DN angegeben. Ein leerer String bewirkt, dass der übergeordnete Knoten unverändert bleibt.
$delete_old_rdn Pflicht bool Wenn true, wird der alte RDN-Wert aus dem Eintrag gelöscht. Bei false bleibt der alte Wert als zusätzliches Attribut erhalten.
$controls array|null null Ein optionales Array mit LDAP-Controls, die mit der Anfrage an den Server gesendet werden sollen. Jedes Control-Element ist ein assoziatives Array mit den Schlüsseln oid, iscritical und optional value.

Rückgabewert

Typ
LDAP\Result|false
Beschreibung
Gibt bei Erfolg ein LDAP\Result-Objekt zurück, das mit ldap_parse_result weiterverarbeitet werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Eintrag umbenennen und Ergebnis auswerten

<?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', 'geheimesPasswort');

$dn        = 'cn=Max Mustermann,ou=Users,dc=example,dc=com';
$newRdn    = 'cn=Max Muster';
$newParent = 'ou=Users,dc=example,dc=com';

$result = ldap_rename_ext($ldap, $dn, $newRdn, $newParent, true);

if ($result === false) {
    echo 'Fehler beim Senden der Umbenennung: ' . ldap_error($ldap);
} else {
    ldap_parse_result($ldap, $result, $errcode, $matcheddn, $errmsg, $referrals, $controls);
    if ($errcode === LDAP_SUCCESS) {
        echo 'Eintrag erfolgreich umbenannt.';
    } else {
        echo 'LDAP-Fehler ' . $errcode . ': ' . $errmsg;
    }
}

ldap_unbind($ldap);
Eintrag erfolgreich umbenannt.

Eintrag umbenennen und in anderen OU verschieben

<?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', 'geheimesPasswort');

// Eintrag von ou=Users nach ou=Alumni verschieben und RDN beibehalten
$dn        = 'cn=Erika Muster,ou=Users,dc=example,dc=com';
$newRdn    = 'cn=Erika Muster'; // gleicher RDN
$newParent = 'ou=Alumni,dc=example,dc=com'; // neuer übergeordneter DN

$result = ldap_rename_ext($ldap, $dn, $newRdn, $newParent, true);

if ($result === false) {
    echo 'Fehler: ' . ldap_error($ldap);
} else {
    ldap_parse_result($ldap, $result, $errcode);
    echo ($errcode === LDAP_SUCCESS)
        ? 'Eintrag erfolgreich verschoben.'
        : 'Fehlercode: ' . $errcode;
}

ldap_unbind($ldap);
Eintrag erfolgreich verschoben.

// Wichtig · Fallstricke

Berechtigungen: Für das Umbenennen von LDAP-Einträgen sind in der Regel Schreibrechte auf dem Verzeichnisserver erforderlich. Das Bind-Konto muss über ausreichende Zugriffsrechte verfügen.

Unterschied zu ldap_rename: Während ldap_rename ein einfaches true oder false zurückgibt, ermöglicht ldap_rename_ext die Auswertung von Server-Controls und detaillierten Fehlerinformationen über ldap_parse_result.

LDAP v3 erforderlich: Das Umbenennen in einen anderen Zweig des Verzeichnisbaums (andere übergeordnete OU) ist nur mit LDAPv3 möglich. Stellen Sie sicher, dass ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) gesetzt ist.

Sicherheitshinweis: DN-Werte, die aus Benutzereingaben stammen, müssen vor der Verwendung mit ldap_escape und dem Flag LDAP_ESCAPE_DN escaped werden, um LDAP-Injection zu verhindern.