Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
26 septembre 2013

LDAP Lightweight Directory Access Protocol           Standards LDAP


rfc2849

rfc2849

LDAP Data Interchange Format

Définition de la syntaxe formelle:
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 be "1" for the LDIF format described in this document.
dn-spec = "dn:" (FILL distinguishedName / ":" FILL base64-distinguishedName)
distinguishedName = SAFE-STRING ; a distinguished name
base64-distinguishedName = BASE64-UTF8-STRING ; a distinguishedName which has been base64 encoded
rdn = SAFE-STRING a relative distinguished name
base64-rdn = BASE64-UTF8-STRING an rdn which has been base64 encoded
control = "control:" FILL ldap-oid ; controlType
    0*1(1*SPACE ("true" / "false")) ; criticality
    0*1(value-spec) ; controlValue
    SEP
ldap-oid = 1*DIGIT 0*1("." 1*DIGIT) An LDAPOID
attrval-spec = AttributeDescription value-spec SEP
value-spec = ":" ( FILL 0*1(SAFE-STRING) /
    ":" FILL (BASE64-STRING) /
    "‹" FILL url)
url = ‹a Uniform Resource Locator
AttributeDescription = AttributeType [" ;" options]
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 ; any value ‹= 127 decimal except NUL, LF, and CR
SAFE-INIT-CHAR = %x01-09 / %x0B-0C / %x0E-1F /
    %x21-39 / %x3B / %x3D-7F
    ; any value ‹= 127 except NUL, LF, CR,
    ; SPACE, colon (":", ASCII 58 decimal)
    ; and less-than ("‹" , ASCII 60 decimal)
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 be the base64 encoding of a UTF8-STRING
BASE64-CHAR = %x2B / %x2F / %x30-39 / %x3D / %x41-5A / %x61-7A ; +, /, 0-9, =, A-Z, and a-z
BASE64-STRING = [*(BASE64-CHAR)]

Notes sur la syntaxe LDIF

1 - Pour la version décrite dans ce document, la version est 1.
2 - toute ligne non vide, y compris les commentaires peuvent être coupé en insérant un SEP et un SPACE. Il ne doit pas se produire avant le premier caractère de la ligne.
3 - toute ligne qui commence par '#' est un commentaire et est ignoré.
4 - Tout dn ou rdn qui contient des caractères autre que ceux de SAFE-UTF8-CHAR, ou commençant avec un caractère autre que SAFE-INIT-UTF8-CHAR, doivent être encodé en base64.
5 - Quand une valeur d'attribut vide doit être inclus dans le fichier LDIF, elle doit être représenté comme attributeDescription ":" FILL SEP. 'ex: "seeAlseo:" suivie d'une nouvelle ligne)
6 - Quand une URL est spécifiée dans un attrval-spec, les conventions suivantes s'appliquent:

        -a- Les implémentations devraient supporter le format d'url file://
        -b- les implémentations peuvent supporter d'autre formats d'URL

7 - les DN, DN et valeurs d'attributs de syntaxe DirectoryString doivent être des chaîne UTF8 valides.
8 - Les valeurs ou DN qui se terminent avec SPACE devraient être encodée en base64.
9 - Quand les contrôles sont inclus dans un fichier LDIF, les implémentations peuvent choisir d'ignorer certains d'entre-eux. Si la criticité d'un contrôle est "true", l'implémentation doit soit inclure le contrôle, ou ne pas envoyer l'opération au serveur.
10 - Quand un attrval-spec, DN ou RDN est encodé base64, les règles d'encodage spécifiées en 5 sont utilisée avec les exceptions suivantes:

        -a- Il n'y a pas d'exigence que le flux de sortie soit être représenté en ligne de 76 caractère max
        -b- Les chaînes base64 peuvent contenir des caractères autre que BASE6-CHAR, mais sont ignorés

Exemples

Un simple LDIF avec 2 entrées:
version: 1
dn: cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
cn: Barbara Jensen
cn: Barbara J Jensen
cn: Babs Jensen
sn: Jensen
uid: bjensen
telephonenumber: +1 408 555 1212
description: A big sailing fan.
    
dn: cn=Bjorn Jensen, ou=Accounting, dc=airius, dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
cn: Bjorn Jensen
sn: Jensen
telephonenumber: +1 408 555 1212

Un fichier contenant un entrée avec une valeur coupée:
version: 1
dn:cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com
objectclass:top
objectclass:person
objectclass:organizationalPerson
cn:Barbara Jensen
cn:Barbara J Jensen
cn:Babs Jensen
sn:Jensen
uid:bjensen
telephonenumber:+1 408 555 1212
description:Babs is a big sailing fan, and travels extensively in sea
    rch of perfect sailing conditions.
title:Product Manager, Rod and Reel Division

Un fichier contenant une valeur encodée en base64:
version: 1
dn: cn=Gern Jensen, ou=Product Testing, dc=airius, dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
cn: Gern Jensen
cn: Gern O Jensen
sn: Jensen
uid: gernj
telephonenumber: +1 408 555 1212
description:: V2hhdCBhIGNhcmVmdWwgcmVhZGVyIHlvdSBhcmUhICBUaGlzIHZhbHVl
IGlzIGJhc2UtNjQtZW5jb2RlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbnRyb2wgY2hhcmFjdG
VyIGluIGl0IChhIENSKS4NICBCeSB0aGUgd2F5LCB5b3Ugc2hvdWxkIHJlYWxseSBnZXQg
B3V0IG1vcmUu

