\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. oct. 9 09:47:58 CEST 2014}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={draft-ietf-ldapext-ldapv3-dupent-08},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Contrôle pour une représentation d'entrée dupliquée},
CreationDate={D:20141009094758},
ModDate={D:20141009094758},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge draft-ietf-ldapext-ldapv3-dupent-08 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Contrôle pour une représentation d'entrée dupliquée}
 
\vspace{10mm}
 
\hspace{1mm}  Ce document décrit les contrôles qui permettent aux entrées dupliquées d'être retournées dans un jeu de résultat de l'opération de recherche. Chaque entrée dupliquée représente une valeur distinct (ou une combinaison de valeurs) du jeu d'attribut multi-valué spécifié.
\vspace{5mm} \\
 
 
\hspace{1mm}  Par exemple, une application peut nécessiter de produire une liste ordonnées d'entrées, triée par un attribut multi-valué, où chaque valeur d'attribut est représentée dans la liste. Le contrôle SSS permet au serveur d'ordonner les entrées du résultat de recherche basé sur les valeurs d'attribut. Mais il ne permet pas de spécifier le comportement quand un attribut contient plusieurs valeurs. Le contrôle ldap pour la représentation des résultats de recherche, comme définis dans X.511, est d'utiliser la valeur d'ordre la plus petite comme clé de tri.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour produire une liste ordonnée, où chaque valeur d'un attribut multi-valué est trié dans la liste, un contrôle séparé est nécessaire qui étend suffisamment le jeu d'entrée pour représenter chaque valeur attribut avant le trie.
\vspace{5mm} \\
 
 
\hspace{1mm}  Par exemple, une liste triée de tous les numéros de téléphone dans une organisation. Parce qu'une entrée peut avoir plusieurs numéros de téléphone, et la liste doit être triée par numéro de téléphone, la liste doit être capable de contenir des entrées dupliquées, chacun avec son propre numéro de téléphone unique.
\vspace{5mm} \\
 
 
\hspace{1mm}  Autre exemple, une application qui a besoin d'afficher une liste ordonnée de tous les membres d'un groupe. Il utiliserai ce contrôle pour créer un jeu de résultat d'entrée groupOfNames dupliquées, chacun avec une simple, valeur unique dans son attribut member.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Contrôles }
 
\
 
\hspace{1mm} Ce contrôle est inclus dans le message searchRequest dans le champ controls du LDAPmessage. controlType est \textbf{2.16.840.1.113719.1.27.101.1} et controlValue est définis comme suit:
 
{\ttfamily
DuplicateEntryRequest ::= SEQUENCE \{\\ \hspace{2mm}AttributeDescriptionList, -- from \texttt{[}RFC2251\texttt{]}\\ \hspace{2mm}PartialApplicationAllowed BOOLEAN DEFAULT TRUE \}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge AttributeDescriptionList }
 
\
 
\hspace{1mm} Le type de données AttributeDescriptionList décris une liste de 0 ou plusieurs types AttributeDescription. Les définitions, issues de la rfc2251 sont répétées ici:
 
{\ttfamily
AttributeDescriptionList ::= SEQUENCE OF AttributeDescription\\ AttributeDescription ::= LDAPString\\ Une valeur de AttributeDescription est basé sur le BNF suivant:\\ attributeDescription = AttributeType \texttt{[} ";" <options> \texttt{]}\\
}
\vspace{8mm}
 
\hspace{1mm}  En traitant une requête search, un serveur examine cette liste. Si un attribut spécifié ou un sous-type d'attribut existe dans une entrée à retourner par l'opération de recherche, et que cet attribut maintient plusieurs valeurs, le serveur traite l'entrée comme si c'était de multiple, entrées dupliquées -- les attributs spécifiés maintenant une seule et unique valeur du jeu original de valeurs de cet attribut. Noter qu'il peut en résulter des entrées qui ne matchent plus le filtre de recherche.
\vspace{5mm} \\
 
 
\hspace{1mm}  Spécifier un supertype d'attribut a l'effet de traiter toutes les valeurs des sous-types de cet attribut comme si c'était des valeurs de ce supertype.
\vspace{5mm} \\
 
 
\hspace{1mm}  Quand des descriptions d'attribut contiennent des options de sous-typage, elle sont traitées de la même manière que décris dans la rfc2251. Les sémantiques sont indéfinies si une description d'attribut contient une option de non sous-typage, et ne devrait pas être spécifié par les clients.
\vspace{5mm} \\
 
 
\hspace{1mm}  Quand 2 attributs ou plus sont spécifiés par ce contrôle, le nombre d'entrées dupliquées est la combinaison de toutes les valeurs dans chaque attribut. À cause de la complexité potentielle à desservir plusieurs attribut, les implémentations de serveur peuvent choisir de supporter un nombre limité d'attributs dans le contrôle.
\vspace{5mm} \\
 
 
\hspace{1mm}  Il y a un cas spécial où il n'y a pas d'attributs spécifié, ou un description d'attribut a la valeur '*'. Dans ce cas, tous les attributs sont utilisé. Si un attribut n'est pas reconnu, cet attribut est ignoré en traitant le contrôle.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge PartialApplicationAllowed }
 
