Мой 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 с расширяемым соответствием из командной строки работает нормально.