Problème sur un OpenLDAP - LDAP: error code 18 - no matching rule

OpenLDAP est souvent un peu chatouilleux sur le respect de la syntaxe LDAP, nous l'avons déjà vu par ailleurs (cf . http://www.vincentliefooghe.net/node/45).

J'ai eu récemment des problèmes dans le provisionnement d'un annuaire OpenLDAP par ITIM, avec dans les traces ITIM (le fichier trace.log), les lignes :

[LDAP: error code 18 - modify/delete: contact: no equality matching rule]

L'attribut contact n'étant pas défini dans le schéma standard, il avait été ajouté dans notre schéma spécifique, avec la définition :

olcAttributeTypes: {79}( 1.3.6.1.4.1.12345.1.2.1.81 NAME 'contact' DESC 'contact' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

Effectivement, il n'y a pas de matching rule définie, que ce soit en EQUALITY ou SUBSTRING. De ce fait, une requête de type :

(contact=*)

va bien retourner les entrées donc l'attribut est renseigné, quel que soit sa valeur.
Mais la requête

(contact=mavaleur)

ne retourne rien, car il n'y a pas de règle associée.

Résolution du problème

Il faut donc modifier la définition de l'attribut, pour y ajouter les règles associées. Ceci s'effectue via un fichier LDIF. Par exemple :

olcAttributeTypes: {3}( 1.3.6.1.4.1.12345.1.2.1.4 NAME 'monAttribut' DESC 'Mon attribute' EQUALITY 2.5.13.2 SUBSTR 2.5.13.4 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

Par contre il n'est pas possible de modifier un attribut du schéma, il faut passer par un add / delete :

dn: cn={13}monSchema,cn=schema,cn=config
changetype: modify
delete: olcAttributeTypes
olcAttributeTypes: {3}( 1.3.6.1.4.1.12345.1.2.1.4 NAME 'monAttribut' DESC 'Mon attribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
add: olcAttributeTypes
olcAttributeTypes: {3}( 1.3.6.1.4.1.12345.1.2.1.4 NAME 'monAttribut' DESC 'Mon attribute' EQUALITY 2.5.13.2 SUBSTR 2.5.13.4 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

Il est également possible,si on veut éviter les répétitions, de faire hériter l'attribut des caractéristiques d'un attribut supérieur, tel que c'est fait par exemple pour l'attribut givenname :

olcAttributeTypes: {35}( 2.5.4.42 NAME ( 'givenName' 'gn' ) DESC 'RFC2256: first name(s) for which the entity is known by' SUP name )

Dans ce cas, la définition de notre attribut pourrait être la suivant :

olcAttributeTypes: {3}( 1.3.6.1.4.1.12345.1.2.1.4 NAME 'monAttribut' DESC 'Mon attribute' SUP name )

Attributs multi-valués

Note : il semble par contre il avoir des soucis sur certains attributs, qui ne sont pas pris en compte dans les filtres, malgré la modification des règles. Par contre, si on modifie la valeur (même en remettant la même valeur), l'attribut est utilisable. Ceci ne semble arriver que sur les attributs multi-valués.

 

 

 

 

 

Catégorie