\
 
\hspace{1mm}  Le champ PartialApplicationAllowed est utilisé pour spécifier si le client va permettre au serveur d'appliquer ce contrôle à un sous-jeu du jeu de résultat de recherche. À TRUE, le serveur est libre d'appliquer arbitrairement ce contrôle à aucun, n'importe lequel, ou tous les résultats de recherche ou échoue à supporter le contrôle.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les implémentations client utilisent le contrôle DuplicateSearchResult pour découvrir que résultats de recherche ont été affectés par ce contrôle.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Contrôles de réponse }
 
\
 
\hspace{1mm}  2 contrôles de réponse sont définis pour fournir un retour durant les résultats de recherche; DuplicateSearchResult et DuplicateEntryResponseDone.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} DuplicateSearchResult]{est envoyé avec toutes les opérations SearchResultEntry qui contiennent des résultats de recherche qui ont été modifiés par le contrôle DuplicateEntryRequest.}
\item[\hspace{1mm} DuplicateEntryResponseDone]{est envoyé avec l'opération SearchResultDone pour compléter les informations.}
\end{description}
 
\vspace{1cm}{\huge DuplicateSearchResult }
 
\
 
\hspace{1mm}  Ce contrôle est inclus dans le message SearchResultEntry d'un résultat de recherche qui maintient un entry qui a été modifiée par le contrôle DuplicateEntryRequest. Ce contrôle est absent des résultat de recherche qui ne sont pas affectés par le contrôle DuplicateEntryRequest. controlType vaut \textbf{2.16.840.1.113719.1.27.101.2}. controlValue n'est pas inclus.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge DuplicateEntryResponseDone }
 
\
 
\hspace{1mm} Ce contrôle est inclus dans le message searchResultDone. controlType vaut \textbf{2.16.840.1.113719.1.27.101.3}, controlValue est définis comme suit:
 
{\ttfamily
DuplicateEntryResponseDone ::= SEQUENCE \{\\ \hspace{2mm}resultCode, -- From \texttt{[}RFC2251\texttt{]}\\ \hspace{2mm}errorMessage \texttt{[}0\texttt{]} LDAPString OPTIONAL,\\ \hspace{2mm}attribute \texttt{[}1\texttt{]} AttributeDescription OPTIONAL \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Un resultCode est fournis ici pour permettre au serveur de prévenir le client qu'une erreur s'est produite à cause de ce contrôle. Par exemple, une recherche qui aurait du se compléter avec succès peut échouer avec un sizeLimitExceede à cause de ce contrôle. errorMessage peut être utilisé avec une chaîne human-readable dans le cas d'un resultCode indiquant une erreur. Le champ attribute peut être définis à la valeur du premier attribut spécifié par le DuplicateEntryRequest qui à généré l'erreur. Le client doit ignorer le champ attribut si le résultat est success.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemple simple }
 
\
 
\hspace{1mm} Cet exemple montre l'utilisation de ce contrôle pour produire une liste de tous les numéros de téléphone dans dc=example,dc=net. Partant des 3 entrées suivantes: \\
\hspace{1mm} \textbf{dn: cn=User1,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-0123} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-8854} \\
\hspace{1mm} \textbf{telephoneNumber: 555-4588} \\
\hspace{1mm} \textbf{telephoneNumber: 555-5884} \\
\hspace{1mm} \textbf{dn: cn=User3,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-9425} \\
\hspace{1mm} \textbf{telephoneNumber: 555-7992} \\
\hspace{1mm} D'abord une recherche LDAP est spécifiée avec un baseDN à "dc=example,dc=net", un scope subtree, un filtre "(telephoneNumber=*)". Un contrôle DuplicateEntryRequest est attaché à la recherche, spécifiant "telephoneNumber" comme description d'attribut. Le jeu de résultat sera: \\
\hspace{1mm} \textbf{dn: cn=User1,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-0123} \\
\hspace{1mm} \textbf{<no DuplicateSearchResult control sent with search result>} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-8854} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-4588} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-5884} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User3,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-9425} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User3,dc=example,dc=net} \\
\hspace{1mm} \textbf{telephoneNumber: 555-7992} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
 
