\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{jeu. sept. 26 18:37:44 CEST 2013}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={rfc2849},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={LDAP Data Interchange Format},
CreationDate={D:20130926183744},
ModDate={D:20130926183744},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge rfc2849 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large LDAP Data Interchange Format}
 
\vspace{10mm}
 
\hspace{1mm} Définition de la syntaxe formelle:
 
{\ttfamily
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\\ \hspace{2mm}0*1(1*SPACE ("true" / "false")) ; criticality\\ \hspace{2mm}0*1(value-spec) ; controlValue\\ \hspace{2mm}SEP\\ ldap-oid = 1*DIGIT 0*1("." 1*DIGIT) An LDAPOID\\ attrval-spec = AttributeDescription value-spec SEP\\ value-spec = ":" ( FILL 0*1(SAFE-STRING) /\\ \hspace{2mm}":" FILL (BASE64-STRING) /\\ \hspace{2mm}"<" FILL url)\\ url = <a Uniform Resource Locator\\ AttributeDescription = AttributeType \texttt{[}" ;" options\texttt{]}\\ 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\\ \hspace{2mm}(change-add / change-delete /\\ \hspace{2mm}change-modify / change-moddn)\\ change-add = "add" SEP 1*attrval-spec\\ change-delete = "delete" SEP\\ change-moddn = ("modrdn" / "moddn") SEP\\ \hspace{2mm}"newrdn:" ( FILL rdn /\\ \hspace{2mm}":" FILL base64-rdn) SEP\\ \hspace{2mm}"deleteoldrdn:" FILL ("0" / "1") SEP\\ \hspace{2mm}0*1("newsuperior:"\\ ( FILL distinguishedName /\\ \hspace{2mm}":" FILL base64-distinguishedName) SEP)\\ change-modify = "modify" SEP *mod-spec\\ mod-spec = ("add:" / "delete:" / "replace:")\\ \hspace{2mm}FILL AttributeDescription SEP\\ \hspace{2mm}*attrval-spec\\ \hspace{2mm}"-" 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 /\\ \hspace{2mm}\%x21-39 / \%x3B / \%x3D-7F\\ \hspace{2mm}; any value <= 127 except NUL, LF, CR,\\ \hspace{2mm}; SPACE, colon (":", ASCII 58 decimal)\\ \hspace{2mm}; and less-than ("<" , ASCII 60 decimal)\\ SAFE-STRING = \texttt{[}SAFE-INIT-CHAR *SAFE-CHAR\texttt{]}\\ UTF8-CHAR = SAFE-CHAR / UTF8-2 / UTF8-3 /\\ \hspace{2mm}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 = \texttt{[}*(BASE64-CHAR)\texttt{]}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Notes sur la syntaxe LDIF }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} 1 -]{Pour la version décrite dans ce document, la version est 1.}
\item[\hspace{1mm} 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.}
\item[\hspace{1mm} 3 -]{toute ligne qui commence par '\#' est un commentaire et est ignoré.}
\item[\hspace{1mm} 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.}
\item[\hspace{1mm} 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)}
\item[\hspace{1mm} 6 -]{Quand une URL est spécifiée dans un attrval-spec, les conventions suivantes s'appliquent:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} -a-]{Les implémentations devraient supporter le format d'url file://}
\item[\hspace{6mm} -b-]{les implémentations peuvent supporter d'autre formats d'URL}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} 7 -]{les DN, DN et valeurs d'attributs de syntaxe DirectoryString doivent être des chaîne UTF8 valides.}
\item[\hspace{1mm} 8 -]{Les valeurs ou DN qui se terminent avec SPACE devraient être encodée en base64.}
\item[\hspace{1mm} 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.}
\item[\hspace{1mm} 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:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} -a-]{Il n'y a pas d'exigence que le flux de sortie soit être représenté en ligne de 76 caractère max}
\item[\hspace{6mm} -b-]{Les chaînes base64 peuvent contenir des caractères autre que BASE6-CHAR, mais sont ignorés}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Un simple LDIF avec 2 entrées:
 
{\ttfamily
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.\\ \hspace{2mm}\\ 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\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier contenant un entrée avec une valeur coupée:
 
{\ttfamily
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\\ \hspace{2mm}rch of perfect sailing conditions.\\ title:Product Manager, Rod and Reel Division\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier contenant une valeur encodée en base64:
 
{\ttfamily
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\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier contenant un entrée avec des valeurs d'attribut encodés en UTF8, incluant un tag de langage.
 
{\ttfamily
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\\ \hspace{2mm}\\ dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLG89QWlyaXVz\\ \# dn:: uid=<uid>,ou=<JapaneseOU>,o=Airius\\ userpassword: \&\#123SHA\&\#125O3HSv1MusyL4kTjP+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\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier contenant une référence à un fichier externe
 
{\ttfamily
version: 1\\ dn: cn=Horatio Jensen, ou=Product Testing, dc=airius, dc=com\\ objectclass: top\\ objectclass: person\\ objectclass: organizationalPerson\\ cn: Horatio Jensen\\ \hspace{2mm}\\ cn: Horatio N Jensen\\ sn: Jensen\\ uid: hjensen\\ telephonenumber: +1 408 555 1212\\ jpegphoto:< file:///usr/local/directory/photos/hjensen.jpg\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier contenant une série de changements et commentaires:
 
{\ttfamily
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\\ \hspace{2mm}\\ \# Supprimer une entrée existante\\ dn: cn=Robert Jensen, ou=Marketing, dc=airius, dc=com\\ changetype: delete\\ \hspace{2mm}\\ \# 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\\ \hspace{2mm}\\ \# 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\\ -\\
}
\vspace{8mm}
 
\hspace{1mm} Un fichier LDIF contenant un changement avec un contrôle
 
{\ttfamily
version: 1\\ dn: ou=Product Development, dc=airius, dc=com\\ control: 1.2.840.113556.1.4.805 true\\ changetype: delete\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
