Filtre de recherche

Présentation générale

Un filtre LDAP est comparable à une requête SQL. C'est une chaîne de caractères destinée à être exécutée pour récupérer des entrées d'un annuaire LDAP. Plus précisément elle ne définit que la partie WHERE d'une requête SQL: un filtre définit sur quels objets et sur quels attributs doit se faire la recherche.

Un filtre LDAP est donc constitué d'un ensemble d'opérations, portant sur des attributs, combinées avec les opérateurs booléens classiques: ET, OU et NON.

Une opération élémentaire de recherche s'écrit sous la forme : attribut OPERATEUR valeur La forme générale d'un filtre est une combinaison  : (operator(search operation)(search operation)...)).

La syntaxe complète des filtres LDAP est décrite dans le document [rfc2254], qui fait partie de l'ensemble des RFC définissant la norme LDAP.

Les opérations élémentaires

Une opération élémentaires est composée d'un attribut, d'un opérateur de comparaison et d'une valeur. Pour effectuer des filtres sur le type des objets, sur leur classe, il suffit d'utiliser leur objectclass comme un attribut. Au besoin, il est possible d'utiliser l'OID de l'attribut plutôt que son nom.

Les opérateurs de recherche sont les suivants:

  • Égalité : =
  • Approximation : ~=
  • Supérieur ou égal : >=
  • Inférieur ou égal : <=

S'il n'existe pas d'opérateur : "différent de", "strictement inférieur", ou "strictement supérieur", il est possible de les obtenir à l'aide des opérateurs autorisés, en utilisant un opérateur booléen "NON".

La valeur accepte le caractère '*' afin de permet des recherches sur des parties de chaines. Ce même caractère, seul, permet de tester la présence d'un attribut. Ce caractère n'est valide qu'avec l'opération d'égalité.

Une opération doit obligatoirement se trouver entre deux parenthèses. Les valeurs qui sont dans la partie droite d'une opération élémentaire ne sont pas entre quote, mais certains caractères doivent être échappés:

Tableau 3.1. Les caractères à échapper

Le caractère Sa valeur ASCII Le caractère dans un filtre
* 0x2a \2a
( 0x28 \28
) 0x29 \29
\ 0x5c \5c
NULL(caractère vide) 0x00 \00

Les opérateurs booléens sont les suivants:

  • L'opérateur NON : !
  • L'opérateur ET : &
  • L'opérateur OU : |

Un opérateur booléen s'applique à toutes les opérations qui suivent jusqu'à l'opérateur suivant.

Exemples de filtres simples

Exemple 3.1. Toutes les personnes ayant leur numéro de téléphone renseigné dans la base :

(&(objectclass=person)(telephoneNumber=*))

Exemple 3.2. Toutes les personnes dont le nom commence par 'A' et n'habitant pas Paris :

(&(objectclass=person)(cn=A*)(!(l=Paris)))

Exemple 3.3. Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre, ...):

(&(objectclass=person)(cn~=febvre))
(&(objectclass=person)(cn=*f*vre))

Les filtres étendus

En plus des attributs constituant une entrée d'un annuaire, il est possible, grâce aux filtres étendus, de considérer les éléments du DN comme faisant partie aussi de l'entrée elle même, lors de la recherche. La syntaxe est la suivante:

	    attribut:dn:=value
	  

Par exemple le filtre (ou:dn:=users) récupérera non seulement toutes les entrées qui ont un attribut ou qui a pour valeur users, mais aussi toutes les entrées dont le DN contient un attribut ou avec la valeur users.

L'autre possibilité offerte par les filtres étendus est de modifier la règle de comparaison sur un attribut. La syntaxe est la suivante:

	    attribut:oid-matching-rule:=value
	  

Par exemple, si un attribut a une règle de comparaison par défaut qui est insensible à la case, mais que l'on veut faire une recherche avec une valeur précise, qui tienne compte de la case, il faut modifier la règle de comparaison par défaut.

Exemple 3.4. Changement de règle de comparaison dans un filtre

Dans cet exemple, on rend l'opération d'égalité sensible à la case

	    (cn:2.5.13.5:=Mickey)
	  

Les filtres étendus permettent aussi de spécifier une règle de comparaison, sans spécifier d'attribut. La recherche s'effectue alors sur tous les attributs qui acceptent cette règle. On peut aussi étendre cette recherche au DN. Les syntaxes sont les suivantes:

	    :oid-matching-rule:=value
	    :dn:oid-matching-rule:=value
	  

Note

Tous les filtres ne marchent qu'avec l'opérateur d'égalité, et celui-ci s'écrit :=, lieu de = dans le cas de filtres simples.

Note

Il n'est pas permis non plus d'utiliser le caractère * pour faire des recherches sur des sous chaînes avec les filtres étendus.