ldif - Формат обмена данными LDAP.
Формат обмена данными LDAP (LDAP Data Interchange Format, LDIF) используется для представления сведений о записях LDAP и сведений об изменениях каталога LDAP в текстовой форме. С LDIF работают инструменты LDAP: ldapadd(1) принимает на вход, а ldapsearch (1) выводит LDIF-сведения о записях, ldapmodify(1) принимает на вход LDIF-сведения об изменениях.
В этой man-странице приведено описание основных моментов LDIF. Формальная спецификация LDIF дана в RFC 2849.
LDIF-сведения о записях используются для представления записей каталога. Общая форма сведений о записи:
dn: <distinguished name>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>
<attrdesc>:: <base64-encoded-value>
<attrdesc>:< <URL>
...
Значение атрибута может быть указано как текст UTF-8, либо как данные, закодированные в base64, либо для указания места расположения значения атрибута может быть предоставлен URI.
Строка может быть продолжена путём помещения в начало следующей строки одного символа пробела или табуляции, например:
dn: cn=Barbara J Jensen,dc=exam
ple,dc=com
Строки, начинающиеся с символа решётки ('#'), игнорируются.
Несколько значений одного атрибута указываются в отдельных строках, например:
cn: Barbara J Jensen
cn: Babs Jensen
Если значение атрибута содержит непечатный символ, или начинается с пробела или двоеточия ':', за полем <attrtype> следуют двойное двоеточие и значение, закодированное в нотации base64. Например, значение " begins with a space" будет закодировано так:
cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=
Если значение атрибута располагается в файле, за полем <attrtype> следуют знаки ':<' и URI со схемой file:. Например, значение, содержащееся в файле /tmp/value, будет указано так:
cn:< file:///tmp/value
Могут также поддерживаться другие схемы URI (ftp, http).
Несколько записей в одном файле LDIF отделяются друг от друга пустыми строками.
Вот пример LDIF-файла, содержащего три записи:
dn: cn=Barbara J Jensen,dc=example,dc=com
cn: Barbara J Jensen
cn: Babs Jensen
objectclass: person
description:< file:///tmp/babs
sn: Jensen
dn: cn=Bjorn J Jensen,dc=example,dc=com
cn: Bjorn J Jensen
cn: Bjorn Jensen
objectclass: person
sn: Jensen
dn: cn=Jennifer J Jensen,dc=example,dc=com
cn: Jennifer J Jensen
cn: Jennifer Jensen
objectclass: person
sn: Jensen
jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG
...
Обратите внимание, что значение атрибута description записи Barbara Jensen считывается из file:///tmp/babs, а значение атрибута jpegPhoto записи Jennifer Jensen закодировано с использованием base64.
LDIF-сведения об изменениях используются для представления запросов на изменение каталога. Каждое сведение об изменении начинается со строки, указывающей уникальное имя изменяемой записи:
dn: <distinguishedname>
changetype: <[modify|add|delete|modrdn]>
Наконец, даётся собственно информация об изменении, формат которой зависит от того, какого рода изменение указано выше. Для changetype modify форматом будет один или несколько из приведённых далее фрагментов:
add: <attributetype>
<attrdesc>: <value1>
<attrdesc>: <value2>
...
-
Либо, для модификации replace:
replace: <attributetype>
<attrdesc>: <value1>
<attrdesc>: <value2>
...
-
Если строки со значениями атрибута для замещения не заданы, будут удалены все значения атрибута attributetype (при его наличии в записи).
Либо, для модификации delete:
delete: <attributetype>
<attrdesc>: <value1>
<attrdesc>: <value2>
...
-
Если строки со значениями атрибута для удаления не заданы, будут удалены все значения атрибута attributetype.
Фомат для changetype add:
<attrdesc1>: <value1>
<attrdesc1>: <value2>
...
<attrdescN>: <value1>
<attrdescN>: <value2>
Формат для changetype modrdn или moddn:
newrdn: <newrdn>
deleteoldrdn: 0 | 1
newsuperior: <DN>
Здесь значение 1 в строке deleteoldrdn указывает, что значения атрибутов, формировавшие прежний rdn, должны быть удалены из записи, а значение 0 - что эти значения должны быть оставлены в записи в качестве неотличительных значений атрибутов. Строка newsuperior является опциональной. Если она задана, в ней указывается новая вышестоящая запись, к которой будет перемещена изменяемая запись.
Для changetype delete никакой дополнительной информации указывать не требуется.
Имейте ввиду, что значения атрибутов могут быть представлены в закодированном в base64 виде, либо взяты из файлов, так же, как и в сведениях о записях. Строки в сведениях об изменениях могут быть разбиты на несколько по тем же правилам, что и в сведениях о записях.
В следующем LDIF-файле присутствуют сведения об изменениях каждого типа:
dn: cn=Babs Jensen,dc=example,dc=com
changetype: add
objectclass: person
objectclass: extensibleObject
cn: babs
cn: babs jensen
sn: jensen
dn: cn=Babs Jensen,dc=example,dc=com
changetype: modify
add: givenName
givenName: Barbara
givenName: babs
-
replace: description
description: the fabulous babs
-
delete: sn
sn: jensen
-
dn: cn=Babs Jensen,dc=example,dc=com
changetype: modrdn
newrdn: cn=Barbara J Jensen
deleteoldrdn: 0
newsuperior: ou=People,dc=example,dc=com
dn: cn=Barbara J Jensen,ou=People,dc=example,dc=com
changetype: delete
Разборщик LDIF был расширен: добавлена поддержка выражения include для ссылки на другие файлы LDIF. Выражение include должно отделяться от других сведений пустой строкой. Файл, на который делается ссылка, указывается с использованием URI со схемой file:. Всё содержимое данного файла встраивается в оригинальный файл, как если бы оно было его составной частью. Также могут поддерживаться URI с другими схемами. Пример:
dn: dc=example,dc=com
objectclass: domain
dc: example
include: file:///tmp/example.com.ldif
dn: dc=example,dc=org
objectclass: domain
dc: example
Данный функционал не является составной частью спецификации LDIF, данной в RFC 2849, однако ожидается, что он появится в будущих версиях этой спецификации. Он поддерживается командами ldapadd(1), ldapmodify(1) и slapadd(8).
ldap(3), ldapsearch(1), ldapadd(1), ldapmodify(1), slapadd(8), slapcat(8), slapd-ldif(5).
"Формат обмена данными LDAP", Good, G., RFC 2849.
Программное обеспечение OpenLDAP разработано и поддерживается проектом OpenLDAP <http://www.openldap.org/>. Программное обеспечение OpenLDAP является производным от релиза 3.3 LDAP Мичиганского Университета.
OpenLDAP 2.4.47 | LDIF(5) | 2018/12/19 |