2016-05-23 5 views
0

Ich versuche ein Self-Service-Portal auf meinem OpenLDAP-Server zu erstellen, damit Benutzer ihren GECOS-Eintrag, ihre Telefonnummer usw. aktualisieren können. Sie werden ihr Kennwort NICHT nach Bedarf aktualisieren. Das Problem ist, dass ich keine Attribute im LDAP-Server aktualisieren kann. Ich verwende den PHP-Aufruf ldap_mod_replace mit einem gültigen DN (der root administrative DN gerade), um diese Attribute zu aktualisieren. Der Fehler, den ich erhalten ist:Ich kann keine Attribute mit ldap_mod_replace ersetzen

(53) Server nicht bereit ist,

Die bind ist erfolgreich auf dem Server auszuführen. Mit demselben Bind-DN ​​kann ich jedes Attribut, das ich verwenden möchte, mit einem Drittanbieter-Tool (JXplorer) aktualisieren. Hier

ist ein Schnipsel von der genauen Code, in dem die Aktualisierung durchgeführt wird, redigiert für den Schutz von IP:

function saveAccountData($connection, $dn, $newAcctData, $isAdmin = false) { 
    $permittedData = array(); 
    $resp = ldap_bind($connection, "cn=rootdn,dc=domain,dc=tld", "reallygoodpassword"); 
    if (!$resp) { 
     die("Failed to bind to LDAP with authenticated credentials! $resp\n"); 
    } 
    if ($isAdmin) { 
     $permittedData = $newAcctData; 
    } 
    else { 
     $permittedData["homedirectory"] = $newAcctData["homeDirectory"]; 
     $permittedData["gecos"] = $newAcctData["gecos"]; 
     $permittedData["loginshell"] = $newAcctData["loginShell"]; 
     $permittedData["telephonenumber"] = $newAcctData["telephoneNumber"]; 
    } 
    return ldap_mod_replace($connection, $dn, $permittedData); 
} 

ich überprüfen, für die Fehler außerhalb nach Aufruf dieser Funktion, das ist, wie ich hier angekommen mit dem Fehler Botschaft.

ich in dieser Benutzeranleitung: http://www.openldap.org/doc/admin24/appendix-common-errors.html

ich die verschiedenen Themen überprüft haben, aber diese scheinen Active Directory anwenden: ldap_mod_replace() [function.ldap-mod-replace]: Modify: Server is unwilling to perform

Ich habe noch versucht, diese Lösungen, aber keine in Anspruch nehmen. Was läuft hier falsch?

Vielen Dank im Voraus!

+0

Dies sind die restlichen Ressourcen, die ich auf mögliche Antworten überprüft habe: http://php.net/manual/en/function.ldap-mod-replace.php http://www.openldap.org /doc/admin24/appendix-common-errors.html http://www.learncomputer.com/php-ldap/ http://stackoverflow.com/questions/10763070/ldap-mod-replace-function-ldap- mod-replace-modify-server-is-unwilling-to-p http://stackoverflow.com/questions/31856996/php-ldap-ldap-mod-replace http://stackoverflow.com/questions/27230163/ warning-ldap-mod-replace-modify-server-is-unwilling-to-perform – kaiw

+0

Meine Lektüre der PHP-Dokumentation ist, dass 'ldap_mod_replace' verwendet werden kann, um nur die Werte eines einzelnen Attributs zu ändern. Sie sollten 'ldap_modify' verwenden, um mehrere Attribute in einer einzelnen LDAP-Änderungsoperation zu aktualisieren. –

+0

Das war genau das Problem! Ich hatte das Handbuch für "ldap_modify" falsch gelesen und dachte, dass ich einen Eintrag suchen müsste, anstatt einfach einen DN mit einigen aktualisierten Parametern zu übergeben. Vielen Dank! – kaiw

Antwort

0

Die ldap_mod_replace sollte nur verwendet werden, um einen Wert oder mehrere Werte eines einzigen Attributtyps zu ändern. Sie sollten ldap_modify verwenden, um mehrere Attributtypen in einer einzelnen LDAP-Änderungsoperation zu aktualisieren.

Das Handbuch ist wahrscheinlich etwas verwirrend als ldap_mod_replace nimmt ein Argument, das Sie glauben, dass die Änderung mehrerer Attributtypen mit dieser Methode zulässig ist. Es ist nicht.