2009-03-31 1 views
2

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

спользование LDAP browser Я могу успешно запустить поиск по моей полной области:

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. Однако это все равно потребует двух запросов.

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

+0

Пожалуйста, разместите соответствующий фрагмент кода. –

+0

Я обновил вопрос с помощью соответствующего PHP. –

ответ

0

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

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

+0

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

2

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

Вы связались с соединением перед выполнением запроса? -jim

Смежные вопросы