Start · Sprachen · PHP · Referenz · ldap_mod_del_ext

ldap_mod_del_ext

Funktion

Löscht Attributwerte aus bestehenden Attributen eines LDAP-Eintrags und gibt ein <code>LDAP\Result</code>-Objekt zurück.

seit PHP 8.1.0 Kategorie: misc

Signatur

ldap_mod_del_ext(LDAP\Connection $ldap, string $dn, array $entry, ?array $controls = null): LDAP\Result|false

Beschreibung

ldap_mod_del_ext entfernt gezielt einzelne Werte aus mehwertigen Attributen eines LDAP-Eintrags, ohne das gesamte Attribut zu löschen. Im Gegensatz zu ldap_mod_del blockiert diese Funktion den PHP-Prozess nicht, sondern gibt sofort ein LDAP\Result-Objekt zurück, das anschließend mit ldap_parse_result oder ldap_get_entries ausgewertet werden kann.

Das $entry-Array gibt an, welche Attributwerte gelöscht werden sollen. Jeder Schlüssel entspricht einem Attributnamen, der zugehörige Wert ist entweder ein einzelner String oder ein Array von Strings mit den zu löschenden Werten. Wird als Wert ein leeres Array angegeben, werden alle Werte des Attributs entfernt.

Über den optionalen Parameter $controls können LDAP-Steuerelemente (Server Controls) mitgeschickt werden, etwa um Passwortrichtlinien oder andere Serverfunktionen zu aktivieren. Dies ist besonders in Umgebungen relevant, in denen der LDAP-Server erweiterte Funktionen wie Transaktionen oder kaskadierte Löschvorgänge unterstützt.

Diese Funktion ist sinnvoll, wenn auf asynchrone oder nicht-blockierende LDAP-Operationen gesetzt wird, oder wenn LDAP-Steuerelemente zusammen mit dem Löschvorgang übergeben werden müssen – etwa in Unternehmensverzeichnissen mit Active Directory oder OpenLDAP.

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 LDAP-Eintrags, aus dem Attributwerte gelöscht werden sollen, z. B. uid=jdoe,ou=users,dc=example,dc=com.
$entry Pflicht array Assoziatives Array, dessen Schlüssel die Attributnamen und dessen Werte die zu löschenden Attributwerte sind. Ein leeres Array als Wert löscht alle Werte des betreffenden Attributs.
$controls array|null null Optionales Array mit LDAP-Steuerelementen (Server Controls), die mit der Anfrage gesendet werden. Jedes 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 ausgewertet werden kann. Im Fehlerfall wird false zurückgegeben. Um den genauen Fehler zu ermitteln, kann ldap_error oder ldap_errno verwendet werden.

Beispiele

Einzelnen Attributwert aus einem LDAP-Eintrag löschen

<?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 = 'uid=jdoe,ou=users,dc=example,dc=com';

// Entfernt nur den Wert 'engineers' aus dem Attribut 'memberOf'
$entry = [
    'memberOf' => ['cn=engineers,ou=groups,dc=example,dc=com']
];

$result = ldap_mod_del_ext($ldap, $dn, $entry);

if ($result === false) {
    echo 'Fehler: ' . ldap_error($ldap);
} else {
    ldap_parse_result($ldap, $result, $errcode, $matcheddn, $errmsg);
    if ($errcode === LDAP_SUCCESS) {
        echo 'Attributwert erfolgreich gelöscht.';
    } else {
        echo 'LDAP-Fehlercode: ' . $errcode . ' - ' . $errmsg;
    }
}

ldap_unbind($ldap);
Attributwert erfolgreich gelöscht.

Alle Werte eines Attributs mit Server Control löschen

<?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 = 'uid=jsmith,ou=users,dc=example,dc=com';

// Leeres Array löscht ALLE Werte des Attributs 'telephoneNumber'
$entry = [
    'telephoneNumber' => []
];

// Passwortrichtlinien-Control (RFC 3112)
$controls = [
    [
        'oid'        => '1.3.6.1.4.1.42.2.27.8.5.1',
        'iscritical' => false
    ]
];

$result = ldap_mod_del_ext($ldap, $dn, $entry, $controls);

if ($result === false) {
    echo 'Fehler beim Löschen: ' . ldap_error($ldap);
} else {
    ldap_parse_result($ldap, $result, $errcode);
    echo $errcode === LDAP_SUCCESS
        ? 'Alle Telefonnummern gelöscht.'
        : 'LDAP-Fehlercode: ' . $errcode;
}

ldap_unbind($ldap);
Alle Telefonnummern gelöscht.

// Wichtig · Fallstricke

Berechtigungen: Der verwendete Bind-DN muss über ausreichende Schreibrechte im LDAP-Verzeichnis verfügen, um Attributwerte löschen zu dürfen. Andernfalls schlägt die Operation mit einem Berechtigungsfehler fehl.

Nicht-blockierend vs. blockierend: Im Gegensatz zu ldap_mod_del gibt diese Funktion sofort ein Ergebnisobjekt zurück. Das Ergebnis muss anschließend explizit mit ldap_parse_result ausgewertet werden, um den tatsächlichen Erfolg der Operation zu prüfen.

Schema-Konformität: Wird versucht, einen Wert zu löschen, der nicht existiert, oder ein Attribut, das für den Eintrag nicht definiert ist, kann der LDAP-Server einen Fehler zurückgeben (z. B. LDAP_NO_SUCH_ATTRIBUTE). Das Verhalten ist serverabhängig.

Sicherheit: Benutzerinput, der in den DN oder in Attributwerte einfließt, muss mit ldap_escape bereinigt werden, um LDAP-Injection-Angriffe zu verhindern.