@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);



Скажите, может я что то упустил? Почему в случае с юзерами он выбирает их всех при указании корня, а для подсетей приходится указывать полный путь?
  • Вопрос задан
  • 7022 просмотра
Решения вопроса 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
Жесток, опасен, вспыльчив. Щеголь.
Извиняюсь, но глаз ужасно режет. Нет слова "Вообщем".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы