\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]{lun. mai 19 18:48:47 CEST 2014}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={draft-chu-ldap-logschema-00},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Schéma de log du protocol LDAP},
CreationDate={D:20140519184847},
ModDate={D:20140519184847},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge draft-chu-ldap-logschema-00 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Schéma de log du protocol LDAP}
 
\vspace{10mm}
 
\hspace{1mm}  Pour faciliter l'administration distante et l'audit des opérations serveurs LDAP, il est désirable de fournir les logs opérationnels du serveur eux-même comme annuaire LDAP. Ces logs peuvent être également utilisés comme log de changements persistants pour supporter divers mécanismes de réplication. Ce document définis un schéma qui peut être utilisé pour représenter toutes les requêtes qui sont traitées par un serveur LDAP.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Control Syntax }
 
\
 
\hspace{1mm}  Une valeur de Control syntax représente un contrôle LDAP tel qu'utilisé par un client ou un serveur. Il consiste de l'OID numérique du contrôle, le flag de criticité, et d'un OctetString optionnel contenant la valeur du contrôle.
\vspace{5mm} \\
 
 
\hspace{1mm} La notation ASN.1 est:
 
{\ttfamily
Control ::= SEQUENCE \{\\ \hspace{2mm}controlType LDAPOID,\\ \hspace{2mm}criticality BOOLEAN DEFAULT FALSE,\\ \hspace{2mm}controlValue OCTET STRING OPTIONAL \}\\
}
\vspace{8mm}
 
\hspace{1mm} La description de syntaxe ldap est:
 
{\ttfamily
( LOG\_SCHEMA\_SYN.1 DESC 'Control' )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Types d'attributs Généraux }
 
\
 
\hspace{1mm} These attributes are common to all of the LDAP request records
 
{\ttfamily
( LOG\_SCHEMA\_AT.1 NAME 'reqDN'\\ DESC 'Target DN of request'\\ EQUALITY distinguishedNameMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .2 NAME 'reqStart'\\ DESC 'Start time of request'\\ EQUALITY generalizedTimeMatch\\ ORDERING generalizedTimeOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .3 NAME 'reqEnd'\\ DESC 'End time of request'\\ EQUALITY generalizedTimeMatch\\ ORDERING generalizedTimeOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .4 NAME 'reqType'\\ DESC 'Type of request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .5 NAME 'reqSession'\\ DESC 'Session ID of request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .6 NAME 'reqAuthzID'\\ DESC 'Authorization ID of requestor'\\ EQUALITY distinguishedNameMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .7 NAME 'reqResult'\\ DESC 'Result code of request'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .8 NAME 'reqMessage'\\ DESC 'Error text of request'\\ EQUALITY caseIgnoreMatch\\ SUBSTR caseIgnoreSubstringsMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .9 NAME 'reqReferral'\\ DESC 'Referrals returned for request'\\ SUP labeledURI )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .10 NAME 'reqControls'\\ DESC 'Request controls'\\ EQUALITY objectIdentifierFirstComponentMatch\\ SYNTAX LOG\_SCHEMA\_SYN.1 X-ORDERED 'VALUES' )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .11 NAME 'reqRespControls'\\ DESC 'Response controls of request'\\ EQUALITY objectIdentifierFirstComponentMatch\\ SYNTAX LOG\_SCHEMA\_SYN.1 X-ORDERED 'VALUES' )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Types d'attributs spécifiques aux requêtes }
 
\
 
\hspace{1mm} Ces attributs sont spécifiques à un simple type de requêtes ldap:
 
