Задать вопрос
@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);



Скажите, может я что то упустил? Почему в случае с юзерами он выбирает их всех при указании корня, а для подсетей приходится указывать полный путь?
  • Вопрос задан
  • 7090 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Жесток, опасен, вспыльчив. Щеголь.
Извиняюсь, но глаз ужасно режет. Нет слова "Вообщем".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