slapd-shell - механизм манипуляции данными для slapd shell
/usr/local/etc/openldap/slapd.conf
Механизм манипуляции данными для slapd(8) shell выполняет внешние программы для реализации операций. Он предназначен для упрощения привязки существующих баз данных к внешнему интерфейсу slapd.
Этот механизм манипуляции данными главным образом предназначен для использования в прототипах.
Shell-команда abandon была удалена в OpenLDAP 2.1.
Приведённые ниже директивы slapd.conf применяются к базам данных механизма манипуляции данными SHELL. То есть, они должны следовать за строкой "database shell" и находиться до последующих строк "backend" или "database". Другие относящиеся к базам данных директивы описаны в man-странице slapd.conf(5).
Данные директивы определяют путь и аргументы для программы, которая будет выполняться и выдавать ответ при вызове указанной операции LDAP. За каждой директивой следуют строки, которые заданная программа будет получать на стандартный ввод:
ADD
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
<запись в формате LDIF>
BIND
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
method: <номер метода>
credlen: <длина <учётных данных>>
cred: <учётные данные>
COMPARE
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
<атрибут>: <значение>
DELETE
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
MODIFY
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
<повторение {
<"add"/"delete"/"replace">: <атрибут>
<повторение { <атрибут>: <значение> }>
-
}>
MODRDN
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
newrdn: <новое RDN>
deleteoldrdn: <0 или 1>
<если указана новая вышестоящая запись: "newSuperior: <DN>">
SEARCH
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
base: <базовое DN>
scope: <0-2, смотрите ldap.h>
deref: <0-3, смотрите ldap.h>
sizelimit: <ограничение по размеру>
timelimit: <ограничение по времени>
filter: <фильтр>
attrsonly: <0 или 1>
attrs: <"all" или разделённый пробелами список атрибутов>
UNBIND
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN, от имени которого выполнено подсоединение>
Обратите внимание, что необходимо задать конфигурацию лишь для команд тех операций, обработка которых требуется от данного механизма манипуляции данными. Операции, для которых не указана команда, будут отклонены с выдачей ошибки "unwilling to perform".
Команда search должна выдавать записи в формате LDIF, за каждой из которых следует пустая строка, а затем указанное ниже сообщение RESULT.
Все эти команды, - за исключением unbind, - должны выдавать:
RESULT code: <целое число> matched: <совпавшее DN> info: <текст>
(обязательна только строка RESULT). Строки, начинающиеся с `#' или `DEBUG:' игнорируются.
Механизм манипуляции данными shell не соблюдает все семантики ACL, описанные в man-странице slapd.access(5). В общем случае, доступ к объектам проверяется с использованием фиктивного объекта, который содержит только DN, поэтому правила доступа, основанные на анализе содержимого объекта, не выполняются. В частности:
Для операции add не требуется иметь доступ write (=w) к псевдо-атрибуту children родительской записи.
Для операции bind требуется доступ auth (=x) к псевдо-атрибуту entry той записи, идентификационная сущность которой оценивается; доступ auth (=x) к удостоверяющим данным не проверяется, а делегируется shell-скрипту, обрабатывающему запросы.
Для операции compare требуется доступ read (=r) (ПОПРАВЬТЕ МЕНЯ: может быть, более подходящий вариант compare (=c) ?) к псевдо-атрибуту entry того объекта, в котором находится значение, подвергающееся сравнению; доступ compare (=c) к атрибуту, значение которого подвергается сравнению, не проверяется.
Для операции delete не требуется иметь доступ write (=w) к псевдо-атрибуту children родительской записи.
Для операции modify требуется доступ write (=w) к псевдо-атрибуту entry; доступ write (=w) к конкретным атрибутам, которые подвергаются модификации, не проверяется.
Для операции modrdn не требуется иметь доступ write (=w) к псевдо-атрибутам children как текущей, так и новой родительской записи, если они различны; доступ write (=w) к отличительным значениям атрибутов именования не проверяется.
Для операции search не требуется иметь доступ search (=s) к псевдо-атрибуту entry базовой записи поиска; доступ search (=s) к атрибутам и значениям, используемым в поисковых фильтрах, не проверяется.
Пример скрипта с выполнением поиска находится в директории slapd/back-shell/ дерева исходных кодов OpenLDAP.
Механизм манипуляции данными shell не поддерживает потокового окружения. При использовании механизма shell, slapd(8) должен быть собран с опцией --without-threads.
конфигурационный файл slapd по умолчанию.
slapd.conf(5), slapd(8), sh(1).
OpenLDAP 2.4.47 | SLAPD-SHELL(5) | 2018/12/19 |