php ldap_search 不返回结果

发布于 2024-12-23 17:02:09 字数 1366 浏览 0 评论 0原文

我正在建立与我们的 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) {
}
?>

I'm establishing a connection to our Active Directory listing of users/employees. I've done this through .NET, but cant get it to work in my PHP app.

I consistantly get a count of 0.

I've tried using samaccountname and sAMaccountname as filters, this does not change the result.

I am successfully connecting, as changing the $ldap will no longer find the server.

I am using valid credentials, as changing $authUser or $authPath provide an authorized error message.

The ldap_bind (i presume) is working, because it does perform the search and outputs a count of 0.

Here is my code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美胚控场 2024-12-30 17:02:09

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

I wonder if your filter is too broad, all user class objects (which includes computers, to Brian Desmond's point) and is returning more than 1000 found objects. In which case AD will error, and return nothing. I would expect you would get a returned error, so this may not be likely. But a more constrained filter, and/or a repetition with a standalone LDAP tool could help validate this idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文