{\ttfamily
( LOG\_SCHEMA\_AT .12 NAME 'reqId'\\ DESC 'ID of Request to Abandon'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .13 NAME 'reqVersion'\\ DESC 'Protocol version of Bind request'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .14 NAME 'reqMethod'\\ DESC 'Bind method of request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .15 NAME 'reqAssertion'\\ DESC 'Compare Assertion of request'\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .16 NAME 'reqMod'\\ DESC 'Modifications of request'\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ EQUALITY octetStringMatch\\ SUBSTR octetStringSubstringsMatch )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .17 NAME 'reqOld'\\ DESC 'Old values of entry before request completed'\\ EQUALITY octetStringMatch\\ SUBSTR octetStringSubstringsMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .18 NAME 'reqNewRDN'\\ DESC 'New RDN of request'\\ EQUALITY distinguishedNameMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .19 NAME 'reqDeleteOldRDN'\\ DESC 'Delete old RDN'\\ EQUALITY booleanMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .20 NAME 'reqNewSuperior'\\ DESC 'New superior DN of request'\\ EQUALITY distinguishedNameMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .21 NAME 'reqScope'\\ DESC 'Scope of request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .22 NAME 'reqDerefAliases'\\ DESC 'Disposition of Aliases in request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .23 NAME 'reqAttrsOnly'\\ DESC 'Attributes and values of request'\\ EQUALITY booleanMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .24 NAME 'reqFilter'\\ DESC 'Filter of request'\\ EQUALITY caseIgnoreMatch\\ SUBSTR caseIgnoreSubstringsMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .25 NAME 'reqAttr'\\ DESC 'Attributes of request'\\ EQUALITY caseIgnoreMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .26 NAME 'reqSizeLimit'\\ DESC 'Size limit of request'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .27 NAME 'reqTimeLimit'\\ DESC 'Time limit of request'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .28 NAME 'reqEntries'\\ DESC 'Number of entries returned'\\ EQUALITY integerMatch\\ ORDERING integerOrderingMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ SINGLE-VALUE )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_AT .29 NAME 'reqData'\\ DESC 'Data of extended request'\\ EQUALITY octetStringMatch\\ SUBSTR octetStringSubstringsMatch\\ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40\\ SINGLE-VALUE )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Classes d'objets d'audit de base }
 
\
 
\hspace{1mm} Cette classe contient les attributs communs à toutes les requêtes ldap. Les autres classe héritent toutes de cette classe:
 
{\ttfamily
( LOG\_SCHEMA\_OC .1 NAME 'auditObject' DESC 'OpenLDAP request\\ auditing' SUP top STRUCTURAL MUST ( reqStart \$ reqType \$ reqSession )\\ MAY ( reqDN \$ reqAuthzID \$ reqControls \$ reqRespControls \$ reqEnd \$\\ reqResult \$ reqMessage \$ reqReferral ) )\\
}
\vspace{8mm}
 
\hspace{1mm} Ces classes d'objet sont utilisées pour agréger les opérations de lecture et d'écriture sous des classes parent communs:
 
{\ttfamily
( LOG\_SCHEMA\_OC .2 NAME 'auditReadObject' DESC 'OpenLDAP read request\\ record' SUP auditObject STRUCTURAL MUST reqDN )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .3 NAME 'auditWriteObject' DESC 'OpenLDAP write\\ request record' SUP auditObject STRUCTURAL MUST reqDN )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Classes d'objets spécifiques aux requêtes }
 
\
 
\hspace{1mm} Chaque requête ldap a sa propre classe d'objet contenant tous les attributs nécessaire pour représenter une instance de cette requête:
 
{\ttfamily
( LOG\_SCHEMA\_OC .4 NAME 'auditAbandon' DESC 'Abandon operation' SUP\\ auditObject STRUCTURAL MUST reqId )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .5 NAME 'auditAdd' DESC 'Add operation' SUP\\ auditWriteObject STRUCTURAL MUST reqMod )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .6 NAME 'auditBind' DESC 'Bind operation' SUP\\ auditObject STRUCTURAL MUST ( reqDN \$ reqMethod \$ reqVersion ) )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .7 NAME 'auditCompare' DESC 'Compare operation' SUP\\ auditReadObject STRUCTURAL MUST reqAssertion )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .8 NAME 'auditDelete' DESC 'Delete operation' SUP\\ auditWriteObject STRUCTURAL MAY reqOld )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .9 NAME 'auditModify' DESC 'Modify operation' SUP\\ auditWriteObject STRUCTURAL MUST reqMod MAY reqOld )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .10 NAME 'auditModRDN' DESC 'ModRDN operation' SUP\\ auditWriteObject STRUCTURAL MUST ( reqNewRDN \$ reqDeleteOldRDN ) MAY\\ ( reqNewSuperior \$ reqOld ) )\\ ( LOG\_SCHEMA\_OC .11 NAME 'auditSearch' DESC 'Search operation' SUP\\ auditReadObject STRUCTURAL MUST ( reqScope \$ reqDerefAliases \$\\ reqAttrsonly ) MAY ( reqFilter \$ reqAttr \$ reqEntries \$ reqSizeLimit\\ \$ reqTimeLimit ) )\\ \hspace{2mm}\\ ( LOG\_SCHEMA\_OC .12 NAME 'auditExtended' DESC 'Extended operation'\\ SUP auditObject STRUCTURAL MAY reqData )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Classe conteneur générique }
 
