ERROR CTGIMO019E - LDAP Error: Unbalanced parenthesis

Symptômes

Suite à l'ajout de rôles dynamiques sur une instance ITIM, on note un comportement curieux d'ITIM à chaque modification d'un utilisateur ; la modification échoue, avec le message de retour :

CTGIMO019E The following LDAP error occurred. Error: Unbalanced parenthesis.

En regardant les logs ITIM (trace.log), on identifie une stack dump java :

javax.naming.directory.InvalidSearchFilterException: Unbalanced parenthesis;
at com.sun.jndi.ldap.Filter.findRightParen(Filter.java:491)
        at com.sun.jndi.ldap.Filter.encodeFilterList(Filter.java:526)
        
        com.ibm.itim.role.RoleAuthorityException: CTGIMO019E The following LDAP error occurred.
Error: Unbalanced parenthesis

Identification du problème

Avec le niveau de log par défaut, le rôle qui provoque l'erreur n'est pas identifiable. Si on prend les filtres LDAP des rôles dynamiques, on constate qu'ils sont correctement construits, et ont tous des parenthèses ouvrantes et fermantes.

Pour identifier le rôle, on modifie le niveau de log dans le fichier itim/data/enRoleLogging.properties :

logger.trace.com.ibm.itim.dataservices.model.level=DEBUG_MAX

On relance l'application ITIM (ou le WAS) et on refait ensuite une modification d'un utilisateur pour provoquer l'erreur.
Au dessus de la stack dump java, on peut trouver le contenu du filtre LDAP qui pose problème, avec des caractères ^M en trop :

Entry, parm 1 = (|(iirUserAttrib6=L04*)(iirUserAttrib6=L05*)(iirUserAttrib6=L09*)^M
(iirUserAttrib6=L10*) (iirUserAttrib6=L12*)(iirUserAttrib6=L13*)^M
(iirUserAttrib6=L14*)(iirUserAttrib6=L52*)(iirUserAttrib6=L53*)(iirUserAttrib6=L54*))

Résolution du problème

Il ne faut pas avoir de caractère de retour à la ligne dans les filtres LDAP qui sont déclarés dans les rôles dynamiques.

L'idéal étant de redimensionner la zone de textarea qui comprend le filtre, et voir si il y a des retours à la ligne. Dans un éditeur de texte, tout doit être sur la même ligne, sans retour.

Autre recommandation : si la valeur de l'attribut comprend un caractère "|", celui-ci doit être échappé et remplacé par "\7c".

 

Catégorie