@thekip
Php/C#/Js Developer

Active Directory LDAP понять как работает поиск по каталогам?

Вообщем столкнулся со следующей проблемой (непониманием):


Когда мне необходимо выбрать всех юзеров из AD я пишу примерно следующее:

$ldap = Yii::app()->ldap->getLdapConnection();
        $base_dn = 'DC=example,DC=org';
       
        $sr = ldap_search($ldap, $base_dn, '(&(objectClass=user))', array("samaccountname","displayname"));
        $info = ldap_get_entries($ldap, $sr);


И получаю результаты. Обратите внимание, в $base_dn находится корень AD, хотя сами юзеры не лежат в корне, а находятся в CN=Users


Теперь у меня возникает необходимость выбрать все Подсети из AD и если я в качестве BaseDn укажу корень (DC=example,DC=org), то получаю 0 результатов. Если же указать путь полностью (CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=org), то оно начинает работать.

$ldap = Yii::app()->ldap->getLdapConnection();
        $base_dn = 'CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=org';
       
        $sr = ldap_search($ldap, $base_dn, '(&(objectClass=subnet))', array('siteObject', 'cn'));
        $info = ldap_get_entries($ldap, $sr);



Скажите, может я что то упустил? Почему в случае с юзерами он выбирает их всех при указании корня, а для подсетей приходится указывать полный путь?
  • Вопрос задан
  • 6945 просмотров
Решения вопроса 1
Slipeer
@Slipeer
Во-первых: в параметрах поиска вы опускаете один параметр — область поиска (scope). Область поиска по-умолчанию обычно поддерево (SubTree) для заданного basedn.
Во-вторых: следует понимать, что у вас в каталоге AD изначально существует (в типовой конфигурации) 5 разделов. Так вот поиск работает только в пределах одного раздела.
При этом «DC=example,DC=org» — корень раздела домена, а «CN=Configuration,DC=example,DC=org» — корень раздела конфигурации. Поэтому при поиске с basedn = «DC=example,DC=org» и scope = SubTree вы не получите объекты из ветки CN=Configuration,DC=example,DC=org" — они расположены в другом разделе каталога.

P.S. В Вашем конкретном случае стоит воспользоваться тем, что «CN=Subnets,CN=Sites,CN=Configuration» это постоянная составляющая пути и просто при поиске подсетей добавлять её к basedn домена.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sk8er
@Sk8er
Жесток, опасен, вспыльчив. Щеголь.
Извиняюсь, но глаз ужасно режет. Нет слова "Вообщем".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект