2011-12-28 259 views
2

我正在建立與Active Directory用戶/員工列表的連接。我通過.NET完成了這項工作,但無法在我的PHP應用程序中使用它。php ldap_search不返回結果

我consistantly得到0

我使用SAM帳戶和SAM帳戶作爲過濾器嘗試計數,這不會改變結果。

我成功連接,爲改變$ LDAP將不再能夠找到服務器。

我使用的有效憑證,如改變$ AUTHUSER或$ authPath提供授權的錯誤消息。

的的ldap_bind(我相信)工作,因爲它執行搜索和輸出的0.1

這裏計數是我的代碼:

<?php 
try{ 
    $ldap = "vmc-dc.CompanyName.vmc"; 
    $authUser = "vmc\\MyUsername"; 
    $authPass = "MyPassword"; 
    $baseDn = "dc=vmc-dc,dc=CompanyName,dc=com"; 
    $filter="(&(objectClass=user)(samaccountname=*))"; 

    $conn = ldap_connect($ldap, 389) ; 

    if ($conn) { 

     ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); 
     ldap_set_option($conn, LDAP_OPT_REFERRALS, 0); 

     // binding to ldap server 
     $ldapbind = ldap_bind($conn, $authUser, $authPass); 

     // verify binding 
     if ($ldapbind) { 
      //$sr=ldap_read($conn, $baseDn, $filter); 
      $sr=ldap_search($conn, $baseDn, $filter); 

      $number_returned = ldap_count_entries($conn,$sr); 
      echo "Count: " . $number_returned . "<br/>"; 

      $entry = ldap_get_entries($conn, $sr); 
      ldap_close($conn); 
      echo "value = '" . $entry[0] . "'"; 

     } else { 
      echo "LDAP conn ok..."; 
     } 
    } 
} catch (Exception $e) { 
} 
?> 
+0

驗證是否可以使用ldapsearch命令行工具檢索所需的數據:'的ldapsearch -h主機名-p端口-b的baseDn -s子-D DN -w密碼「(&(objectClass的=用戶)(Sam帳戶= * ))「1.1」。 –

+0

如果你想要所有的用戶,'(&(objectCategory = person)(objectClass = user))'是你最好的選擇。 –

+0

對於Brian的觀點,對objectCategory = person的需求是排除計算機對象。 – geoffc

回答

0

我不知道,如果你的過濾器是過於寬泛,所有的用戶類對象(包括計算機,Brian Desmond的觀點),並返回超過1000個找到的對象。在這種情況下,AD將會出錯,並不會返回任何內容我希望你會得到一個返回的錯誤,所以這可能不太可能。但是更受限制的過濾器和/或重複使用獨立的LDAP工具可能有助於驗證此想法。