\
 
\hspace{1mm} Cette classe d'objet peut être utilisée pour l'entrée parent des enregistrements:
 
{\ttfamily
( LOG\_SCHEMA\_OC .0 NAME 'auditContainer' DESC 'AuditLog container'\\ SUP top STRUCTURAL MAY ( cn \$ reqStart \$ reqEnd ) )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Discussion du schéma - AuditObject }
 
\
 
\hspace{1mm}  \textbf{1. reqDN}: le DN de l'entrée à laquelle le requête s'applique. Dans le cas d'une requête ModRDN, le reqDN donne le DN de l'entrée avant qu'elle ait été modifiée. Dans le cas d'un requête Search, le reqDN est le DN de base de la recherche. Syntaxe: DN.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{2. reqStart}: la date du début de la requête sur le serveur. \textbf{reqEND}: la date de la fin de la requête sur le serveur. Les timestamps doivent avoir une résolution suffisante pour s'assurer que les valeur de reqStart et reqEnd sont uniques. Les serveurs devraient utiliser reqStart ou reqEnd comme RDN de l'enregistrement. Ce choix permettra de les les enregistrements dans l'ordre ascendant, bien que les 2 alternatives peuvent produire des résultats différents. Dans le cas où l'horloge du serveur ne fournir pas de temps suffisamment précis, une simple compteur peut être utilisé dans la partie fractionnelle des secondes. Syntaxe: generalizedTime.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{3. reqType}: le type de la requête: \textbf{abandon}, \textbf{add}, \textbf{bind}, \textbf{compare}, \textbf{delete}, \textbf{modify}, \textbf{modrdn}, \textbf{search} ou \textbf{extended\{OID\}}. Pour les requêtes étendues, d'OID de la requête est inclue dans la chaîne. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{4. reqSession}: une valeur qui est une constante pour toutes les opérations se produisant dans une séquence bind/unbind. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{5. reqAuthzID}: L'identité d'authorisation utilisé pour effectuer la requête. Généralement la même que reqDN de la requête bind ayant le même reqSession, mais peut être altéré par divers contrôles et autres traitements. Syntaxe: DN
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{6. reqResult}: Le code de résultat LDAP de la requête complétée. Cette valeur peut être omise pour les requêtes qui n'ont pas de résultat définis (ex: abandon et unbind) et pour les requêtes qui ont été abandonnées. Syntaxe: Integer
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{7. reqMessage}: Le message d'erreur textuel accompagnant le résultat, s'il y'en a un. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{8. reqReferral}: Les référants qui ont accompagné le résultat, au format URI LDAP. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{9. reqControls}: le jeu de contrôles de requête accompagnant une requête. \textbf{seqRespControls}: le jeu de contrôles de réponse accompagnant le résultat de la requête. Chaque valeur représente un seul contrôle. l'ordre est préservé en utilisant l'extension de schéma X-ORDERED 'VALUES'. Syntaxe: Control
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge AuditContainer }
 
\
 
\hspace{1mm}  \textbf{reqStart}: le timestamp du premier enregistrement dans le log. \textbf{reqEnd}: le timestamp du dernier enregistrement dans le log. Syntaxe: generalizedTime
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Abandon }
 
\
 
\hspace{1mm}  \textbf{reqId}: l'ID d'une requête à abandonner. Syntaxe: Integer
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Bind }
 
\
 
\hspace{1mm}  \textbf{reqVersion}: La version du protocol du la requête. Syntaxe: Integer
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqMethod}: La méthode bind. Soit Simple, soit SASL/mécanisme. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Compare }
 
\
 
\hspace{1mm}  \textbf{reqAssertion}: L'AVA de la requête. Syntaxe: DirectoryString
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Rename }
 
\
 
\hspace{1mm}  \textbf{reqNewRDN}: Le nouveau rdn de la requête. Syntaxe: DN
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqDeletedOldRDN}: le deleteOldRDN de la requête. Syntaxe: Boolean
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqNewSuperior}: le nouveau DN supérieur de la requête. Syntaxe: DN.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Add et Modify }
 
\
 
