3.3 Робота з модулями
Якщо Ви не збирали OpenLDAP з вихідних під своє завдання, вкомпілювавши все необхідне в slapd , то рано чи пізно Ви зіткнетеся з необхідністю додати той чи інший динамічний модуль. У Ubuntu, наприклад, навіть back_mdb зібрано у вигляді такого модуля. Єдиний спосіб достовірно визначити, чи зібрано модуль статично або динамічно (або взагалі не було зібрано) - подивитися, з якими опціями запускався скрипт configure при складанні slapd. Однак при установці з двійкового пакета така інформація доступна не завжди. Тим не менш, наявність потрібного Вам модуля в директорії з модулями slapd ( /usr/lib/ldap /usr/lib/openldap/openldap ), напевно, говорить про те, що даний модуль зібраний динамічно і вимагає підключення способом, описаним нижче. Якщо ж потрібного Вам модуля там немає, залишається сподіватися, що він був зібраний статично і підключення не вимагає, можна спробувати відразу задіяти функціонал, що реалізується цим модулем. Нарешті, якщо модуля немає і при спробі задіяти функціонал цього модуля видається помилка, швидше за все, при складанні slapd цей модуль взагалі не збирався. У такому випадку доведеться відмовитися від використання двійкового інсталяційного пакета і збирати OpenLDAP з вихідних джерел, передбачивши все необхідне на етапі збирання.
Далі йтиметься про підключення динамічних модулів.
Підключення динамічних модулів
У cn=config визначення модулів служить спеціальна запис cn=module,cn=config . Вона будується на структурному об'єктному класі olcModuleList , у визначенні якого є всього 3 атрибути (та й то необов'язкових): cn , olcModulePath і olcModuleLoad . Але їх цілком вистачить для завантаження динамічних модулів.
Отже, ми збираємося створити базу даних механізму MDB і з'ясували, що механізм MDB зібраний ву вигляді динамічного модуля. Для завантаження модуля створимо LDIF-файл /tmp/ldifs/002-add_modules.ldif такого змісту:
Якщо потрібно додати відразу кілька модулів, просто додайте атрибути olcModuleLoad з іменами потрібних модулів на кінець визначення цього запису. Застосуємо наш LDIF-файл за допомогою команди ldapadd:
OpenLDAP додасть до RDN цього запису індекс, а також додасть відповідні індекси до атрибутів olcModuleLoad. У результаті наш запис виглядатиме так:
Додавання інших динамічних модулів
Ми створили запис cn=module,cn=config та завантажили один (або декілька) модулів. Але що робити, якщо в процесі роботи нам потрібно завантажити ще один (або кілька) модулів? Немає нічого простішого! Потрібно лише додати їх імена як атрибутів olcModuleLoad до нашого запису cn=module,cn=config .
Проілюструємо додавання модуля з прикладу динамічного модуля накладання ppolicy. Створимо LDIF-файл /tmp/ldifs/101-ppolicy_add_module.ldif такого змісту:
Застосуємо його за допомогою команди ldapmodify:
Подивимося, що в нас вийшло:
Нове значення атрибуту olcModuleLoad додалося до кінця списку значень і отримало індекс , хоча в даному випадку порядковий номер не має практичного значення, оскільки порядок завантаження динамічних модулів не важливий.
Що ж, модулі ми завантажили, тепер можна створити користувальницьку базу даних.