3.3 Работа с модулями

Примеры адаптированы для

Если Вы не собирали OpenLDAP из исходников под свою задачу, вкомпилировав всё необходимое в slapd, то рано или поздно Вы столкнётесь с необходимостью добавить тот или иной динамический модуль. В Ubuntu, например, даже back_bdb и back_hdb собраны модулями. Единственный способ достоверно определить, собран ли модуль статически или динамически (или вообще не был собран) — посмотреть, с какими опциями запускался скрипт configure при сборке slapd. Однако, при установке из двоичного пакета такая информация доступна не всегда. Тем не менее, наличие нужного Вам модуля в директории с модулями slapd (/usr/lib/ldap) наверняка говорит о том, что данный модуль собран динамически и требует подключения способом, описанным ниже. Если же нужного Вам модуля там нет, остаётся лишь надеяться, что он был собран статически и подключения не требует, можно попробовать сразу задействовать функционал, реализуемый этим модулем. Наконец, если модуля нет и при попытке задействовать функционал этого модуля выдаётся ошибка, скорее всего при сборке slapd этот модуль вообще не собирался. В таком случае придётся отказаться от использования двоичного установочного пакета и собирать OpenLDAP из исходников, предусмотрев всё необходимое на этапе сборки.

Далее пойдёт речь о подключении динамических модулей.

Подключение динамических модулей

В cn=config для определения модулей служит специальная запись cn=module{0},cn=config. Она строится на структурном объектном классе olcModuleList, в определении которого присутствует всего 3 атрибута (да и то необязательных): cn, olcModulePath и olcModuleLoad. Но и их вполне хватит для загрузки динамических модулей.

Те модули, которые требуется загрузить, указываются в атрибутах olcModuleLoad. Значением этого атрибута может быть либо указание полного пути к файлу модуля, либо только название файла. Поскольку обычно после сборки OpenLDAP все динамические модули находятся в одной директории файловой системы, вполне резонно для сокращения значений атрибута olcModuleLoad указать путь к этой директории в атрибуте olcModulePath. Этот атрибут может иметь только одно значение (SINGLE-VALUE), поэтому, если Вам по какой-то причине нужно задать несколько путей, их указывают в одном значении атрибута, используя в качестве разделителя двоеточие. Подробнее об атрибутах olcModulePath и olcModuleLoad можно почитать в учебнике LFRS.

Итак, мы собираемся создать базу данных механизма bdb и выяснили, что механизм bdb собран в виде динамического модуля. Для загрузки модуля создадим LDIF-файл /tmp/ldifs/002-add_modules.ldif такого содержания:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: back_bdb.la

Если нужно добавить сразу несколько модулей, просто добавьте атрибуты olcModuleLoad с именами нужных модулей в конец определения данной записи. Применим наш LDIF-файл с помощью команды ldapadd:

# ldapadd -x -D 'cn=config' -W -f /tmp/ldifs/002-add_modules.ldif
Enter LDAP Password: 
adding new entry "cn=module,cn=config"

OpenLDAP добавит к RDN данной записи индекс {0}, а также добавит соответствующие индексы к атрибутам olcModuleLoad. В итоге наша запись будет выглядеть так:

# ldapsearch -x -LLL -D 'cn=config' -W -b 'cn=config' '(objectClass=olcModuleList)'
Enter LDAP Password: 

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_bdb.la

Добавление других динамических модулей

Мы создали запись cn=module{0},cn=config и загрузили один (или несколько) модулей. Но что делать, если в процессе работы нам понадобилось загрузить еще один (или несколько) модулей? Нет ничего проще! Нужно лишь добавить их имена в виде атрибутов olcModuleLoad к нашей записи cn=module{0},cn=config.

Проиллюстрируем добавление модуля на примере динамического модуля наложения ppolicy. Создадим LDIF-файл /tmp/ldifs/101-ppolicy_add_module.ldif такого содержания:

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy.la

Применим его с помощью команды ldapmodify:

# ldapmodify -x -D 'cn=config' -W -f /tmp/ldifs/101-ppolicy_add_module.ldif
Enter LDAP Password: 
modifying entry "cn=module{0},cn=config"

Посмотрим, что у нас получилось:

# ldapsearch -x -LLL -D 'cn=config' -W -b 'cn=config' '(cn=module{0})'
Enter LDAP Password: 

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_bdb.la
olcModuleLoad: {1}ppolicy.la

Новое значение атрибута olcModuleLoad добавилось в конец списка значений и получило индекс {1}, хотя в данном случае порядковый номер не имеет практического значения, поскольку порядок загрузки динамических модулей не важен.

Что ж, модули мы загрузили, теперь можно создать пользовательскую базу данных.

Pro-LDAP.ru 2013 г. Последнее изменение страницы — 12 января 2013 г. Вопросы и предложения принимаются на форуме проекта.