Un fichier contenant un entrée avec des valeurs d'attribut encodés en UTF8, incluant un tag de langage.
version: 1
dn:: b3U95Za25qWt6YOoLG89QWlyaXVz
# dn:: ou=‹JapaneseOU›,o=Airius
objectclass: top
objectclass: organizationalUnit
ou:: 5Za25qWt6YOo
# ou:: ‹JapaneseOU›
ou ;lang-ja:: 5Za25qWt6YOo
# ou ;lang-ja:: ‹JapaneseOU›
ou ;lang-ja ;phonetic:: 44GI44GE44GO44KH44GG44G2
# ou ;lang-ja:: ‹JapaneseOU_in_phonetic_representation›
ou ;lang-en: Sales
description: Japanese office
    
dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLG89QWlyaXVz
# dn:: uid=‹uid›,ou=‹JapaneseOU›,o=Airius
userpassword: {SHA}O3HSv1MusyL4kTjP+HKI5uxuNoM=
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: rogasawara
mail: rogasawara@airius.co.jp
givenname ;lang-ja:: 44Ot44OJ44OL44O8
# givenname ;lang-ja:: ‹JapaneseGivenname›
sn ;lang-ja:: 5bCP56yg5Y6f
# sn ;lang-ja:: ‹JapaneseSn›
cn ;lang-ja:: 5bCP56yg5Y6fIOODreODieODi+ODvA==
# cn ;lang-ja:: ‹JapaneseCn›
title ;lang-ja:: 5Za25qWt6YOoIOmDqOmVtw==
# title ;lang-ja:: ‹JapaneseTitle›
preferredlanguage: ja
givenname:: 44Ot44OJ44OL44O8
# givenname:: ‹JapaneseGivenname›
sn:: 5bCP56yg5Y6f
# sn:: ‹JapaneseSn›
cn:: 5bCP56yg5Y6fIOODreODieODi+ODvA==
# cn:: ‹JapaneseCn›
title:: 5Za25qWt6YOoIOmDqOmVtw==
# title:: ‹JapaneseTitle›
givenname ;lang-ja ;phonetic:: 44KN44Gp44Gr44O8
# givenname ;lang-ja ;phonetic::
‹JapaneseGivenname_in_phonetic_representation_kana›
sn ;lang-ja ;phonetic:: 44GK44GM44GV44KP44KJ
# sn ;lang-ja ;phonetic:: ‹JapaneseSn_in_phonetic_representation_kana›
cn ;lang-ja ;phonetic:: 44GK44GM44GV44KP44KJIOOCjeOBqeOBq+ODvA==
# cn ;lang-ja ;phonetic:: ‹JapaneseCn_in_phonetic_representation_kana›
title ;lang-ja ;phonetic:: 44GI44GE44GO44KH44GG44G2IOOBtuOBoeOCh+OBhg==
# title ;lang-ja ;phonetic::
# ‹JapaneseTitle_in_phonetic_representation_kana›
givenname ;lang-en: Rodney
sn ;lang-en: Ogasawara
cn ;lang-en: Rodney Ogasawara
title ;lang-en: Sales, Director

Un fichier contenant une référence à un fichier externe
version: 1
dn: cn=Horatio Jensen, ou=Product Testing, dc=airius, dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
cn: Horatio Jensen
    
cn: Horatio N Jensen
sn: Jensen
uid: hjensen
telephonenumber: +1 408 555 1212
jpegphoto:‹ file:///usr/local/directory/photos/hjensen.jpg

Un fichier contenant une série de changements et commentaires:
version: 1
# Ajouter une nouvelle entrée
dn: cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com
changetype: add
objectclass: top
objectclass: person
objectclass: organizationalPerson
cn: Fiona Jensen
sn: Jensen
uid: fiona
telephonenumber: +1 408 555 1212
jpegphoto:‹ file:///usr/local/directory/photos/fiona.jpg
    
# Supprimer une entrée existante
dn: cn=Robert Jensen, ou=Marketing, dc=airius, dc=com
changetype: delete
    
# Modifier le rdn d'une entrée
dn: cn=Paul Jensen, ou=Product Development, dc=airius, dc=com
changetype: modrdn
newrdn: cn=Paula Jensen
deleteoldrdn: 1
    
# Renommer une entrrée et la déplacer
dn: ou=PD Accountants, ou=Product Development, dc=airius, dc=com
changetype: modrdn
newrdn: ou=Product Development Accountants
deleteoldrdn: 0
newsuperior: ou=Accounting, dc=airius, dc=com
# Modifier une entrée. Ajouter une valeur, en supprimer une, en remplacer
une et supprimer une valeur spécifique.
dn: cn=Paula Jensen, ou=Product Development, dc=airius, dc=com
changetype: modify
add: postaladdress
postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086
-
delete: description
-
replace: telephonenumber
telephonenumber: +1 408 555 1234
telephonenumber: +1 408 555 5678
-
delete: facsimiletelephonenumber
facsimiletelephonenumber: +1 408 555 9876
-
# autre exemple de modification: vider les valeurs d'un attribut, et
supprimer complètement un attribut
dn: cn=Ingrid Jensen, ou=Product Support, dc=airius, dc=com
changetype: modify
replace: postaladdress
-
delete: description
-

Un fichier LDIF contenant un changement avec un contrôle
version: 1
dn: ou=Product Development, dc=airius, dc=com
control: 1.2.840.113556.1.4.805 true
changetype: delete