\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]{mer. nov. 6 15:15:10 CET 2013}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={rfc4876},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Schéma de profile de configuration pour les agents basés sur LDAP},
CreationDate={D:20131106151510},
ModDate={D:20131106151510},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge rfc4876 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Schéma de profile de configuration pour les agents basés sur LDAP}
 
\vspace{10mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} preferredServerList]{Liste d'adresses et ports de serveurs que le DUA doit contacter, dans l'ordre.}
\item[\hspace{1mm} defaultServerList]{Doit être examiné seulement si preferredServerList n'est pas fournis.}
\item[\hspace{1mm} defaultSearchBase]{Quand un DUA doit requêter le DSA pour des informations, cet attribut fournis la base de recherche.}
\item[\hspace{1mm} authenticationMethod]{Liste par ordre de préférence de méthodes bind. (peut être none, simple, sasl et tls)}
\end{description}
 
{\ttfamily
authMethod = method *(";" method)\\ method = none / simple / sasl / tls\\ none = "none"\\ simple = "simple"\\ sasl = "sasl/" saslmech \texttt{[} ":" sasloption \texttt{]}\\ sasloption = "auth-conf" / "auth-int"\\ tls = "tls:" (none / simple / sasl)\\ saslmech = SASL mechanism name\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} credentialLevel]{Type de crédentials que le DUA doit utiliser en contactant le DSA (anonymous, proxy, self)}
\end{description}
 
{\ttfamily
credentialLevel = level *(SP level)\\ level = self / proxy / anonymous\\ self = "self"\\ proxy = "proxy"\\ anonymous = "anonymous"\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} serviceSearchDescriptor]{Définis comment et où un DUA devrait rechercher les informations pour un service particulier.}
\end{description}
 
{\ttfamily
serviceSearchList = serviceID ":" serviceSearchDesc *(";" serviceSearchDesc)\\ serviceSearchDesc = confReferral / searchDescriptor\\ searchDescriptor = \texttt{[}base\texttt{]} \texttt{[}"?" \texttt{[}scopeSyntax\texttt{]} \texttt{[}" ?" \texttt{[}filter\texttt{]}\texttt{]}\texttt{]}\\ confReferral = "ref :" distinguishedName\\ base = distinguishedName / relativeBaseName\\ relativeBaseName = 1*(relativeDistinguishedName ",")\\ filter = UTF-8 encoded string\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm} \textbf{defaultSearchBase: dc=mycompany,dc=com} \\
\hspace{1mm} \textbf{serviceSearchDescriptor: email:ou=people,ou=org1,?} \\
\hspace{1mm} \textbf{one;ou=contractor,?one;} \\
\hspace{1mm} \textbf{ref:cn=profile,dc=mycompany,dc=com} \\
 
\hspace{1mm}  Dans cet exemple, le DUA doit rechercher dans "ou=people,ou=org1,dc=mycompany,dc=com" en premier. Ensuite il devrait rechercher dans "ou=contractor,dc=mycompany,dc=com", et finalement il devrait rechercher dans d'autres emplacement comme spécifié dans le profile décris à "cn=profile,dc=mycompany,dc=com"
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} attributeMap]{Mapping d'attributs pour toutes les opérations LDAP effectuées pour un service qui a une entrée attributeMap. Parce que le mapping est spécifique à chaque service dans le DUA, un serviceID est requis dans la syntaxe.}
\end{description}
 
{\ttfamily
attributeMap = serviceID ":" origAttribute "=" attributes\\ origAttribute = attribute\\ attributes = wattribute *( SP wattribute )\\ wattribute = WSP newAttribute WSP\\ newAttribute = descr / "*NULL*"\\ attribute = descr\\
}
\vspace{8mm}
 
\hspace{1mm}  exemple: supposons qu'un DUA agis comme un service mail. Par défaut, le service email utilise "mail", "cn" et "sn" pour découvrir les adresses emails. Cependant, le service email a été déployé dans un environnement qui utilise "employeeName" au lieu de "cn". également, au lieu d'utiliser "mail", l'attribut utilisé est "email":
\vspace{5mm} \\
 
 
\hspace{1mm} \textbf{attributeMap: email:cn=employeeName} \\
\hspace{1mm} \textbf{attributeMap: email:mail=email} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} searchTimeLimit]{Définis le temps maximum en secondes que le DUA devrait permettre pour une requête search.}
\item[\hspace{1mm} bindTimeLimit]{Définis le temps maximum en secondes que le DUA devrait permettre pour les opérations bind.}
\item[\hspace{1mm} followReferrals]{à TRUE, le DUA devrait suivre les référants. a FALSE, ne doit pas les suivre.}
\item[\hspace{1mm} dereferenceAliases]{à TRUE, le DUA devrait permettre le déréférencement d'alias. A FALSE, ne doit pas déréférencer les alias.}
\item[\hspace{1mm} profileTTL]{Définis la fréquence à laquelle le DUA devrait recharger et se reconfigurer.}
\item[\hspace{1mm} objectclassMap]{Un DUA peut effectuer un mappage de classe d'objet pour toutes les opérations LDAP effectuées pour un service}
\end{description}
 
{\ttfamily
objectclassMap = serviceID ":" origObjectclass "=" objectclass\\ origObjectclass = objectclass\\ objectclass = keystring\\
}
\vspace{8mm}
 
\hspace{1mm}  exemple: supposons qu'un DUA agit comme un service mail. Par défaut le service "email" utilise "mail", "cn" et "sn" pour découvrir les adresses email dans les entrées créée en utilisant la classe d'objet inetOrgPerson. Cependant, le service mail a été déployé dans un environnment qui utilise les entrées crééer en utilisant la classe d'objet "employee". Dans ce cas, "cn" peut être mappé à "employeeName", et "inetOrgPerson" peut être mappé à "employee":
\vspace{5mm} \\
 
 
\hspace{1mm} \textbf{attributeMap: email:cn=employeeName} \\
\hspace{1mm} \textbf{objectclassMap: email:inetOrgPerson=employee} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} defaultSearchScope]{Fournis le scope de recherche pour le DUA. Peut être écrasé par serviceSearchDescriptor}
\item[\hspace{1mm} ]{}
\end{description}
 
