Назад | Перейти на главную страницу

просмотреть все возможные атрибуты объектного класса для LDAP

Я пишу сценарий для автоматизации ldap и немного завис. По сути, я хочу проверить, действительно ли атрибут, добавляемый к записи, существует в данном objectClass, прежде чем я попытаюсь его добавить.

Пока что лучшая идея, которая у меня есть для этого, - это просто запустить регулярное выражение в файле определения схемы для атрибута, но это не учитывает файл схемы, редактируемый после инициализации конфигурации.

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

Похоже, для этого должна быть простая команда ldapsearch, но я не могу понять синтаксис.

пока я пробовал:

ldapsearch -x -b 'dc=MY_DOMAIN,dc=com' '(objectclass=mySCHEMA)'

но это просто список всех записей ldap, в которых есть объектный класс mySCHEMA.

Спасибо за помощь, ура!

Вы ищете subschemaSubentry.
RFC 2252 Облегченный протокол доступа к каталогам (v3): определения синтаксиса атрибутов

5.1.5. подсхема

Значением этого атрибута является имя записи подсхемы (или подстатьи, если сервер основан на X.500 (93)), в которой сервер делает доступными атрибуты, определяющие схему.

( 2.5.18.10 NAME 'subschemaSubentry'
  EQUALITY distinguishedNameMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 NO-USER-MODIFICATION
  SINGLE-VALUE USAGE directoryOperation )

Вы можете найти это так:

$ ldapsearch -s base -b '' subschemaSubentry
dn:
subschemaSubentry: cn=Subschema

$ ldapsearch -s base -b cn=Subschema objectClasses

Одной строкой:

ldapsearch -s base -b $(ldapsearch -s base -b '' subschemaSubentry | sed '/dn:/d;/^$/d;s/subschemaSubentry: //' ) objectClasses

Если вы пишете сценарии в bash и ваша версия ldapsearch поддерживает это, -o ldif-wrap=no будет означать, что вам не нужно разбирать перенос строки ldif.


cn=schema,cn=config, хотя и удобен, обычно недоступен в OpenLDAP из-за контроля доступа, унаследованного от cn=config.

Это то, что я использую, чтобы показать схему конкретный objectClass, например organizationalRole

$ ldapsearch -s base -b cn=Subschema objectClasses -LLL -o ldif-wrap=no |\
  sed -nr '/organizationalRole/ p' | sed -r 's/[$()]+/\n /g'

Прошло много времени с тех пор, как я работал с LDAP, но я думаю, что каждый сервер LDAP может предоставлять схему в определенном суффиксе.

Я думаю, что в Openldap вы можете искать в базе «cn = schema, cn = config», чтобы найти текущую схему. Попробуйте что-нибудь вроде ldapsearch -x -s sub -b "cn=schema,cn=config" '(objectclass=*)' чтобы увидеть, что вы получите. (Не тестировал эту командную строку, но вы поняли ...).

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

Я думаю, что изменение схемы должно выполняться не приложением, которое добавляет / удаляет данные, а процедурой установки программного обеспечения.

Простые сценарии оболочки / awk не работают вообще из-за наследования классов объектов. Вы должны оценить это, чтобы действительно узнать заранее, что сервер LDAP будет делать с вашим запросом на добавление / изменение. (По крайней мере, я понимаю, чего вы хотите достичь.)

Если вы не против написания сценариев на Python, вы можете использовать модуль python-ldap ldap.schema который я реализовал для полной поддержки схемы в web2ldap. Помимо наследования классов объектов, он также заботится о правилах содержимого DIT, что очень важно для правильного получения списков атрибутов с помощью MS AD.

Будьте осторожны: реализовать общее решение нетривиально! И в зависимости от используемого сервера LDAP вы обнаружите несколько неполные ссылки на схемы, и вам придется здесь и там реализовывать обработку отката.

Я знаю только точно один Реализация клиента LDAPv3 полный Поддержка схемы LDAP. ;-)

Если вы предпочитаете решение с графическим интерфейсом, загрузите браузер LDAP, например бесплатную кроссплатформенную версию с открытым исходным кодом. JXplorer. После подключения к LDAP он позволяет просматривать (и редактировать) все объекты и их атрибуты.