php ldap_search没有返回结果

时间:2011-12-28 19:36:40

标签: php authentication active-directory ldap

我正在建立与用户/员工的Active Directory列表的连接。我是通过.NET完成的,但是无法在我的PHP应用程序中使用它。

我一直得到0分。

我尝试过使用samaccountname和sAMaccountname作为过滤器,这不会改变结果。

我成功连接,因为更改$ ldap将不再找到服务器。

我使用的是有效凭据,因为更改$ authUser或$ authPath会提供授权的错误消息。

ldap_bind(我推测)正在工作,因为它确实执行搜索并输出0的计数。

这是我的代码:

<?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) {
}
?>

1 个答案:

答案 0 :(得分:0)

我想知道你的过滤器是否过于宽泛,所有用户类对象(包括计算机,还有Brian Desmond的观点)并且返回了1000多个找到的对象。在这种情况下,AD将出错,并且不返回任何内容。我希望你会得到一个返回的错误,所以这可能不太可能。但是,更有限的过滤器和/或使用独立LDAP工具的重复可以帮助验证这一想法。