\hspace{1mm}  \textbf{reqMod}: Les modifications de la requête. L'encodage est définis par la grammaire suivante (ABNF):
\vspace{5mm} \\
 
 
{\ttfamily
mod = attr ":" modop\\ attr = AttributeDescription from \texttt{[}RFC2251\texttt{]}\\ modop = add / delete / replace / increment\\ add = "+" sp value\\ delete = "-" \texttt{[} sp value \texttt{]}\\ replace = "=" \texttt{[} sp value \texttt{]}\\ increment = "\#" sp value\\ sp = " "\\ value = AttributeValue from \texttt{[}RFC2251\texttt{]}\\
}
\vspace{8mm}
 
\hspace{1mm}  Note que les requêtes Add utilisent uniquement le format add modop. Syntaxe: OctetString
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqOld}: Les valeurs précédente d'un attribut modifié. L'encodage est sous la forme \textbf{attr ":" sp value}, en utilisant la même forme que reqMod. Syntaxe: OctetString
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Delete }
 
\
 
\hspace{1mm}  \textbf{reqOld}: le valeurs précédente d'une entrée supprimée. L'encodage est le même que plus haut. Syntaxe: OctetString
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Search }
 
\
 
\hspace{1mm}  \textbf{reqScope}: le scope de la recherche. base, one, sub ou subord. Syntaxe: DirectoryString
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqDerefAliases}: le paramètre derefAliases de la recherche. never, searching, finding, ou always. Syntaxe: DirectoryString
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqAttrsOnly}: le paramètre typesOnly de la requête. Syntaxe: Boolean
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqFilter}: Le filtre de la recherche. Syntaxe: DirectoryString
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqSizeLimit}: La limite de taille de la requête
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqTimeLimit}: Le limite de temps de la requête. Syntaxe: Integer
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqAttr}: Les attributs spécifiquement demandés. Syntaxe: DirectoryString
\vspace{5mm} \\
\hspace{1mm}  \textbf{reqEntries}: Le nombre total d'entrées retournées pour cet requête. Syntaxe: Integer
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Extended }
 
\
 
\hspace{1mm}  \textbf{reqData}: Les données accompagnant le requête. Syntaxe: OctetString
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm}  Dans les exemples suivants les enregistrements résident sous "cn=log" et sont nommés par leur attribut "reqStart"
\vspace{5mm} \\
 
 
\hspace{1mm} dn: reqStart=20051017081049.000000Z,cn=log
 
{\ttfamily
objectClass: auditBind\\ reqStart: 20051017081049.000000Z\\ reqEnd: 20051017081049.000001Z\\ reqType: bind\\ reqSession: 0\\ reqAuthzID:\\ reqDN: cn=manager,dc=example,dc=com\\ reqResult: 0\\ reqVersion: 3\\ reqMethod: SIMPLE\\ \hspace{2mm}\\ dn: reqStart=20051017081049.000002Z,cn=log\\ objectClass: auditSearch\\ reqStart: 20051017081049.000002Z\\ reqEnd: 20051017081049.000003Z\\ reqType: search\\ reqSession: 0\\ reqAuthzID: cn=Manager,dc=example,dc=com\\ reqDN: dc=example,dc=com\\ reqResult: 0\\ reqScope: one\\ reqDerefAliases: never\\ reqAttrsOnly: FALSE\\ reqFilter: (objectClass=*)\\ reqSizeLimit: -1\\ reqTimeLimit: -1\\ reqEntries: 3\\ \hspace{2mm}\\ dn: reqStart=20051017081049.000004Z,cn=log\\ objectClass: auditObject\\ reqStart: 20051017081049.000004Z\\ reqEnd: 20051017081049.000005Z\\ reqType: unbind\\ reqSession: 0\\ reqAuthzID: cn=Manager,dc=example,dc=com\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge requête Add }
 
\
 
\hspace{1mm} Enregistrement issue de l'ajout d'une entrée dans l'annuaire:
 
{\ttfamily
dn: reqStart=20051017083706.000001Z,cn=log\\ objectClass: auditAdd\\ structuralObjectClass: auditAdd\\ reqStart: 20051017083706.000001Z\\ reqEnd: 20051017083706.000002Z\\ reqType: add\\ reqSession: 4\\ reqAuthzID: cn=Manager,dc=example,dc=com\\ reqDN: ou=People,dc=example,dc=com\\ reqResult: 0\\ reqMod: objectClass:+ organizationalUnit\\ reqMod: ou:+ People\\ reqMod: description:+ A bunch of people will be here\\ reqMod: structuralObjectClass:+ organizationalUnit\\ reqMod: entryUUID:+ f16734aa-d334-1029-9290-cd8deceec6b0\\ reqMod: creatorsName:+ cn=Manager,dc=example,dc=com\\ reqMod: createTimestamp:+ 20051017083706Z\\ reqMod: entryCSN:+ 20051017083706Z\#000000\#00\#000000\\ reqMod: modifiersName:+ cn=Manager,dc=example,dc=com\\ reqMod: modifyTimestamp:+ 20051017083706Z\\
}
\vspace{8mm}
 
