Module dynlist

Ce module permet la gestion d'attributs dynamiques listant les groupes d'un utilisateur sur la base de sa présence dans de son DN dans un attribut listant les membres au niveau des groupes. Ce module peut-être utilisé à la place du module memberof dans un contexte de serveurs utilisant une réplication syncrepl.

Contrairement au module memberof, un attribut est requis au niveau de l'objet utilisateur pour stocker l'URI de recherche des groupes d'un utilisateur. Cet attribut doit donc être prévu dans votre schéma LDAP dans votre classe d'objet utilisateur. Par ailleurs, cet attribut doit forcément hériter de l'attribut labeledURI.

Exemple de définition d'un attribut pour stocker l'URI de recherche des groupes d'un utilisateur :

( 1.3.6.1.4.1.10650.3.987512.31 NAME 'zioMemberOfURI' DESC 'Dynamic memberOf URI' SUP labeledURI )
Il est important que l'attribut dynamique qui listera les groupes de l'utilisateur soit également défini dans le schéma de l'annuaire. Dans l'exemple ci-dessous, nous utiliserons l'attribut memberOf qui est apporté par le module memberof et dont la définition est la suivante :
( 1.2.840.113556.1.2.102 NAME 'memberOf' DESC 'Group that the entry belongs to' SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' EQUALITY distinguishedNameMatch )
Avant la version 2.5 d'OpenLDAP (Debian Bookworm), comme pour le module memberof, il n'était pas possible de faire de recherche d'utilisateur avec un filtre sur la valeur de l'attribut listant ses groupes. Cette limitation a été supprimée en version 2.5, mais cela n'est pas sans impacte sur les performances. Il est donc toujours conseillé de privilégier d'utiliser la méthode traditionnelle pour lister les groupes d'un utilisateur.

Il est par ailleurs à noter que dans les premières versions disponibles d'OpenLDAP 2.5, il y avait une nette perte de performances lorsque ce module était activé par rapport à la version 2.4. Ces problèmes furent en grandes partie corrigés dans la version 2.5.17 d'OpenLDAP (disponible en backports sur le dépôt Easter-eggs).

Contrairement au module memberof, la configuration dynamique de ce module ne pose pas de soucis et il n'est pas nécessaire de “toucher” aux membres des groupes, pour que l'attribut dynamique soit alimenté.

Installation

Il faut d'abord charger le module dynlist :

ldapmodify -Y EXTERNAL -H ldapi:/// << EOF
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: dynlist
EOF

Il faut charger également le schéma LDAP propre à ce module (fourni par le paquet Debian slapd) :

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/dyngroup.ldif

Il faut ensuite activer ce module pour votre database :

ldapadd -Y EXTERNAL -H ldapi:/// << EOF
dn: olcOverlay=dynlist,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcDynamicList
olcOverlay: dynlist
olcDlAttrSet: zioPersonne zioMemberOfURI memberOf
EOF
La définition de l'attribut memberof est fourni par l'overlay OpenLDAP du même nom. Si vous avez l'erreur unable to find AttributeDescription #0 “memberOf”, vous pouvez charger le overlay memberof ou bien ajouter le schéma LDAP suivant :
dn: cn=memberof,cn=schema,cn=config
cn: memberof
objectClass: olcSchemaConfig
olcAttributeTypes: {0}( 1.2.840.113556.1.2.102 NAME 'memberOf' DESC 'Group that the entry belongs to' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )