2016-08-01 34 views
1

Ich habe den folgenden Code für Details in Active Directory ändern:PHP Warning: ldap_modify(): Ändern Sie: Operation nicht auf RDN erlaubt

function updateActiveDirectory($user, $first, $last, $mail, $number, $title, $service, $team) 
{ 
$server = "DC-1"; 
$unit   = "OU=Staff,OU=Users,DC=rugby,DC=internal"; 
$ds    = ldap_connect($server); 
if(!$ds) 
{ 
     return "Cannot connect to LDAP server"; 
} 
$bind = ldap_bind($ds, "DOMAIN\Administrator", "PASSWORD"); 
if(!$bind) 
{ 
     return "Couldn't bind to LDAP server"; 
} 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
$sr = ldap_search($ds, $unit, "(sAMAccountName={$user})"); 
$ent= ldap_get_entries($ds, $sr); 
$userdata = array(); 
$userdata["cn"][0]=$first. " ".$last; 
$userdata["sn"][0]=$last; 
$userdata["mail"][0]=$mail; 
$userdata["telephonenumber"][0]=$number; 
$userdata["company"][0]=$service; 
$userdata["department"][0]=$team; 
$userdata["title"][0]=$title; 
$name = $ent[0]["dn"]; 
ldap_modify($ds, $name, $userdata); 
} 

Ich erhalte Warnung:

ldap_modify(): Ändern: Operation nicht erlaubt auf RDN

aber ich bin nicht in der Lage, etwas online zu diesem Problem zu finden. Was ist das Problem hier?

Antwort

2

Sie können das Attribut CN nicht ändern. Dieses Attribut bildet die RDN. Wenn Sie dies ändern müssen, sollten Sie die ldap_rename() Funktion verwenden:

$rdn = 'cn='.ldap_escape($first." ".$last, null, LDAP_ESCAPE_DN); 
ldap_rename($ds, $ent[0]["dn"], $rdn, null, true);