在filter中使用可扩展匹配时,ldap_search失败

时间:2018-05-23 21:43:55

标签: php ldap

如果我在过滤器中使用可扩展匹配,则我的ldap_search失败并出现协议错误。这是相关的代码:

$conn = ldap_connect(SERVER, PORT);
ldap_bind($conn, LDAP_USER, LDAP_PW);            

$filter = "(&(whatever=*)(uid=something)(!(ou:dn:=other)))";
$s = ldap_search($conn, BASE_DN, $filter);
if (ldap_errno($conn) != 0) {
    echo "Error: " + ldap_error($conn);
    exit();
}
$res = ldap_get_entries($conn, $s);
var_dump($res);
exit();

如果我改用:

$filter = "(&(whatever=*)(uid=something))";

它运作正常。如果我从命令行使用带有可扩展匹配部分的ldapsearch它可以正常工作,所以它不是ldap服务器版本问题。

我也试图加入

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 2);

并且都没有效果。我使用的是PHP 7.0.28。

任何人都知道发生了什么事吗?

修改

回应@heiglandreas:

user@mycomp:~$ ldapsearch -VV
ldapsearch: @(#) $OpenLDAP: ldapsearch  (Ubuntu) (May 30 2017 19:20:53) $
    buildd@lgw01-18:/build/openldap-JXEADB/openldap-2.4.42+dfsg/debian/build/clients/tools
    (LDAP library: OpenLDAP 20442)

从php_info输出:

LDAP Support    enabled
RCS Version     $Id: cec20da3ccaa477662b8667bef021291fb5bf6f4 $
Total Links     0/unlimited
API Version     3001
Vendor Name     OpenLDAP
Vendor Version  20442
SASL Support    Enabled

Directive       Local Value     Master Value
ldap.max_links  Unlimited       Unlimited

回应jwilleke:

vendorName    389 Project
vendorVersion 389-Directory/1.2.11.15 B2016.194.1549

但我确信它支持过滤器,因为命令行可扩展匹配的ldapseach工作正常。

0 个答案:

没有答案