{\ttfamily
scopeSyntax = "base" / "one" / "sub"\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} serviceAuthenticationMethod]{Définis par ordre de préférence de méthodes bind à utiliser pour contacter un DSA pour un service particulier.}
\item[\hspace{1mm} ]{}
\end{description}
 
{\ttfamily
svAuthMethod = serviceID ":" method *(";" method)\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} serviceCredentialLevel]{Définis quel types de crédentials le DUA devrait utiliser en contacta,t le DSA pour un service particulier.}
\item[\hspace{1mm} ]{}
\end{description}
 
{\ttfamily
svCredentialLevel = serviceID ":" level *(SP level)\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm} \textbf{serviceCredentialLevel: email:proxy anonymous} \\
 
\vspace{1cm}{\huge Schéma }
 
\
 
{\ttfamily
( 1.3.6.1.4.1.11.1.3.1.1.0 NAME 'defaultServerList' DESC 'List of default servers' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.1 NAME 'defaultSearchBase' DESC 'Default base for searches' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.2 NAME 'preferredServerList' DESC 'List of preferred servers' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.3 NAME 'searchTimeLimit' DESC 'Maximum time an agent or service allows for a search to complete' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.4 NAME 'bindTimeLimit' DESC 'Maximum time an agent or service allows for a bind operation to complete' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.5 NAME 'followReferrals' DESC 'An agent or service does or should follow referrals' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.6 NAME 'authenticationMethod' DESC 'Identifies the types of authentication methods either used, required, or provided by a service or peer' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.7 NAME 'profileTTL' DESC 'Time to live, in seconds, before a profile is considered stale' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.9 NAME 'attributeMap' DESC 'Attribute mappings used, required, or supported by an agent or service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )\\ ( 1.3.6.1.4.1.11.1.3.1.1.10 NAME 'credentialLevel' DESC 'Identifies type of credentials either used, required, or supported by an agent or service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.11 NAME 'objectclassMap' DESC 'Object class mappings used, required, or supported by an agent or service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )\\ ( 1.3.6.1.4.1.11.1.3.1.1.12 NAME 'defaultSearchScope' DESC 'Default scope used when performing a search' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )\\ ( 1.3.6.1.4.1.11.1.3.1.1.13 NAME 'serviceCredentialLevel' DESC 'Specifies the type of credentials either used, required, or supported by a specific service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )\\ ( 1.3.6.1.4.1.11.1.3.1.1.14 NAME 'serviceSearchDescriptor' DESC 'Specifies search descriptors required, used, or supported by a particular service or agent' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )\\ ( 1.3.6.1.4.1.11.1.3.1.1.15 NAME 'serviceAuthenticationMethod' DESC 'Specifies types authentication methods either used, required, or supported by a particular service' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )\\ ( 1.3.6.1.4.1.11.1.3.1.1.16 NAME 'dereferenceAliases' DESC 'Specifies if a service or agent either requires, supports, or uses dereferencing of aliases.' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )\\
}
\vspace{8mm}
 