\hspace{1mm}  Toutes les entrées sauf la première seront accompagnées par le contrôle DuplicateSearchResult. Noter qu'il n'est pas nécessaire d'utiliser un attribut dans ce contrôle qui est spécifié dans le filtre de recherche.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Spécifier plusieurs attributs }
 
\
 
\hspace{1mm} Un exemple plus compliqué utilise plusieurs attributs. Assumant les entrées suivantes dans l'annuaire: \\
\hspace{1mm} \textbf{dn: cn=User1,dc=example,dc=net} \\
\hspace{1mm} \textbf{cn: User1} \\
\hspace{1mm} \textbf{givenName: User One} \\
\hspace{1mm} \textbf{mail: user1@example.net} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{cn: User2} \\
\hspace{1mm} \textbf{givenName: User Two} \\
\hspace{1mm} \textbf{mail: user2@example.net} \\
\hspace{1mm} \textbf{mail: usertwo@example.net} \\
\hspace{1mm} Dans cet exemple, on spécifie mail et name dans la liste des attributs. En spécifiant name, tous les sous-type de name seront également considérés. Le résultat sera: \\
\hspace{1mm} \textbf{dn: cn=User1,dc=example,dc=net} \\
\hspace{1mm} \textbf{cn: User1} \\
\hspace{1mm} \textbf{mail: user1@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User1,dc=example,dc=net} \\
\hspace{1mm} \textbf{givenName: User One} \\
\hspace{1mm} \textbf{mail: user1@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{cn: User2} \\
\hspace{1mm} \textbf{mail: user2@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{cn: User2} \\
\hspace{1mm} \textbf{mail: usertwo@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{givenName: User Two} \\
\hspace{1mm} \textbf{mail: user2@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=User2,dc=example,dc=net} \\
\hspace{1mm} \textbf{givenName: User Two} \\
\hspace{1mm} \textbf{mail: usertwo@example.net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
 
\vspace{1cm}{\huge Lister les membres d'un groupOfNames }
 
\
 
\hspace{1mm} Cet exemple moutre comment les contrôles peuvent être utilisés pour retourner plusieurs entrées depuis une entrée groupOfNames. Considérant l'entrée suivante: \\
\hspace{1mm} \textbf{dn: cn=Administrators,dc=example,dc=net} \\
\hspace{1mm} \textbf{cn: Administrators} \\
\hspace{1mm} \textbf{member: cn=aBaker,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=cDavis,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=bChilds,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=dEvans,dc=example,dc=net} \\
\hspace{1mm} un searchBase à "cn=Administrators,dc=example,dc=net", un filtre à "(objectClass=*)", un scope base et le contrôle duplicateEntryRequest avec la valeur d'attribut "member": \\
\hspace{1mm} \textbf{dn: cn=Administrators,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=aBaker,dc=example,dc=net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=Administrators,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=cDavis,dc=example,dc=net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=Administrators,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=bChilds,dc=example,dc=net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
\hspace{1mm} \textbf{dn: cn=Administrators,dc=example,dc=net} \\
\hspace{1mm} \textbf{member: cn=dEvans,dc=example,dc=net} \\
\hspace{1mm} \textbf{control: 2.16.840.1.113719.1.27.101.2} \\
 
\hspace{1mm}  Cette liste peut être ainsi triée par membre et affichée dans une liste.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Relation avec d'autres contrôles }
 
\
 
\hspace{1mm}  Ce contrôle est conçus pour être utilisé avec le contrôle Server Side Sorting. En couplant ces 2 contrôles, on peut produire un jeu d'entrées triées par valeurs d'attribut, où chaque valeur d'attribut est représentée dans le jeu trié. Les implémentations de serveur doivent s'assurer que ce contrôle est traité avant de trier le résultat d'une recherche, vu que ce contrôle altère le jeu de résultat.
\vspace{5mm} \\
 
 
\hspace{1mm}  Ce contrôle peut également être utilisé avec le contrôle Virtual List View. La nature de dépendance entre VLV est SSS est telle que le trie est fait en premier. À cause de cela, l'impact de ce contrôle sur le contrôle VLV est minimale.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
