\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 16:05:59 CEST 2013}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={slapd.conf},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Fichier de configuration de slapd (ancien format)},
CreationDate={D:20130926160559},
ModDate={D:20130926160559},
Keywords={LDAP;OpenLDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge slapd.conf }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Fichier de configuration de slapd (ancien format)}
 
\vspace{10mm}
 
\hspace{1mm}  Le fichier de configuration (slapd.conf) consiste de 3 types d'information de configuration: \textbf{global}, \textbf{backend} et \textbf{database}. Les informations globales sont spécifiées en premier, suivis par les informations associées avec un type de backend particulier, puis les informations associées avec un type particulier de base. Les directives globales peuvent être écrasées par des directives de base ou de backend, et les directives backend peuvent être écrasées par les directives de base de données.
\vspace{5mm} \\
\hspace{1mm}  Les lignes blanches et les lignes de commentaire commençant par un \# et sont ignorées. Si une ligne commence par un espace blanc, il est considéré comme la suite de la ligne précédente (même si la précédente ligne est un commentaire).
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Format général }
 
\
 
{\ttfamily
\# Directives de configuration globale:\\ <global config directives>\\ \hspace{2mm}\\ \# backend definition\\ backend <typeA>\\ <backend-specific directives>\\ \hspace{2mm}\\ \# first database definition \& config directives\\ database <typeA>\\ <database-specific directives>\\ \hspace{2mm}\\ \# second database definition \& config directives\\ database <typeB>\\ <database-specific directives>\\ \hspace{2mm}\\ \# second database definition \& config directives\\ database <typeA>\\ <database-specific directives>\\ \hspace{2mm}\\ \# subsequent backend \& database definitions \& config directives\\ ...\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Directives Global }
 
\
 
\hspace{1mm}  Les directives décrites dans cette section s'appliquent à tous les backend et bases.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} access to <what> \texttt{[} by <who> \texttt{[}<accesslevel>\texttt{]}\texttt{[}<control>\texttt{]}\texttt{]}+]{Cette directive donne accès spécifié par accesslevel à un set d'entrée et/ou d'attributs spécifiés par what, par un ou plusieurs utilisateurs spécifiés par who. \textbf{note}: si aucune directive access n'est spécifié, la politique est access to * by * read.}
\item[\hspace{1mm} attributetype <rfc4512 Attribute Type Description>]{cette directive définit un type d'attribut.}
\item[\hspace{1mm} idletimeout <integer>]{Spécifie le nombre de secondes à attendre avant de forcer la fermeture de la connexion d'un client. à 0, désactive la fonction.}
\item[\hspace{1mm} include <filename>]{Spécifie une fichier à lire, contenant d'autres informations de configuration. Généralement utilisé pour inclure les spécification de schéma.}
\item[\hspace{1mm} loglevel <integer>]{Cette directive spécifie le niveau de log (actuellement placé dans syslogd LOG\_LOCAL4). Le loglevel peut être spécifié sous forme d'entier ou par mot clé.}
\end{description}
 
\hspace{1mm} level\_keyword\_\_\_\_\_\_\_\_Description
 
{\ttfamily
-1\_\_\_\_any\_\_\_\_\_\_\_\_\_\_\_\_enable all debugging\\ 0\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_no debugging\\ 1\_\_\_\_\_(0x1 trace)\_\_\_\_trace function calls\\ 2\_\_\_\_\_(0x2 packets)\_\_debug packet handling\\ 4\_\_\_\_\_(0x4 args)\_\_\_\_\_heavy trace debugging\\ 8\_\_\_\_\_(0x8 conns)\_\_\_\_connection management\\ 16\_\_\_\_(0x10 BER)\_\_\_\_\_print out packets sent and received\\ 32\_\_\_\_(0x20 filter)\_\_search filter processing\\ 64\_\_\_\_(0x40 config)\_\_configuration processing\\ 128\_\_\_(0x80 ACL)\_\_\_\_\_access control list processing\\ 256\_\_\_(0x100 stats)\_\_stats log connections/operations/results\\ 512\_\_\_(0x200 stats2)\_stats log entries sent\\ 1024\_\_(0x400 shell)\_\_print communication with shell backends\\ 2048\_\_(0x800 parse)\_\_print entry parsing debugging\\ 16384\_(0x4000 sync)\_\_syncrepl consumer processing\\ 32\_\_\_\_(0x8000 none)\_\_\_only messages that get logged whatever log level is set\\
}
\vspace{8mm}
 
\hspace{1mm} on peut additionner les valeurs: \\
\hspace{1mm} \textbf{loglevel 129} \\
\hspace{1mm} \textbf{loglevel 0x81} \\
\hspace{1mm} \textbf{loglevel 128 1} \\
\hspace{1mm} sont équivalent: \\
\hspace{1mm} \textbf{loglevel 0x80 0x1} \\
\hspace{1mm} et \\
\hspace{1mm} \textbf{loglevel acl trace} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} objectclass <rfc4512 Object Class Description>]{Cette directive définit une classe objet}
\item[\hspace{1mm} referral <URI>]{Cette directive spécifie le référant quand slapd ne peut trouver une base locale pour manipuler les requêtes.}
\item[\hspace{1mm} sizelimit <integer>]{Cette directive spécifie le nombre maximum d'entrée à retourner pour une opération de recherche. défaut: sizelimit 500}
\item[\hspace{1mm} timelimit <integer>]{Cette directive spécifie le nombre maximum de seconde que slapd va passer à répondre à une requete. Au delà, il envoie un exceeded timelimit. defaut: timelimit 3600}
\end{description}
 
\vspace{1cm}{\huge Directives Backend }
 
\
 
\hspace{1mm}  Les directives dans cette section s'appliquent uniquement au backend dans lequel elles sont définies. Elles sont supportées par tous les types de backend. Les directives d'un backend s'appliquent à toutes les instances de base du même type.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} backend <type>]{Cette directive marque le début d'une déclaration backend. <type> peut être un des types supportés:}
\end{description}
 
\hspace{1mm} Types\_\_\_Description
 
{\ttfamily
bdb\_\_\_\_\_Berkeley DB transactional backend\\ dnssrv\_\_DNS SRV backend\\ hdb\_\_\_\_\_Hierarchical variant of bdb backend\\ ldap\_\_\_\_Lightweight Directory Access Protocol (Proxy) backend\\ meta\_\_\_\_Meta Directory backend\\ monitor\_Monitor backend\\ passwd\_\_Provides read-only access to passwd(5)\\ perl\_\_\_\_Perl Programmable backend\\ shell\_\_\_Shell (extern program) backend\\ sql\_\_\_\_\_SQL Programmable backend\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Directives générales de bases de données }
 
\
 
\hspace{1mm}  Les directives dans cette section s'appliquent uniquement à la base dans laquelle elles sont définies
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} database <type>]{Cette directive marque le début d'une déclaration d'instance de base. <type> doit être un des type de backend supporté.}
\item[\hspace{1mm} limits <who><limit>\texttt{[}<limit>\texttt{[}...\texttt{]}\texttt{]}]{spécifie les limites de temps et de taille sur qui initie une opération}
\item[\hspace{1mm} readonly on|off]{Cette directive place la base en lecture seule}
\item[\hspace{1mm} rootdn <DN>]{Cette directive spécifie le DN qui n'est pas sujet aux restriction de limites administratives et de contrôle d'accès pour les opérations sur cette base. le DN doit référer à une entrée dans l'annuaire. Le DN peut référer à une identité SASL. (ex: rootdn "cn=Manager,dc=example,dc=com", avec sasl: rootdn "uid=root,cn=example.com,cn=digest-md5,cn=auth")}
\item[\hspace{1mm} rootpwd <password>]{Cette directive spécifie le mot de passe pour le rootdn. Il est possible d'utiliser slappasswd -s pour générer un hash.}
\item[\hspace{1mm} suffix <dn suffix>]{Cette directive spécifie le suffixe DN des requêtes qui seront passé à cette base. Plusieurs lignes peuvent être spécifiées, et au moins une est requise pour chaque définition de base.(ex: suffix "dc=example,dc=com" \# les requêtes avec un DN se terminant avec "dc=Example,dc=com" seront passées à ce backend)}
\item[\hspace{1mm} syncrepl]{}
\item[\hspace{1mm} syncrepl rid=<replica ID>]{}
\item[\hspace{1mm} provider=ldap\texttt{[}s\texttt{]} ://<hostname>\texttt{[}:port\texttt{]}]{}
\item[\hspace{1mm} type=refreshOnly]{}
\item[\hspace{1mm} \texttt{[}interval=dd:hh:mm:ss\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}retry=\texttt{[}<retry interval> <\# of retries>\texttt{]}+\texttt{]}]{}
\item[\hspace{1mm} searchbase=<base DN>]{}
\item[\hspace{1mm} \texttt{[}filter=<filter str>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}scope=sub|one|base\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}attrs=<attr list>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}attrsonly\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}sizelimit=<limit>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}timelimit=<limit>\texttt{]}]{}
\item[\hspace{1mm} schemachecking=on]{}
\item[\hspace{1mm} bindmethod=simple]{}
\item[\hspace{1mm} \texttt{[}binddn=<DN>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}saslmech=<mech>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}authcid=<identity>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}authzid=<identity>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}credentials=<passwd>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}realm=<realm>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}secprops=<properties>\texttt{]}]{}
\item[\hspace{1mm} starttls=yes]{}
\item[\hspace{1mm} \texttt{[}tls\_cert=<file>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_key=<file>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_cacert=<file>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_cacertdir=<path>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_reqcert=never|allow|try|demand\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_ciphersuite=<ciphers>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}tls\_crlcheck=none|peer|all\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}logbase=<base DN>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}logfilter=<filter str>\texttt{]}]{}
\item[\hspace{1mm} \texttt{[}syncdata=default|accesslog|changelog\texttt{]}]{Cette directive spécifie la base courante comme réplique du contenu d'un master en utilisant le moteur de réplication syncrepl.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} provider]{indique le master. spécifie un schéma, un hôte et un port}
\item[\hspace{1mm} rid]{est utilisé pour l'identification de la directive syncrepl courante dans le serveur de réplication.}
\item[\hspace{1mm} searchbase]{n'a pas de valeur par défaut et doit toujours être spécifié.}
\item[\hspace{1mm} scope]{est à sub par défaut}
\item[\hspace{1mm} filter]{est à (objectclass=*) par défaut}
\item[\hspace{1mm} attrs]{à "*,+" par défaut pour répliquer tous les utilisateurs et tous les attributs optionnels}
\item[\hspace{1mm} attrsonly]{est désactivé par défaut}
\item[\hspace{1mm} sizelimit]{est à unlimited par défaut}
\item[\hspace{1mm} timelimit]{est à unlimited par défaut}
\end{description}
 
\hspace{1mm}  Le protocole de synchronisation de contenu LDAP à 2 types d'opérations: \textbf{refreshOnly} et \textbf{refreshResultEntry}. Avec \textbf{RefreshOnly}, la synchronisation est périodique. l'interval est spécifié par le paramètre interval. Par défaut il est à 1 jour. Avec \textbf{refreshAndPersist}, la synchronisation est persistante.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si une erreur se produit durant la réplication, le réplicateur tente de se reconnecter en accord avec le paramètre \textbf{retry}, qui est une liste de paire de paramètres \textbf{<retry interval>} et \textbf{<\# of retries>}. Par exemple, \textbf{retry "60 10 300 3"} tente de se reconnecter toutes les 60 secondes, 10 fois, puis retente toutes les 300 secondes, 3 fois, avant de stopper la tentative de reconnexion.
\vspace{5mm} \\
 
 
\hspace{1mm}  La vérification de schéma peut être renforcée avec le paramètre \textbf{schemachecking}. Activé, toute entrée répliquée sera vérifié pour ce schéma avant de le stocker. Le paramètre \textbf{binddn} donne le DN à lier pour la recherche syncrepl. Il doit être un DN qui a les droits d'accès en lecture.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{bindmethod} est simple ou sasl, en fonction si l'authentification par mot de passe est simple pour sasl. L'authentification simple ne devrait pas être utilisé a moins que l'intégrité des données des protections de confidentialité soient en place (par exemple: TLS ou IPsec) L'authentification simple requière les paramètres \textbf{binddn} et \textbf{credentials}. L'authentification SASL requière la spécification d'un mécanisme utilisant le paramètre \textbf{saslmech}. \textbf{authcid} et \textbf{credential} peuvent être spécifiés pour l'identité d'authentification et le credential. authzid peut être utilisé pour spécifier l'identité d'autorisation.
\vspace{5mm} \\
 
 
\hspace{1mm}  le paramètre \textbf{realm} spécifie un domaine. le paramètre \textbf{secprops} spécifie les propriétés de sécurité Cyrus SASL.
\vspace{5mm} \\
\hspace{1mm}  \textbf{starttls} spécifie l'utilisation de TLS. Si l'argument critical est spécifié, la session sera abordée si la requête StartTLS échoue. Sinon la session SyncRepl continu sans TLS.
\vspace{5mm} \\
 
 
\hspace{1mm}  Au lieu de répliquer toutes les entrées, le réplicateur peut chercher les logs de modification de données. Ce mode d'opération s'appel delta syncrepl. En plus des paramètres ci-dessus, les paramètres logbase et logfilter doivent être spécifiés pour les logs à utiliser. Le paramètre syncdata doit être soit à "accesslog" si le log est conforme au format slapo-accesslog ou "changelog". Si le paramètre syncdata est omis ou à "default", les paramètres de log seront ignorés. La réplication syncrepl est supportées par bdb et hdb.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} updateref <URL>]{Cette directive est seulement applicable dans un slave. Il spécifie l'URL à retourner aux clients qui envoient des requêtes de mise à jours sur la réplique. Peut être spécifié plusieurs fois.}
\item[\hspace{1mm} directives de base BDB et HDB]{Ces directives s'appliquent uniquement aux bases BDB et HDB.}
\item[\hspace{1mm} directory <directory>]{Cette directive spécifie le dossier où les fichiers contenant la base et indices associés sont stockés.}
\end{description}
 
\vspace{1cm}{\huge Exemple de fichier de configuration }
 
\
 
\hspace{1mm} L'exemple suivant définit 2 bases pour manipuler différentes parties d'un arbre x500. Les 2 bases sont des instances BDB.
 
{\ttfamily
\# example config file - global configuration section\\ include /usr/local/etc/schema/core.schema \# inclue un fichier de définition de schéma\\ referral ldap ://root.openldap.org \# les requêtes non local sur une des bases définies vont référer au server LDAP à l'hôte root.openldap.org\\ access to\hspace{2mm}*\hspace{2mm}by\hspace{2mm}*\hspace{2mm}read \# Contrôle d'accès global.\\ \hspace{2mm}\\ \# BDB definition for the example.com\\ database bdb\\ suffix "dc=example,dc=com" \# suffix DN pour cette base\\ directory /usr/local/var/openldap-data \# dossier où se trouve les fichiers de cette base.\\ rootdn "cn=Manager,dc=example,dc=com" \# rootdn pour cette base\\ rootpw secret \# mdp du rootdn\\ \# indexed attribute definitions \\ index uid pres,eq \# indique les indices pour maintenir divers attributs\\ index cn,sn,uid pres,eq,approx,sub\\ index objectClass eq\\ \# database access control definitions\\ access to attrs=userPassword \# Spécifier le controle d'accès pour les entrées dans cette base.\\ by self write\\ by anonymous auth\\ by dn.base="cn=Admin,dc=example,dc=com" write\\ by\hspace{2mm}*\hspace{2mm}none\\ access to\hspace{2mm}*\\ by self write\\ by dn.base="cn=Admin,dc=example,dc=com" write\\ by\hspace{2mm}*\hspace{2mm}read\\ \hspace{2mm}\\ \# BDB definition for example.net\\ database bdb\\ suffix "dc=example,dc=net"\\ directory /usr/local/var/openldap-data-net\\ rootdn "cn=Manager,dc=example,dc=com"\\ index objectClass eq\\ access to\hspace{2mm}*\hspace{2mm}by users read\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
