LDIF является широко используемым форматом, описывающим информацию Каталога или операции изменения, которые можно выполнить в Каталоге. LDIF - это формат, полностью независимый от формата хранения данных любой конкретной реализации Каталога, он обычно используется для экспорта информации из Каталога и для импорта данных на серверы LDAP.
Как правило, файл LDIF создается без каких-либо сложностей. Это дает возможность использовать для переноса данных из собственного формата в Каталог LDAP такие средства, как awk или perl. Вы также можете разрабатывать процедуры для создания тестовых данных в формате LDIF.
NetIQ Import Conversion Export импортирует необходимые отформатированные файлы LDIF 1. Ниже перечислены основные правила для файла LDIF 1.
В первой строке, не являющейся комментарием, должен быть указан номер версии: 1.
После строки с версией следует одна или несколько записей.
Каждая запись состоит из полей, по одному полю на строку.
Строки отделяются друг от друга либо символом новой строки, либо комбинацией символов новой строки и возврата каретки.
Записи отделяются друг от друга одной или несколькими пустыми строками.
Существуют два отличных друг от друга типа записей LDIF: записи содержимого и записи изменения. Файл LDIF может содержать неограниченное количество записей, но они все должны быть одного типа. Нельзя включать записи данных и записи изменения в один файл LDIF.
Любая запись, начинающаяся символом (#), считается комментарием и игнорируется при выполнении файла LDIF.
Одна запись данных LDIF представляет содержимое целого элемента. В следующем примере приведен файл LDIF с четырьмя записями данных:
1 version: 1 2 dn: c=US 3 objectClass: top 4 objectClass: country 5 6 dn: l=San Francisco, c=US 7 objectClass: top 8 objectClass: locality 9 st: San Francisco 10 11 dn: ou=Artists, l=San Francisco, c=US 12 objectClass: top 13 objectClass: organizationalUnit 14 telephoneNumber: +1 415 555 0000 15 16 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 17 sn: Michaels 18 givenname: Peter 19 objectClass: top 20 objectClass: person 21 objectClass: organizationalPerson 22 objectClass: iNetOrgPerson 23 telephonenumber: +1 415 555 0001 24 mail: Peter.Michaels@aaa.com 25 userpassword: Peter123 26
Этот файл LDIF состоит из следующих частей:
Компонент |
Описание |
---|---|
Спецификатор версии |
Первая запись файла LDIF содержит номер версии. Между двоеточием и номером версии (в данный момент установлен номер, равный 1) допускается любое количество пробелов. Если версия не указана, приложению, обрабатывающему файл LDIF, разрешено использовать версию 0 либо отклонить файл как синтаксически некорректный. Если строка версии отсутствует, то в утилитах NetIQ, которые обрабатывают LDIF, предполагается, что эта версия — 0. |
Спецификатор характерного имени |
Первая строка каждой записи данных (в приведенном выше примере это строки 2, 6, 11 и 16) определяет DN (характерное имя) элемента, который она представляет. Спецификатор DN должен быть представлен в одной из следующих двух форм:
|
Разделители строк |
Разделителем строк может быть либо перевод строки, либо комбинация символов перевода строки и возврата каретки. Такой подход решает общую проблему несовместимости текстовых файлов Linux и Solaris, использующими в качестве разделителя строк символ новой строки, и текстовых файлов MS-DOS и Windows, использующими в качестве разделителя строк комбинацию символов новой строки и возврата каретки. |
Разделители записей |
Для разделения записей используются пустые строки (строки 5, 10, 15 и 26 приведенного выше примера). Каждая запись файла LDIF, включая последнюю, должна заканчиваться пустыми строками (одной или более). Не смотря на то, что в некоторых реализациях работа с файлами LDIF без завершающего разделителя записей не вызывает трудностей, спецификация LDIF требует его наличие. |
Спецификатор значения атрибута |
Все остальные строки записей данных являются спецификаторами значений. Они могут принимать одну из следующих трех форм:
|
Записи изменений LDIF содержат изменения, которые нужно внести в Каталог. Любая из операций изменения LDAP (добавление, удаление, изменение и изменение DN) может быть представлена записью изменения LDIF.
В записях изменения LDIF используется тот же формат спецификаторов характерного имени и атрибута и такие же разделители записей, что и в записях данных LDIF. (См. Записи данных LDIF для получения дополнительной информации.) Присутствие поля changetype является отличительной чертой записей изменений LDIF от записей данных LDIF. В поле changetype указывается операция, выполняемая записью изменения.
Поле changetype может принимать одну из указанных ниже форм.
Форма |
Описание |
---|---|
changetype:add |
Ключевое слово, указывающее, что запись изменений определяет операцию добавления LDAP. |
changetype:delete |
Ключевое слово, указывающее, что запись изменения выполняет операцию LDAP удаления. |
changetype: moddn |
Ключевое слово, указывающее, что запись изменения выполняет операцию LDAP изменения DN (в случае, если для процессора LDIF установлена привязка к серверу LDAP в качестве клиента версии 3) или операцию изменения RDN (в случае, если для процессора LDIF установлена привязка к серверу LDAP в качестве клиента версии 2). |
changetype: modrdn |
Синоним операции moddn. |
changetype:modify |
Ключевое слово, указывающее, что запись изменения выполняет операцию LDAP изменения. |
Запись изменения добавления похожа на запись изменения содержимого (см. Записи данных LDIF) с тем лишь отличием, что поле "changetype: add" добавлено непосредственно перед всеми полями значения атрибута.
Все записи должны быть одного типа. Нельзя использовать записи данных вместе с записями изменения.
1 version: 1 2 dn: c=US 3 changetype: add 4 objectClass: top 5 objectClass: country 6 7 dn: l=San Francisco, c=US 8 changetype: add 9 objectClass: top 10 objectClass: locality 11 st: San Francisco 12 14 dn: ou=Artists, l=San Francisco, c=US 15 changetype: add 16 objectClass: top 17 objectClass: organizationalUnit 18 telephoneNumber: +1 415 555 0000 19 20 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 21 changetype: add 22 sn: Michaels 23 givenname: Peter 24 objectClass: top 25 objectClass: person 26 objectClass: organizationalPerson 27 objectClass: iNetOrgPerson 28 telephonenumber: +1 415 555 0001 29 mail: Peter.Michaels@aaa.com 30 userpassword: Peter123 31
Так как запись изменения "delete" выполняет удаление элемента, для нее требуются только два поля: поле спецификатора характерного имени и поле "changetype" с ключевым словом "delete".
Далее приведен пример файла LDIF, используемого для удаления четырех элементов, созданных с помощью файла LDIF в разделе Ключевое слово Add.
ВАЖНО.Для удаления элементов, созданных ранее, следует использовать их обратный порядок. В противном случае операция удаления не будет выполнена, поскольку записи контейнера не являются пустыми.
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 changetype: delete 4 5 dn: ou=Artists, l=San Francisco, c=US 8 changetype: delete 9 10 dn: l=San Francisco, c=US 11 changetype: delete 12 13 dn: c=US 14 changetype: delete 15
Ключевое слово "modify" позволяет добавлять, удалять и замещать значения атрибутов уже существующего элемента. Изменение может принимать одну из следующих трех форм:
Элемент |
Описание |
---|---|
add: attribute type |
Ключевое слово, указывающее, что к элементу должны быть добавлены перечисленные спецификаторы значений атрибутов для указанного типа атрибута. |
delete: attribute type |
Ключевое слово, указывающее, что значения указанного типа атрибута должны быть удалены. Если вслед за полем "delete" указаны спецификаторы значений атрибутов, заданные значения будут удалены. Если вслед за полем "delete" не указаны спецификаторы значений атрибутов, будут удалены все значения. Если у атрибута нет значений, эта операция завершится неудачно, но результат будет достигнут, так как атрибуты, не имеющие значений, удаляются. |
replace: attribute type |
Ключевое слово, указывающее, что значения указанного типа атрибута должны быть заменены. Любые спецификаторы значений атрибута, указанные вслед за полем "replace", становятся новыми значениями указанного типа атрибута. Если спецификаторы значений атрибутов не указаны, текущий набор значений заменяется пустым набором (что приводит к необходимости удаления атрибута). В отличие от операции удаления, если атрибут не имеет значений, операция изменения пройдет успешно. Результат в обоих случаях будет один и тот же. |
Далее приведен пример типа изменения "modify", в котором в элемент "cn=Peter Michaels" добавляется дополнительный телефонный номер.
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 changetype: modify 4 # add the telephone number to cn=Peter Michaels 4 add: telephonenumber 5 telephonenumber: +1 415 555 0002 6
Различные операции изменения можно объединять в одном запросе LDAP. Также можно указывать несколько спецификаторов операции "modify" в одной записи LDIF. Строка, состоящая только из символа дефиса (-), используется для отметки конца спецификаций значений атрибутов каждого спецификатора изменения.
Следующий пример файла LDIF иллюстрирует использование нескольких спецификаторов в одной операции изменения:
1 version: 1 2 3 # An empty line to demonstrate that one or more 4 # line separators between the version identifier 5 # and the first record is legal. 6 7 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 8 changetype: modify 9 # Add an additional telephone number value. 10 add: telephonenumber 11 telephonenumber: +1 415 555 0002 12 - 13 # Delete the entire fascimiletelephonenumber attribute. 14 delete: facsimileTelephoneNumber 15 - 16 # Replace the existing description (if any exists) 17 # with two new values. 18 replace: description 19 description: guitar player 20 description: solo performer 21 - 22 # Delete a specific value from the telephonenumber 23 # attribute. 24 delete: telephonenumber 25 telephonenumber: +1 415 555 0001 26 - 27 # Replace the existing title attribute with an empty 28 # set of values, thereby causing the title attribute to 29 # be removed. 30 replace: title 31 - 32
Ключевое слово "modDN" позволяет переименовывать, перемещать элемент или выполнять обе процедуры сразу. Эта операция состоит из двух обязательных полей и одного необязательного.
Поле |
Описание |
---|---|
newrdn (обязательное) |
В процессе выполнения этой записи элементу присваивается новое имя. Спецификатор "newDN" должен быть представлен в одной из следующих двух форм:
Спецификатор "newRDN" требуется во всех записях LDIF с ключевым словом ModDN. |
deleteoldrdn (обязательное) |
Спецификатор "delete old RDN" является флагом, указывающим, нужно ли заменять старое значение RDN (относительное характерное имя) новым или нужно его сохранить. Он может принимать одну из двух форм:
|
newsuperior (необязательное) |
Спецификатор "newsuperior" указывает имя нового родительского объекта, который будет назначен элементу в процессе выполнения записи изменения характерного имени (ключевое слово moddn). Спецификатор "newsuperior" должен быть представлен в одной из следующих двух форм:
Спецификатор "newsuperior" не обязательно использовать в записях LDIF с процедурой изменения характерного имени. Он предоставляется только в тех случаях, когда элемент нужно перенести из одного родительского объекта в другой. |
Далее приведен пример типа изменения "Modify DN", в котором показано, как переименовывать элемент:
1 version: 1 2 3 # Rename ou=Artists to ou=West Coast Artists, and leave 4 # its old RDN value. 5 dn: ou=Artists,l=San Francisco,c=US 6 changetype: moddn 7 newrdn: ou=West Coast Artists 8 deleteoldrdn: 1 9
Далее приведен пример типа изменения "Modify DN", в котором показано, как переместить элемент:
1 version: 1 2 3 # Move cn=Peter Michaels from 4 # ou=Artists,l=San Francisco,c=US to 5 # ou=Promotion,l=New York,c=US and delete the old RDN. 5 dn: cn=Peter Michaels,ou=Artists,l=San Francisco,c=US 6 changetype: moddn 7 newrdn: cn=Peter Michaels 8 deleteoldrdn: 1 9 newsuperior: ou=Promotion,l=New York,c=US 10
В следующем примере представлен тип изменения "Modify DN" и показано, как перенести и переименовать элемент одновременно:
1 version: 1 2 3 # Move ou=Promotion from l=New York,c=US to 4 # l=San Francisco,c=US and rename it to 5 # ou=National Promotion. 5 dn: ou=Promotion,l=New York,c=US 6 changetype: moddn 7 newrdn: ou=National Promotion 8 deleteoldrdn: 1 9 newsuperior: l=San Francisco,c=US 10
ВАЖНО.Операция изменения RDN протокола LDAP версии 2 не поддерживает перемещение элементов. При попытке переноса элемента с помощью синтаксиса newsuperior LDIF с клиентом LDAP версии 2 произойдет сбой.
Чтобы перенести строку в файле LDIF, достаточно просто вставить разделитель строк (символ новой строки или комбинацию символов перевода каретки и новой строки) и вслед за ним пробел в том месте, где нужно перенести строку. Когда анализатор LDIF обнаруживает пробел в начале строки, он объединяет данные этой строки с данными предыдущей. Пробел в начале отбрасывается.
Не следует разрывать строки в середине символа UTF-8, состоящего из нескольких байт.
Ниже приведен пример файла LDIF с перенесенной (разорванной) строкой (см. строки 13 и 14):
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 givenname: Peter 5 objectClass: top 6 objectClass: person 7 objectClass: organizationalPerson 8 objectClass: iNetOrgPerson 9 telephonenumber: +1 415 555 0001 10 mail: Peter.Michaels@aaa.com 11 userpassword: Peter123 12 description: Peter is one of the most popular music 13 ians recording on our label. He’s a big concert dr 14 aw, and his fans adore him. 15
Хэшированный пароль представлен как данные base64 в файле LDIF. После имени атрибута userpassword необходимо указать имя шифрования, используемого для хэширования пароля. Это имя должно быть заключено в фигурные скобки “{ }”, как показано ниже.
Для паролей, хэшированных SHA:
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SHA}xcbdh46ngh37jsd0naSFDedjAS30dm5 objectclass: inetOrgPerson
Для паролей, хэшированных SSHA:
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SSHA}sGs948DFGkakdfkasdDF34DF4dS3skl5DFS5 objectclass: inetOrgPerson
Для паролей, хэшированных Digest MD5:
1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {MD5}a45lkSDF234SDFG62dsfsf2DG2QEvgdmnk4305 objectclass: inetOrgPerson