5.1 Общие сведения о LDIF

LDIF является широко используемым форматом, описывающим информацию Каталога или операции изменения, которые можно выполнить в Каталоге. LDIF - это формат, полностью независимый от формата хранения данных любой конкретной реализации Каталога, он обычно используется для экспорта информации из Каталога и для импорта данных на серверы LDAP.

Как правило, файл LDIF создается без каких-либо сложностей. Это дает возможность использовать для переноса данных из собственного формата в Каталог LDAP такие средства, как awk или perl. Вы также можете разрабатывать процедуры для создания тестовых данных в формате LDIF.

5.1.1 Формат файлов LDIF

NetIQ Import Conversion Export импортирует необходимые отформатированные файлы LDIF 1. Ниже перечислены основные правила для файла LDIF 1.

  • В первой строке, не являющейся комментарием, должен быть указан номер версии: 1.

  • После строки с версией следует одна или несколько записей.

  • Каждая запись состоит из полей, по одному полю на строку.

  • Строки отделяются друг от друга либо символом новой строки, либо комбинацией символов новой строки и возврата каретки.

  • Записи отделяются друг от друга одной или несколькими пустыми строками.

  • Существуют два отличных друг от друга типа записей LDIF: записи содержимого и записи изменения. Файл LDIF может содержать неограниченное количество записей, но они все должны быть одного типа. Нельзя включать записи данных и записи изменения в один файл LDIF.

  • Любая запись, начинающаяся символом (#), считается комментарием и игнорируется при выполнении файла LDIF.

5.1.2 Записи данных 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 должен быть представлен в одной из следующих двух форм:

  • dn: характерное_имя_в_защищенном_формате_UTF-8

  • dn:: характерное_имя_закодированное_в_Base64

Разделители строк

Разделителем строк может быть либо перевод строки, либо комбинация символов перевода строки и возврата каретки. Такой подход решает общую проблему несовместимости текстовых файлов Linux и Solaris, использующими в качестве разделителя строк символ новой строки, и текстовых файлов MS-DOS и Windows, использующими в качестве разделителя строк комбинацию символов новой строки и возврата каретки.

Разделители записей

Для разделения записей используются пустые строки (строки 5, 10, 15 и 26 приведенного выше примера).

Каждая запись файла LDIF, включая последнюю, должна заканчиваться пустыми строками (одной или более). Не смотря на то, что в некоторых реализациях работа с файлами LDIF без завершающего разделителя записей не вызывает трудностей, спецификация LDIF требует его наличие.

Спецификатор значения атрибута

Все остальные строки записей данных являются спецификаторами значений. Они могут принимать одну из следующих трех форм:

  • Описание атрибута: значение

  • Описание атрибута:: значение_закодированное_в_Base64

  • Описание атрибута: < URL-адрес

5.1.3 Записи изменений 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 изменения.

Ключевое слово Add

Запись изменения добавления похожа на запись изменения содержимого (см. Записи данных 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

Так как запись изменения "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

Ключевое слово "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

Ключевое слово "modDN" позволяет переименовывать, перемещать элемент или выполнять обе процедуры сразу. Эта операция состоит из двух обязательных полей и одного необязательного.

Поле

Описание

newrdn (обязательное)

В процессе выполнения этой записи элементу присваивается новое имя. Спецификатор "newDN" должен быть представлен в одной из следующих двух форм:

  • newrdn: относительное_характерное_имя_в_защищенном_формате_UTF-8

  • newrdn:: закодированное_относительное_характерное_имя_в_формате_Base64

Спецификатор "newRDN" требуется во всех записях LDIF с ключевым словом ModDN.

deleteoldrdn (обязательное)

Спецификатор "delete old RDN" является флагом, указывающим, нужно ли заменять старое значение RDN (относительное характерное имя) новым или нужно его сохранить. Он может принимать одну из двух форм:

  • deleteoldrdn: 0

    Означает, что старое значение RDN должно быть сохранено после переименования.

  • deleteoldrdn: 1

    Означает, что старое значение RDN должно быть удалено после переименования элемента.

newsuperior (необязательное)

Спецификатор "newsuperior" указывает имя нового родительского объекта, который будет назначен элементу в процессе выполнения записи изменения характерного имени (ключевое слово moddn). Спецификатор "newsuperior" должен быть представлен в одной из следующих двух форм:

  • newsuperior: характерное_имя_в_защищенном_формате_UTF-8

  • newsuperior:: закодированное_характерное_имя_в_формате_Base64

Спецификатор "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 произойдет сбой.

5.1.4 Перенос строк в файлах LDIF

Чтобы перенести строку в файле 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

5.1.5 Представление хэшированного пароля в файлах LDIF

Хэшированный пароль представлен как данные base64 в файле LDIF. После имени атрибута userpassword необходимо указать имя шифрования, используемого для хэширования пароля. Это имя должно быть заключено в фигурные скобки “{ }”, как показано ниже.

Пример 1

Для паролей, хэшированных 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

Пример 2

Для паролей, хэшированных 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

Пример 3

Для паролей, хэшированных 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