фильтр ldap для различаемого имени

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

$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 и т. д.

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


person dnagirl    schedule 25.06.2013    source источник


Ответы (3)


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

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

person Terry Gardner    schedule 25.06.2013
comment
в порядке. Затем, учитывая, что единственной ссылкой на менеджера пользователя (насколько мне известно) является атрибут manager, как мне использовать эту информацию для получения записи о пользователе менеджера? - person dnagirl; 25.06.2013
comment
Разве это не найдет всех людей, у которых мой текущий пользователь был менеджером? Я хочу получить менеджера моего текущего пользователя. Извините, если я туплю. - person dnagirl; 25.06.2013
comment
Да, это было бы. Я перечитал ваш вопрос и обновил свой ответ. - person Terry Gardner; 25.06.2013
comment
Привет, я в той же лодке - я могу запросить пользователя по электронной почте, получить его менеджера в результате, затем я хочу получить менеджера их менеджера, но все, что мне нужно работать с первым результатом AD, это CN= McBossy\, Boss,OU=Users,OU=CentralOffice,DC=ds,DC=example,DC=com. Я недостаточно знаю об AD, чтобы использовать этот ответ. Я понимаю, когда вы говорите, что не можете искать по DN, но как мне установить область поиска в BASE? Для начала я использую почти тот же код, что и @dnagirl. - person Brian Ashe; 26.12.2019
comment
@BrianAshe, ldap_search в php — это оболочка для ldapsearch. Чтобы понять варианты, посмотрите здесь: access.redhat.com/documentation/en-US/Red_Hat_Directory_Server/ Вероятно, вас больше всего интересует вариант -b - person dnagirl; 27.12.2019
comment
Полное DN в поисковом фильтре у меня не работало, пока я не экранировал специальные символы (в моем случае скобки) - см. stackoverflow.com/questions/4827263/ - person Peter Thoeny; 24.07.2020

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

$ldap_to_find = ldap_escape($manager_dn, null, LDAP_ESCAPE_FILTER);
$ldap_filter  = "(distinguishedName={$ldap_to_find})";

Из моего тестирования добавление класса или категории не влияет на скорость, вероятно, потому, что DN — это уникальное местоположение, а не реальный атрибут.

person WhoIsRich    schedule 18.09.2020

Я не уверен, что полностью понимаю ваш вопрос. например, если есть запись в LDAP

dn: uid=John Smith,ou=people,dc=example,dc=org
objectClass: inetOrgPerson
cn: John Smith
sn: smith
uid: jsmith
uid: John Smith
mail: [email protected]
ou: accounting

если вы хотите найти запись, dn которой содержит uid=John Smith , cmd будет выглядеть так:

ldapsearch -b dc=example,dc=org -D cn=admin,dc=example,dc=org -LLL '(uid:dn:=John Smith)'

https://confluence.atlassian.com/kb/how-to-write-ldap-search-filters-792496933.html

person sosogh    schedule 20.10.2020