Modèle fonctionnel
Le modèle fonctionnel LDAP définit la manière dont il est possible d’accéder aux informations contenues dans l’annuaire.
Il se constitue d’opérations qui peuvent être regroupées en trois catégories :
	•	Les opérations d’authentification : Bind, Unbind et Abandon sont utilisées pour se connecter et se déconnecter vers et depuis un serveur LDAP et également d’appliquer les droits d’accès aux informations.
	•	Les opérations de type requête : Search et Compare sont utilisées pour effectuer des recherches d’entrées de l’annuaire répondant aux critères spécifiés par l’utilisateur.
	•	Et les opérations de mise à jour : Add, Delete, Modify et ModifyRDN sont utilisées dans l’ordre pour ajouter, supprimer, modifier une entrée. L’opération ModifyRDN ne modifie seulement que le RDN de l’entrée, pas son contenu.
1. Les opérations de type requête
L’opération la plus courante est la recherche. Elle est notamment très flexible et permet d’afficher des résultats très avancés grâce à l’utilisation d’options de recherches complexes.
¬
Il n’y a pas d’opérations distinctes pour la lecture du contenu d’une entrée ou bien le listing des entrées de l’annuaire ; ces opérations sont incorporées dans la fonction de recherche.
L’opération de recherche permet à un client de demander à un serveur LDAP de rechercher dans une partie du DIT des informations répondant aux critères spécifiés par l’utilisateur puis d’afficher les résultats selon également des critères spécifiés par l’utilisateur. Il sera ainsi possible de spécifier le point de départ de la recherche dans le DIT, sa portée, les attributs/valeurs qu’une entrée doit contenir pour être considérée et les attributs à retourner (à afficher à l’utilisateur) pour les entrées correspondantes.
Quelques exemples de recherches pourraient être :
	•	Trouvez l’adresse postale de : cn=John Smith, ou=utilisateur,dc=exemple,dc=com
	•	Trouvez toutes les entrées présentes sous l’unité d’organisation : ou=utilisateur,dc=exemple,dc=com
	•	Trouvez l’adresse e-mail et le numéro de téléphone de toute personne de la société « exemple » dont le nom de famille contient les caractères « miller » et possédant un numéro de fax. 
Pour effectuer une recherche, les paramètres suivants doivent être spécifiés :
	•	Base : spécifie le DN à utiliser comme point de départ, appelé l’objet de base, de la recherche. L’objet de base est une entrée du DIT.
	•	Portée : spécifie la profondeur de recherche effectuée à partir de l’objet de base. Il existe trois choix : baseObject, singleLevel et wholeSubtree. Si baseObject est spécifié, seul l’objet de base est examiné. Si singleLevel est spécifié, seules les sous-entrées de l’objet de base sont explorées ; l’objet de base lui-même n’est pas examiné. Si wholeSubtree est spécifié, l’objet de base et tous ses descendants sont parcourus.
	•	Filtre de recherche : spécifie les critères auxquels une entrée doit correspondre. Le filtre de recherche est une combinaison booléenne de couple « attribut/valeur ». Les valeurs des couples « attribut/valeur » sont ensuite testées selon une opération d’égalité (inférieur, supérieur ou égal) et aussi associées selon les opérateurs logiques de type AND et OR.
	•	Attributs au retour : spécifie les attributs à récupérer (et donc à afficher) à partir des entrées qui correspondent aux critères de recherche. Étant donné qu’une entrée peut posséder plusieurs attributs, cela permet à l’utilisateur de ne visualiser que les attributs qui l’intéressent et notamment leurs valeurs. Cependant, il est possible de renvoyer d’autres types d’attributs. Par exemple si la recherche consiste à lister les noms, les prénoms et les dates d’anniversaire des employés de l’entreprise habitant à Paris, alors il faudra spécifier city=paris comme filtre de recherche et les attributs nom, prénom et date d’anniversaire comme attributs de retour.
	•	Limites : les recherches peuvent être très générales, examinant de gros sous-arbres, voire même la totalité du DIT, et générant ainsi de nombreuses entrées. L’utilisateur peut spécifier des limites de temps et de taille : de façon à ne pas consommer trop de ressources, la limite de taille restreint le nombre d’entrées retournées par la recherche, le délai celui du temps total de la recherche. Les serveurs sont libres d’imposer des limites plus strictes que celles demandées par le client.
