Dynamic Lists
1. Présentation
Cette fonctionnalité permet de maintenir les valeurs d’un attribut de manière dynamique au travers d’une requête LDAP en s’affranchissant ainsi de la maintenance d’une liste de valeurs statiques. La liste obtenue peut avoir deux sortes de résultats : l’attribut accompagné de sa valeur ou bien seulement les DN en fonction de la syntaxe de la requête. On parle alors de liste dynamique pour le premier cas et de groupe dynamique pour le second cas.
Cet overlay peut ainsi se comporter à la fois comme une liste dynamique ou un groupe dynamique selon la manière dont il est configuré.
Sa syntaxe est la suivante :
dynlist-attrset <group-oc> <URL-ad> [member-ad]
Les paramètres de la directive dynlist-attrset ont la signification suivante :
	•	<Group-oc> spécifie quelle classe d’objet déclenchera la recherche LDAP spécifiée. Chaque fois qu’une entrée avec cette classe d’objet sera récupérée, la recherche sera effectuée.
	•	<URL-annonce> est le nom de l’attribut qui détient l’URI de recherche. Les attributs et les valeurs présents dans le résultat de la recherche sont ajoutés à l’entrée à moins que le paramètre member-ad ne soit utilisé.
	•	[Member-ad] : si présent, modifie le comportement de l’overlay et se comporte en groupe dynamique. Ainsi, au lieu d’insérer les résultats de la recherche dans l’entrée, le DN des résultats est ajouté en tant que valeurs de cet attribut.
2. Exemple de configuration
1.	Il faut tout d’abord charger le module "dynlist.la" dans l’entrée : dn: cn=module{0},cn=config	
2.	Puis, il faudra appliquer cette fonctionnalité au niveau de l’entrée de l’annuaire ciblé (ex. olcDatabase={1}hdb,cn=config) à l’aide d’une commande ldapadd.	
dn: olcOverlay=dynlist,olcDatabase={1}hdb,cn=config 
objectClass: olcOverlayConfig 
objectClass: olcDynamicList 
olcOverlay: dynlist 
olcDLattrSet: {0} nisMailAlias labeledURI 
olcDLattrSet: {1} groupOfURLs labeledURI member
Les deux exemples de configuration suivants vont permettre de bien comprendre le fonctionnement de cet overlay.
Exemple 1 : cas d’une liste dynamique
olcDLattrSet: {0} nisMailAlias labeledURI
 
# Création d’une entrée appliquant la liste dynamique 
dn: cn=all,ou=aliases,dc=example,dc=com 
cn: all 
objectClass: nisMailAlias 
labeledURI:ldap:///ou=People,dc=example,dc=com?mail?one?
(objectClass=inetOrgPerson)
Ainsi, l’application de la configuration ci-dessus permettra d’ajouter à l’entrée dn: cn=all,ou=aliases,dc=example,dc=com tous les attributs mail des entrées se trouvant juste en dessous de l’entrée ou=People,dc=example,dc=com ayant la classe d’objet inetOrgPerson.
En supposant que le résultat de la recherche donne les valeurs suivantes :
mail: user1@example.com
mail: user2@example.com
Alors, voici comment l’entrée sera maintenant configurée :
cn=all,ou=aliases,dc=example,dc=com 
cn: all 
objectClass: nisMailAlias 
labeledURI:ldap:///
ou=People,dc=example,dc=com?mail?one?(objectClass=inetOrgPerson) 
mail: user1@example.com 
mail: user2@example.com
Voici maintenant l’étude d’un autre exemple de configuration qui va permettre cette fois-ci de mettre en lumière les groupes dynamiques.
Exemple 2 : cas d’un groupe dynamique
olcDLattrSet: {1} groupOfURLs labeledURI member
 
# Création d’une entrée appliquant le groupe dynamique 
dn: cn=allusers,ou=group,dc=example,dc=com 
cn: all 
objectClass: groupOfURLs 
labeledURI:ldap:///ou=people,dc=example,dc=com??one?
(objectClass=inetOrgPerson)
Cette configuration est quasi similaire à celle de l’exemple précédent à l’exception de l’ajout du paramètre member pour l’attribut olcDLattrSet. Ainsi, pour chaque entrée possédant la classe d’objet groupOfURLs, l’attribut member sera ajouté et portera comme valeur les résultats de la recherche spécifiée dans l’attribut labelURI. Mais cette fois, seuls les noms distinctifs (DN) des résultats seront ajoutés.
En supposant que le résultat de la recherche donne les valeurs suivantes :
dn: uid=user1,ou=people,dc=exemple,dc=com
dn: uid=user2,ou=people,dc=exemple,dc=com
Alors, voici comment l’entrée sera maintenant configurée :
dn: cn=allusers,ou=group,dc=example,dc=com 
cn: all 
objectClass: groupOfURLs 
labeledURI:ldap:///
ou=people,dc=example,dc=com??one?(objectClass=inetOrgPerson) 
member: uid=user1,ou=people,dc=example,dc=com 
member: uid=user2,ou=people,dc=example,dc=com