Каков наилучший способ выбрать атрибуты для всех членов группы AD LDAP из PHP?

Мне нужно выбрать ряд атрибутов для всех пользователей в определенной группе из приложения PHP. Я понимаю, что могу запросить атрибут 'member' группы, чтобы получить dn каждого члена, а затем сделать отдельный запрос LDAP для атрибутов каждого члена. Однако я надеюсь, что есть один запрос, который я могу выполнить, который вернет все результаты сразу, чтобы предотвратить избыточное взаимодействие между приложением PHP и сервером LDAP (AD).

С помощью браузера LDAP я могу успешно выполнить поиск в своем полный домен:

Search DN:  DC=middlebury,DC=edu
Filter: (memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)
Attributes: objectClass,mail,givenName,sn,sAMAccountName,telephoneNumber

и получить ожидаемые результаты. Однако, когда я пробую этот фильтр, используя метод PHP ldap_search(), я получаю Operations error с кодом 1.

Ниже приведен PHP, который я использую.

....
$baseDN = 'DC=middlebury,DC=edu';
$filter = '(memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)';
$attributes = array('objectClass','mail','givenName','sn','sAMAccountName','telephoneNumber');

$result = ldap_search($connection, $baseDN, $filter, $attributes);

if (ldap_errno($connection))
    print "Read failed for $filter with message: ".ldap_error($connection).", #".ldap_errno($ connection));

Другие фильтры прекрасно работают с этими атрибутами, и использование только array('mail') или пустого массива для атрибутов не избавляет от результата ошибки, поэтому я уверен, что проблема связана с моим фильтром, а не с соединением или набором атрибутов.

Второй вариант — сделать один запрос для dns члена группы в поле «член» группы, а затем построить длинный запрос ИЛИ для каждого dn члена. Однако это по-прежнему будет включать два запроса.

Итак, есть ли лучший способ получить атрибуты каждого члена, в идеале, в одном запросе?


person Adam Franco    schedule 31.03.2009    source источник
comment
Пожалуйста, опубликуйте соответствующий фрагмент кода.   -  person Stefan Gehrig    schedule 01.04.2009
comment
Я обновил вопрос с соответствующим PHP.   -  person Adam Franco    schedule 01.04.2009


Ответы (2)


Трудно сказать, но обычно код результата LDAP (1) указывает на то, что связанный запрос был не в последовательности с другой выполняемой операцией (например, запрос без привязки в середине многоэтапной привязки SASL). Это не означает, что клиент отправил ошибочное сообщение.

Привязаны ли вы к соединению перед выполнением запроса? -Джим

person jwilleke    schedule 07.04.2009

Я не уверен, где именно проблема, в фильтре или выборе атрибутов. Если это выбор атрибуции. Если это фильтр, то я предлагаю вам сейчас отложить выбор атрибута, чтобы изолировать проблему.

Не могли бы вы показать код соответствующего ldap_search(), который вы выполняете?

person Amr Mostafa    schedule 31.03.2009
comment
Я обновил вопрос с соответствующим PHP. Другие фильтры прекрасно работают с этими атрибутами, и использование только массива («почта») или пустого массива для атрибутов не избавляет от результата ошибки, поэтому я уверен, что проблема связана с моим фильтром, а не с соединением или атрибутом набор. - person Adam Franco; 01.04.2009