\hspace{1mm}  Notez que les attributs opérationnels écrits avec la requête sont inclus dans le log. Toutes les statistiques associées avec une entrée seront exposées, permettant à un client de réplication d'avoir une copie complète de l'entrée.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Requête Modify }
 
\
 
\hspace{1mm} Enregistrement issue d'une entrée modifiée dans l'annuaire
 
{\ttfamily
dn: reqStart=20051017083734.000010Z,cn=log\\ objectClass: auditModify\\ reqStart: 20051017083734.000010Z\\ reqEnd: 20051017083734.000011Z\\ reqType: modify\\ reqSession: 1\\ reqAuthzID: cn=Manager,dc=example,dc=com\\ reqDN: ou=People,dc=example,dc=com\\ reqResult: 0\\ reqMod: description:-\\ reqMod: entryCSN:= 20051017083734Z\#000003\#00\#000000\\ reqMod: modifiersName:= cn=Manager,dc=example,dc=com\\ reqMod: modifyTimestamp:= 20051017083734Z\\ reqOld: description: A bunch of people will be here\\
}
\vspace{8mm}
 
\hspace{1mm}  Dans cet exemple, l'attribut description a été supprimé de l'entrée. Sa valeur original est enregistrée dans l'attribut reqOld.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Requête Rename }
 
\
 
\hspace{1mm} Enregistrement issue du renommage d'une entrée dans l'annuaire
 
{\ttfamily
dn: reqStart=20051017083734.000018Z,cn=log\\ objectClass: auditModRDN\\ reqStart: 20051017083734.000018Z\\ reqEnd: 20051017083734.000019Z\\ reqType: modrdn\\ reqSession: 1\\ reqAuthzID: cn=Manager,dc=example,dc=com\\ reqDN: ou=People,dc=example,dc=com\\ reqResult: 0\\ reqNewRDN: ou=Populi\\ reqDeleteOldRDN: TRUE\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Requête Delete }
 
\
 
\hspace{1mm} Enregistrement issue de la suppression d'une entrée dans l'annuaire
 
{\ttfamily
dn: reqStart=20051017083734.000020Z,cn=log\\ objectClass: auditDelete\\ reqStart: 20051017083734.000020Z\\ reqEnd: 20051017083734.000021Z\\ reqType: delete\\ reqSession: 1\\ reqAuthzID: cn=Manager,dc=example,dc=com\\ reqDN: ou=Populi,dc=example,dc=com\\ reqResult: 0\\ reqOld: ou: Populi\\ reqOld: objectClass: organizationalUnit\\ reqOld: structuralObjectClass: organizationalUnit\\ reqOld: entryUUID: f16734aa-d334-1029-9290-cd8deceec6b0\\ reqOld: creatorsName: cn=Manager,dc=example,dc=com\\ reqOld: createTimestamp: 20051017083706Z\\ reqOld: entryCSN: 20051017083734Z\#000007\#00\#000000\\ reqOld: modifiersName: cn=Manager,dc=example,dc=com\\ reqOld: modifyTimestamp: 20051017083734Z\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Notes d'usage }
 
\
 
\hspace{1mm}  Les serveurs peuvent implémenter seulement un sous-jeu de ces attributs, ou fournir des mécanismes de configuration pour réduire la plage d'opération couverte dans les logs. Les clients de réplication travaillant depuis un log complet peuvent utiliser un filtre de recherche avec les termes \textbf{"(\&(objectClass=AuditWriteObject)(reqResult=0))"} pour filtrer les enregistrements peut utile.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Considérations IANA }
 
\
 
\hspace{1mm} En accord avec la rfc3383:
 
{\ttfamily
OpenLDAP\_Experimental = 1.3.6.1.4.1.4203.666\\ LOG\_SCHEMA = OpenLDAP\_Experimental.11.5\\ LOG\_SCHEMA\_AT = LOG\_SCHEMA.1\\ LOG\_SCHEMA\_OC = LOG\_SCHEMA.2\\ LOG\_SCHEMA\_SYN = LOG\_SCHEMA.3\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
