Каков наилучший способ выбора атрибутов для всех членов группы AD LDAP из PHP? - PullRequest
2 голосов
/ 31 марта 2009

Мне нужно выбрать количество атрибутов для всех пользователей в определенной группе из приложения 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 в поле 'member' группы, а затем создать длинный запрос OR для каждого члена dn. Однако это все равно будет связано с двумя запросами.

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

Ответы [ 2 ]

2 голосов
/ 07 апреля 2009

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

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

0 голосов
/ 31 марта 2009

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

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

...