2016-12-13 31 views
-1

我試圖使用ldap_search來檢查用戶是否存在於AD數據庫中。如何檢查ldap_search正在工作? (php)

這是我的代碼連接:

$ldapconn = ldap_connect("10.0.0.230"); 
     $clave = "XXX"; 
     $searchUser = "YYY"; 
     $ldap_success = false; 
     if (ldap_bind($ldapconn, $searchUser, $clave)) { 

      $attributes = ['cn']; 
      $filter = "(&(objectClass=user)(objectCategory=person)(userPrincipalName=".ldap_escape($post_send['username'], null, LDAP_ESCAPE_FILTER)."))"; 
      $baseDn = "DC=redcne,DC=cne,DC=cl"; 
      $results = ldap_search($ldapconn, $baseDn, $filter, $attributes); 
      var_dump($results); 
      print_r($results); 
      exit(0); 

$results總是返回false。所以,我不知道:

  • 我的ldap_search
  • 使我的參數錯誤的參數無效

我得先綁定,就像這樣:

ldap_bind($ldapconn, $searchUser, $clave)) 

返回true,我知道我可以綁定到AD,但我不知道如何檢查我是否正確地做了ldap_search部件,或者我的許可或問題有問題這樣的興奮。

更新: 我得到了錯誤:

ldap_search(): Search: Operations error 
+0

爲什麼你在'ldap_search'之前有'@'?你知道那是什麼嗎? –

+0

對不起,錯誤的代碼,讓我編輯它。 – pmirnd

回答

0

問題是在過濾器上,我不得不用另一場比「CN」,這是「SAM帳戶名」。我不得不下載AD的所有信息,然後我可以檢查使用的字段。另外,我必須使用小寫的userPrincipalName才能工作。

$ldapconn = ldap_connect("10.0.0.230"); 
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals'); 
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 
$searchPass = "XXX"; 
$searchUser = "YYY"; 
$ldap_success = false; 
if (ldap_bind($ldapconn, $searchUser, $searchPass)) { 
    try{ 
     $post_send['password'] = $searchPass; 
     $attributes = ['cn']; 
     $filter = "(&(objectClass=user)(objectCategory=person)(samaccountname=".ldap_escape($post_send['username'], null, LDAP_ESCAPE_FILTER)."))"; 
     $baseDn = "DC=XXX,DC=XX,DC=cl"; 
     $results = ldap_search($ldapconn, $baseDn, $filter, $attributes); 
     $info = ldap_get_entries($ldapconn, $results); 
     if ($info && $info['count'] === 1) { 
       $ldap_success = true; 
     } else { 
       $ldap_success = false; 
     } 
    } 
    catch(\Exception $e){ 
      $ldap_success = false; 
    } 
}