Как получить только самый специфический объектный класс с сервера AD, используя openLdap? - PullRequest
1 голос
/ 04 декабря 2011

При использовании ldap_search для получения пользователей с рекламного сервера я получаю за каждую запись несколько objectClass es.

Меня интересует только самое конкретное objectClass в иерархии классов. Как мне это получить?

например: для записи

name: user1
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user

Хочу получить только «пользователя» objectClass.

Я заметил, что в программном ldap_search самый последний класс возвращается в последнюю ячейку массива значений, которая возвращается из вызова функции ldap_get_values(ld, entry, "objectClass"). Это случайно или это определенное поведение? (другими словами, могу ли я полагаться на это, чтобы всегда быть правдой?)

Спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Конечно, вы не можете рассчитывать на заказ наследства.Решение для вас состоит в том, чтобы указать атрибут objectClass в вашем поисковом фильтре ldap и скрестить с objectCategory, например, чтобы исключить компьютеры.

(&(objectClass=user)(objectCategory=person))

вы получите здесь все объекты классаuser и inetOrgPerson (они также user).

(&(objectClass=inetOrgPerson)(objectCategory=person))

вы получите здесь все объекты класса inetOrgPerson (но не те, которые уникально user).

0 голосов
/ 08 декабря 2011

Для универсального подхода нельзя полагаться на порядок значений objectClass, поскольку он не гарантируется стандартом и поскольку объектный класс может быть получен из двух или более прямых суперклассов (множественное наследование).

Чтобы получить экземпляр класса objetcclassобычно требуется информация о схеме и дополнительный код для анализа цепочки классов объектов.

Сказав, что я должен также сказать, что я видел код, который в случае Active Directory просто полагается на порядок значений objectClass.Active Directory не поддерживает множественное наследование и, похоже, всегда возвращает objectClass в порядке или наследовании.Этот подход гораздо проще реализовать, но не на 100% надежен.

0 голосов
/ 04 декабря 2011

Я не знаю, что вы можете рассчитывать на любой заказ наследования, возвращающийся из каталога.Насколько я знаю, результаты каталогов никогда не гарантируются в определенном порядке.Скорее всего, вернуть значения в том порядке, в котором они были указаны при добавлении.Objectclass может быть особым случаем, и он будет указан в RFC.Еще одна вещь, на которую вам следует обратить внимание - это когда объект имеет вспомогательный класс, который смешан с ним.Кроме того, этот вспомогательный класс может принести некоторые другие родительские классы.Вы можете запросить схему каталога, определить из нее структуру наследования и сохранить ее, если вы делаете все это из своей собственной программы.

...