Start · Sprachen · PHP · Referenz · ldap_modify

ldap_modify

Funktion

Alias von <code>ldap_mod_replace</code>: Ersetzt Attribute eines LDAP-Eintrags durch neue Werte.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_modify(LDAP\Connection $ldap, string $dn, array $entry, ?array $controls = null): bool

Beschreibung

ldap_modify ist ein Alias der Funktion ldap_mod_replace und ersetzt die Attribute eines bestehenden LDAP-Eintrags vollständig durch die angegebenen neuen Werte. Der Eintrag wird über seinen Distinguished Name (DN) identifiziert.

Die Funktion eignet sich, um bekannte Attribute eines LDAP-Objekts (z. B. eines Benutzers oder einer Gruppe) zu aktualisieren, ohne den gesamten Eintrag neu anlegen zu müssen. Dabei werden die übergebenen Attribute komplett ersetzt – vorhandene Werte werden überschrieben, nicht ergänzt.

Der Parameter $entry ist ein assoziatives Array, dessen Schlüssel die LDAP-Attributnamen sind und dessen Werte entweder ein einzelner String oder ein Array von Strings sein können. Soll ein Attribut gelöscht werden, übergibt man ein leeres Array als Wert.

Hinweis: Da ldap_modify lediglich ein Alias ist, wird empfohlen, direkt ldap_mod_replace zu verwenden, um künftige Kompatibilitätsprobleme zu vermeiden, falls der Alias entfernt wird.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect und ldap_bind erstellt und authentifiziert wurde.
$dn Pflicht string Der Distinguished Name (DN) des LDAP-Eintrags, dessen Attribute ersetzt werden sollen, z. B. uid=jdoe,ou=users,dc=example,dc=com.
$entry Pflicht array Assoziatives Array mit den zu ersetzenden Attributen. Schlüssel sind Attributnamen, Werte sind Strings oder Arrays von Strings. Ein leeres Array als Wert löscht das Attribut.
$controls array|null null Optionale LDAP-Steuerungsstrukturen (Server Controls), die mit der Anfrage gesendet werden. Seit PHP 8.0.0 verfügbar.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, andernfalls false. Bei einem Fehler kann ldap_error oder ldap_errno zur Fehlerdiagnose genutzt werden.

Beispiele

Telefonnummer eines LDAP-Benutzers aktualisieren

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

if (!ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort')) {
    die('LDAP-Bind fehlgeschlagen: ' . ldap_error($ldap));
}

$dn = 'uid=jdoe,ou=users,dc=example,dc=com';
$entry = [
    'telephoneNumber' => '+49 30 123456789',
    'mail'           => 'jdoe@example.com',
];

if (ldap_modify($ldap, $dn, $entry)) {
    echo 'Eintrag erfolgreich aktualisiert.';
} else {
    echo 'Fehler beim Aktualisieren: ' . ldap_error($ldap);
}

ldap_unbind($ldap);
Eintrag erfolgreich aktualisiert.

Attribut eines LDAP-Eintrags 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';

// Attribut 'description' durch Übergabe eines leeren Arrays löschen
$entry = [
    'description' => [],
];

if (ldap_modify($ldap, $dn, $entry)) {
    echo 'Attribut erfolgreich gelöscht.';
} else {
    echo 'Fehler: ' . ldap_error($ldap);
}

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

// Wichtig · Fallstricke

Alias: ldap_modify ist ein Alias von ldap_mod_replace. Es wird empfohlen, direkt ldap_mod_replace zu verwenden, da Aliase in zukünftigen PHP-Versionen ohne Vorwarnung entfernt werden können.

Berechtigungen: Der gebundene LDAP-Benutzer muss ausreichende Schreibrechte auf den zu ändernden Eintrag besitzen. Andernfalls schlägt die Operation mit einem Berechtigungsfehler fehl.

Sicherheit: Niemals Benutzereingaben ungeprüft in DN oder Attributwerte übernehmen. LDAP-Injection kann durch sorgfältige Validierung und ggf. Verwendung von ldap_escape vermieden werden.

Vollständiges Ersetzen: Im Gegensatz zu ldap_mod_add werden durch ldap_modify/ldap_mod_replace bestehende Werte vollständig überschrieben, nicht ergänzt.