2017-05-11 1 views
1

저는 Active Directory와 PHP의 통합에 어려움을 겪고 있습니다. 업데이트하려고하는 필드는 givenname, sn, mail, telephonenumber, company, department 및 title입니다. 내가 대신 LDAP의 LDAPS를 사용한다는 것을 발견 인터넷 검색에서경고 : ldap_modify() : 수정 : 서버가 수행하기가 꺼림

Warning: ldap_modify(): Modify: Server is unwilling to perform in E:\IIS^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

하지만 내가 잘못 여기에 무엇을 알고하지 않습니다 : 그것은 나에게 다음과 같은 오류를주고있다

function get_active_directory_info($username, $password) 
{ 
    $conn   = ldap_connect("DC-1"); 
    if($conn==FALSE) 
    { 
     return array(FALSE, FALSE); 
    } 
    else 
    { 
     $bind = ldap_bind($conn, $username, $password); 
     ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION,3); 
     ldap_set_option($conn, LDAP_OPT_REFERRALS,0); 
     $unit   = "OU=Staff,OU=Users,DC=example,DC=internal"; 
     $filter   = "(&(objectCategory=person)(sAMAccountName=*)(!(UserAccountControl=514)))"; 
     $results  = array(); 
     $justthese  = array("sn", "givenname", "mail", "company","department","title","telephonenumber","samaccountname", "cn"); 
     $sr=ldap_search($conn, $unit, $filter, $justthese); 
     $info = ldap_get_entries($conn, $sr);   
     for($i = 0; $i < $info["count"]; $i++) 
     { 
      $cn = $info[$i]["cn"][0]; 
      if(substr($cn, -3) != "ADM") 
      { 
       $results[$i]["id"] = $i + 1; 
       if(empty($info[$i]["givenname"][0])==FALSE) 
       { 
        $results[$i]["first"] = $info[$i]["givenname"][0]; 
       } 
       if(empty($info[$i]["sn"][0])==FALSE) 
       { 
        $results[$i]["last"] = $info[$i]["sn"][0]; 
       } 
       if(empty($info[$i]["mail"][0])==FALSE) 
       { 
        $results[$i]["email"] = $info[$i]["mail"][0]; 
       }  
       if(empty($info[$i]["company"][0])==FALSE) 
       { 
        $results[$i]["company"] = $info[$i]["company"][0]; 
       } 
       if(empty($info[$i]["title"][0])==FALSE) 
       { 
        $results[$i]["title"] = $info[$i]["title"][0]; 
       }  
       if(empty($info[$i]["department"][0])==FALSE) 
       { 
        $results[$i]["department"] = $info[$i]["department"][0]; 
       }  
       if(empty($info[$i]["telephonenumber"][0])==FALSE) 
       { 
        $results[$i]["number"] = $info[$i]["telephonenumber"][0]; 
       }  
       if(empty($info[$i]["samaccountname"][0])==FALSE) 
       { 
        $results[$i]["username"] = $info[$i]["samaccountname"][0]; 
       } 
      } 
     } 
    }  
    return $results;  
} 

답변

0

경우 I 정확하게 기억하고, 암호를 변경하기위한 LDAP가 필요합니다. 좀 더 단순한 예제로 이것을 시도해 보았습니까?

제공하신 정보로 다음 코드를 변경했지만 호스트, 사용자 이름 및 암호를 변경해야합니다. 이것을 시도하면 어떻게됩니까?

$r=ldap_bind($ds, "username", "password"); 

$ldapconn = ldap_connect("LDAP://HOST:389"); 

if ($ldapconn) { 

    // binding to ldap server 
    $ldapbind = ldap_bind($ldapconn, "username", "password"); 

    $justthese = array("otherTelephone"); 

    $search = ldap_search($ldapconn,"OU=Staff,OU=Users,DC=example,DC=internal", "(&(objectCategory=person)(sAMAccountName=*)(!(UserAccountControl=514)))", $justthese); 

    $entry = ldap_get_entries($ldapconn, $search); 

    $dn=$entry[0]["dn"]; 

    $userdata=array(); 
    $userdata["otherTelephone"][0]= "NEWPHONENUMBER";  
    ldap_modify($ldapconn, $dn, $userdata); 
} 

어떻게되는지 알려주세요.