2013-06-25 4 views
4

Я успешно запрашивая наш Active Directory для пользователя с помощью следующего кода:LDAP фильтр для DistinguishedName

$filter = (&(objectCategory=person)(samaccountname=someusername)); 
$fields = array("samaccountname","mail","manager","department","displayname","objectGUID"); 

$user = ldap_search($ldapconnection, $baseDn, $filter, $fields); 

Полученный массив дает это значение для атрибута manager:

CN=McBossy\, Boss,OU=Users,OU=CentralOffice,DC=ds,DC=example,DC=com 

Это выглядит выдающееся имя мне. Но когда я пытаюсь запросить записи менеджера,

$filter = (&(objectCategory=person)(dn='CN=McBossy\, Boss,OU=Users,OU=CentralOffice,DC=ds,DC=example,DC=com')); 

$manager = ldap_search($ldapconnection, $baseDn, $filter, $fields); 

запрос завершается с PHP Warning: ldap_search(): Search: Bad search filter

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

Что я делаю неправильно и как правильно выбрать запись менеджера?

ответ

7

dn не является атрибутом. В фильтрах могут использоваться только типы атрибутов, OID и имена.

Когда вы получаете атрибут manager, чтобы получить атрибуты для DN, являющегося менеджером, используйте значение атрибута manager в качестве базового объекта в запросе на поиск. Задайте область поиска для BASE, фильтр либо (&), либо (objectClass=*) и запросить необходимые атрибуты. Затем передайте запрос поиска на сервер и интерпретируйте ответ.

+0

ok. Затем, учитывая, что единственная ссылка на менеджер пользователя (насколько мне известно) является атрибутом 'manager', как я могу использовать эту информацию для получения пользовательской записи менеджера? – dnagirl

+0

Используйте фильтр: '(manager = cn = user, dc = example, dc = com)' –

+0

Не нашел бы всех людей, у которых был мой текущий пользователь в качестве менеджера? Я хочу получить менеджера моего текущего пользователя. Извините, если я толстый. – dnagirl