{\ttfamily
( 1.3.6.1.4.1.11.1.3.1.2.5 NAME 'DUAConfigProfile'\\ \hspace{2mm}SUP top STRUCTURAL\\ \hspace{2mm}DESC 'Abstraction of a base configuration for a DUA'\\ \hspace{2mm}MUST ( cn )\\ \hspace{2mm}MAY ( defaultServerList \$ preferredServerList \$\\ \hspace{2mm}defaultSearchBase \$ defaultSearchScope \$\\ \hspace{2mm}searchTimeLimit \$ bindTimeLimit \$\\ \hspace{2mm}credentialLevel \$ authenticationMethod \$\\ \hspace{2mm}followReferrals \$ dereferenceAliases \$\\ \hspace{2mm}serviceSearchDescriptor \$ serviceCredentialLevel \$\\ \hspace{2mm}serviceAuthenticationMethod \$ objectclassMap \$\\ \hspace{2mm}attributeMap \$ profileTTL ) )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm}  Dans cette section, on décris un DUA fictif qui fournis un service appelé "\textbf{email}". Ce service est configuré de manière à trouver les utilisateurs avec un adresse email avec la classe d'objet \textbf{inetOrgPerson}, Le nom dans "\textbf{cn}" et le mail dans "\textbf{mail}"
\vspace{5mm} \\
 
 
\hspace{1mm}  Le filtre de recherche par défaut pour le service email est "\textbf{(objectclass=inetOrgPerson)}". Le service email définis également que quand il effectue une découverte nom/adresse, il va construire le filtre avec:
\vspace{5mm} \\
\hspace{1mm}  \textbf{(\&(<filter>)(cn=<name string>))}
\vspace{5mm} \\
 
 
\hspace{1mm} ou, si "cn" a été mappé vers d'autres attributs: \\
\hspace{1mm} \textbf{(\&(<filter>)(attr1=<token1>)(attr2=<token2>)...)} \\
 
\hspace{1mm}  L'exemple ci-dessous montre comment le service email construit sa recherche, basé sur un profile définis. Dans tous les cas, defaultSearchBase est "o=airius.com", et defaultSearchScope n'est pas définis.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple 1:
 
{\ttfamily
serviceSearchDescriptor:email:"ou=marketing,"\\ \hspace{2mm}\\ base: ou=marketing,o=airius.com\\ scope: sub\\ filter: (\&(objectclass=inetOrgPerson)(cn=Jane Hernandez))\\
}
\vspace{8mm}
 
\hspace{1mm} exemple 2:
 
{\ttfamily
serviceSearchDescriptor:email:"ou=marketing,"?one?(\&(objectclass=inetOrgPerson)(c=us))\\ attributeMap:email:cn=2.5.4.42 sn\\
}
\vspace{8mm}
 
\hspace{1mm}  Note: 2.5.4.42 est l'OID qui représente "givenName"
\vspace{5mm} \\
 
 
\hspace{1mm} Dans cet exemple, le service email effectue une recherche <name string> comme décris plus haut pour générer un filtre de recherche complexe. L'exemple suivant résulte d'une recherche:
 
{\ttfamily
base: ou=marketing,o=airius.com\\ scope: one\\ filter: (\&(\&(objectclass=inetOrgPerson)(c=us))(2.5.4.42=Jane)(sn=Hernandez))\\
}
\vspace{8mm}
 
\hspace{1mm} Exemple 3:
 
{\ttfamily
serviceSearchDescriptor: email:ou=marketing,"?base\\ attributeMap:email:cn=name\\
}
\vspace{8mm}
 
\hspace{1mm}  Cet exemple est invalide parce que soit les guillemets devraient être échappé, soit il devrait y avoir des "
\vspace{5mm} \\
 
 
\hspace{1mm} exemple 4:
 
{\ttfamily
serviceSearchDescriptor:email:ou=\textbackslash{}\textbackslash{}mar\textbackslash{}\textbackslash{}\textbackslash{}\textbackslash{}keting,\textbackslash{}\textbackslash{}"?base\\ attributeMap:email:cn=name\\ \hspace{2mm}\\ base:ou=\textbackslash{}\textbackslash{}mar\textbackslash{}\textbackslash{}keting,"\\ scope:base\\ filter: (\&(objectclass=inetOrgPerson)(name=Jane Hernandez))\\
}
\vspace{8mm}
 
\hspace{1mm} exemple 5:
 
{\ttfamily
serviceSearchDescriptor:email:ou="marketing",o=supercom\\
}
\vspace{8mm}
 
\hspace{1mm}  Cet exemple est invalide parce que les " doivent être échappés
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple 6:
 
{\ttfamily
serviceSearchDescriptor:email:??(\&(objectclass=person)(ou=Org1\textbackslash{}\textbackslash{}\textbackslash{}\textbackslash{}(temporary\textbackslash{}\textbackslash{}\textbackslash{}\textbackslash{})))\\ base: o=airius.com\\ scope: sub\\ filter: (\&((\&(objectclass=person)(ou=Org1\textbackslash{}\textbackslash{}(Temporary\textbackslash{}\textbackslash{})))(cn=Jane Henderson)))\\
}
\vspace{8mm}
 
\hspace{1mm} Exemple 7:
 
{\ttfamily
serviceSearchDescriptor : email :"ou=funny ?org,"\\ \hspace{2mm}\\ base: ou=funny?org,o=airius.com\\ scope: sub\\ filter: (\&(objectclass=inetOrgPerson)(cn=Jane Hernandez))\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
