SLAPD-SHELL(5)

НАЗВАНИЕ

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 <путь_до_скрипта> <аргументы>...
ADD
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
<запись в формате LDIF>
bind <путь_до_скрипта> <аргументы>...
BIND
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
method: <номер метода>
credlen: <длина <учётных данных>>
cred: <учётные данные>
compare <путь_до_скрипта> <аргументы>...
COMPARE
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
<атрибут>: <значение>
delete <путь_до_скрипта> <аргументы>...
DELETE
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
modify <путь_до_скрипта> <аргументы>...
MODIFY
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
<повторение {
    <"add"/"delete"/"replace">: <атрибут>
    <повторение { <атрибут>: <значение> }>
    -
}>
modrdn <путь_до_скрипта> <аргументы>...
MODRDN
msgid: <идентификатор сообщения>
<повторение { "suffix:" <DN суффикса базы данных> }>
dn: <DN>
newrdn: <новое RDN>
deleteoldrdn: <0 или 1>
<если указана новая вышестоящая запись: "newSuperior: <DN>">
search <путь_до_скрипта> <аргументы>...
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 <путь_до_скрипта> <аргументы>...
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.

ФАЙЛЫ

/usr/local/etc/openldap/slapd.conf

конфигурационный файл slapd по умолчанию.

СМОТРИТЕ ТАКЖЕ

slapd.conf(5), slapd(8), sh(1).

OpenLDAP 2.4.47 SLAPD-SHELL(5) 2018/12/19