Определение LDAP Data Interchange Format
Формат LDIF используется для выражения информации каталога или описания набора изменений, производимых над записями каталога. Файл LDIF состоит из серий записей, отделённых друг от друга строками-разделителями. Запись файла состоит из последовательности строк, описывающих запись каталога, или последовательности строк, описывающих набор изменений записи каталога. Файл LDIF определяет набор записей каталога или набор изменений, применяемых к записям каталога, но не то и другое сразу.
Существует однозначное соответствие между операциями LDAP модификации каталога (add, delete, modify и modrdn) и типами описанных ниже записей изменений changerecord ("add", "delete", "modify" и "modrdn" (или "moddn")). Это соответствие является преднамеренным и позволяет вызывать операции протокола простой трансляцией записей changerecord файла LDIF.
Формальный синтаксис определения LDIF
Приведённое ниже определение использует расширенную форму Бэкуса-Наура, определённую в RFC 2234 [2].
ldif-file = ldif-content / ldif-changes ldif-content = version-spec 1*(1*SEP ldif-attrval-record) ldif-changes = version-spec 1*(1*SEP ldif-change-record) ldif-attrval-record = dn-spec SEP 1*attrval-spec ldif-change-record = dn-spec SEP *control changerecord version-spec = "version:" FILL version-number version-number = 1*DIGIT ; version-number должен (MUST) быть "1" для ; формата LDIF, описанного в этом документе. dn-spec = "dn:" (FILL distinguishedName / ":" FILL base64-distinguishedName) distinguishedName = SAFE-STRING ; отличительное имя, как определено в [3] base64-distinguishedName = BASE64-UTF8-STRING ; distinguishedName, закодированное base64 ; (смотрите примечание 10 ниже) rdn = SAFE-STRING ; относительное отличительное имя, определённое как ; <name-component> в [3] base64-rdn = BASE64-UTF8-STRING ; rdn, закодированное base64 ; (смотрите примечание 10 ниже) control = "control:" FILL ldap-oid ; controlType 0*1(1*SPACE ("true" / "false")) ; criticality 0*1(value-spec) ; controlValue SEP ; (смотрите примечание 9 ниже) ldap-oid = 1*DIGIT 0*1("." 1*DIGIT) ; LDAPOID, как определено в [4] attrval-spec = AttributeDescription value-spec SEP value-spec = ":" ( FILL 0*1(SAFE-STRING) / ":" FILL (BASE64-STRING) / "<" FILL url) ; Смотрите примечания 7 и 8 ниже url = <a Uniform Resource Locator, как определено в [6]> ; (смотрите примечание 6 ниже) AttributeDescription = AttributeType [";" options] ; Определение взято из [4] AttributeType = ldap-oid / (ALPHA *(attr-type-chars)) options = option / (option ";" options) option = 1*opt-char attr-type-chars = ALPHA / DIGIT / "-" opt-char = attr-type-chars changerecord = "changetype:" FILL (change-add / change-delete / change-modify / change-moddn) change-add = "add" SEP 1*attrval-spec change-delete = "delete" SEP change-moddn = ("modrdn" / "moddn") SEP "newrdn:" ( FILL rdn / ":" FILL base64-rdn) SEP "deleteoldrdn:" FILL ("0" / "1") SEP 0*1("newsuperior:" ( FILL distinguishedName / ":" FILL base64-distinguishedName) SEP) change-modify = "modify" SEP *mod-spec mod-spec = ("add:" / "delete:" / "replace:") FILL AttributeDescription SEP *attrval-spec "-" SEP SPACE = %x20 ; ASCII SP, space FILL = *SPACE SEP = (CR LF / LF) CR = %x0D ; ASCII CR, carriage return LF = %x0A ; ASCII LF, line feed ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9 UTF8-1 = %x80-BF UTF8-2 = %xC0-DF UTF8-1 UTF8-3 = %xE0-EF 2UTF8-1 UTF8-4 = %xF0-F7 3UTF8-1 UTF8-5 = %xF8-FB 4UTF8-1 UTF8-6 = %xFC-FD 5UTF8-1 SAFE-CHAR = %x01-09 / %x0B-0C / %x0E-7F ; любое значение <= 127 (десятичное), за исключением ; NUL, LF и CR SAFE-INIT-CHAR = %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B / %x3D-7F ; любое значение <= 127, за исключением NUL, LF, CR, ; SPACE, двоеточие (":", ASCII 58 десятичное) ; и знак меньше ("<", ASCII 60 десятичное) SAFE-STRING = [SAFE-INIT-CHAR *SAFE-CHAR] UTF8-CHAR = SAFE-CHAR / UTF8-2 / UTF8-3 / UTF8-4 / UTF8-5 / UTF8-6 UTF8-STRING = *UTF8-CHAR BASE64-UTF8-STRING = BASE64-STRING ; должна (MUST) быть UTF8-STRING, ; закодированная base64 BASE64-CHAR = %x2B / %x2F / %x30-39 / %x3D / %x41-5A / %x61-7A ; +, /, 0-9, =, A-Z, and a-z ; как определно в [5] BASE64-STRING = [*(BASE64-CHAR)]