2. La syntaxe du filtre de recherche
Le filtre de recherche définit les critères selon lesquels une entrée doit correspondre.
Sa syntaxe est la suivante :
attribute operator value
Par exemple, pour rechercher une personne nommée John Smith, le filtre de recherche serait cn = John Smith. Dans ce cas, cn est l’attribut, = est l’opérateur, et John Smith est la valeur. Ce filtre de recherche renverra le nom des entrées (leur DN) qui contiennent un attribut cn avec la valeur : John Smith.
Le tableau de la figure 2-8 montre tous les opérateurs du filtre de recherche disponible :
Opérateur	Description	Exemple	
=	Renvoie les entrées dont l’attribut est égal à la valeur.	cn = John Smith trouve l’entrée avec le nom commun John Smith.	
>=	Renvoie les entrées dont l’attribut est supérieur ou égal à la valeur.	sn> = smith trouve toutes les entrées situées en dessous de smith dans l’ordre alphabétique : de smith à z*.	
<=	Renvoie les entrées dont l’attribut est inférieur ou égal à la valeur.	sn <= smith trouve toutes les entrées situées au-dessus de smith dans l’ordre alphabétique : de a* à smith.	
=*	Renvoie les entrées qui ont une valeur définie pour cet attribut.	sn = * trouve toutes les entrées qui ont un attribut sn.	
~=	Renvoie les entrées dont la valeur d’attribut est approximativement...	sn ~ = smit pourrait trouver l’entrée sn = smith.	
Figure 2-8
Le caractère * correspond à n’importe quelle chaîne de caractères et peut être utilisé avec l’opérateur =.
Par exemple, cn = J * Smi * peut correspondre aussi bien à John Smith qu’à Jan Smitty. Les filtres de recherche peuvent être combinés avec des opérateurs booléens pour former des filtres de recherche plus complexes.
La syntaxe pour combiner les filtres de recherche est :
("&" or "|" (filter1) (filter2) (filter3) ...) ("!" (Filtre))
Les opérateurs booléens sont listés dans le tableau de la figure 2-9 ci-dessous :
Boolean operator	Description	
&	Renvoie les entrées correspondant à tous les critères de filtrage spécifiés.	
|	Renvoie les entrées correspondant à un ou plusieurs des critères de filtrage.	
!	Renvoie les entrées pour lesquelles le filtre n’est pas vrai.
Cet opérateur ne peut être appliqué qu’à un seul filtre.
(! (Filtre)) est valide, mais (! (Filter1) (filter2)) ne l’est pas.	
Figure 2-9
Par exemple (| (sn = Smith) (sn = Miller)) correspond aux entrées avec le nom de famille Smith ou le nom de famille Miller. Les opérateurs booléens peuvent également être imbriqués comme dans (| (sn = Smith) (& (ou = Austin) (sn = Miller))), qui correspond à n’importe quelle entrée avec le nom Smith ou avec le nom de famille Miller présent dans l’unité organisationnelle Austin.
3. Comparaison
L’opération de comparaison consiste à comparer la valeur d’un attribut à celle d’un attribut d’une entrée de l’annuaire. Si l’entrée possède cette valeur, la requête retourne TRUE, sinon, elle renvoie FALSE. Et si l’attribut n’est pas présent, alors la requête retourne not found.
4. Les opérations de mise à jour
Les opérations de mise à jour modifient le contenu du répertoire. Le tableau de la figure 2-10 ci-dessous répertorie ces opérations :
Opération	Description	
add	Insère de nouvelles entrées dans l’annuaire.	
delete	Supprime les entrées existantes de l’annuaire.	
modify	Modifie les attributs et les valeurs contenus dans une entrée existante. Permet aussi l’ajout de nouveaux attributs ou la suppression d’attributs existants.	
modify DN	Modifie le RDN (le plus à gauche) d’un DN ou déplace un sous-arbre vers un nouvel emplacement dans le DIT.	
Figure 2-10
5. Les opérations d’authentification
Les opérations d’authentification sont utilisées pour établir et mettre fin à une session entre un client et un serveur LDAP. La session peut être sécurisée à différents niveaux allant d’une session anonyme non sécurisée, une session authentifiée dans laquelle le client s’identifie en fournissant un mot de passe, à une session sécurisée cryptée utilisant des mécanismes SASL. SASL a été ajouté dans LDAP version 3 afin de résoudre les problèmes de sécurité de l’authentification de la version LDAPv2.
Le tableau de la figure 2-11 ci-dessous répertorie les opérations d’authentification :
Opération	Description	
bind	Démarre une session LDAP entre un client et un serveur. Permet au client de prouver son identité en s’authentifiant sur le serveur.	
unbind	Termine une session client/serveur.	
abandon	Permet à un client de demander au serveur d’abandonner une opération exceptionnelle.	
Figure 2-11