====== Module unique ======
Ce module permet de configurer des contraintes d'unicité sur les valeurs stockées par les attributs.
Ces contraintes sont appliquées lors des requêtes d'ajout, de modification et de renommage des entrés.
[[https://www.openldap.org/doc/admin24/overlays.html#Attribute%20Uniqueness|Doc officielle]]
===== Installation =====
Il faut simplement charger le module //unique// : ldapmodify -Y EXTERNAL -H ldapi:/// << EOF
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: unique
EOF
===== Configuration =====
Il faut ensuite configurer les contraintes d'unicité pour votre database :
ldapadd -Y EXTERNAL -H ldapi:/// << EOF
dn: olcOverlay=unique,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcUniqueConfig
olcOverlay: unique
olcUniqueURI: ldap:///dc=example,dc=fr?uid?sub?(objectClass=inetOrgPerson)
EOF
L'exemple ci-dessus ajoute une contrainte d'unicité sur les valeurs stockés dans tous l'attribut ''uid'' des objets ''inetOrgPerson'' dans tout l'arbre LDAP ''dc=example,dc=fr'' (scope ''sub'').
Le paramétrage d'une contrainte d'unicité prend ici la forme d'une URI de recherche LDAP dont le résultat pour une valeur donnée ne devra contenir qu'une seule entrée. Dans l'URI, seul le filtre de recherche est facultatif.
**Format de paramétrage d'une contrainte :**
ldap:///[base dn]?[attribute1,attribut2,...]?scope[?filtre]
* ''[base dn]'' : base DN de la recherche
* ''[attribute1,attribut2,...]'' : noms des attributs (séparés par des virgules) sur lesquels la contrainte s'applique
* ''[scope]'' : porté de la recherche : ''base'', ''one'' ou ''sub''
* ''[?filtre]'' : filtre de recherche facultatif permettant de limiter sur quels objets s'applique la contrainte
**Ci-dessous quelques exemples de contraintes applicables sur un annuaire SUPANN :**
olcUniqueURI: ldap:///dc=univ,dc=fr?labeledURI?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSAffectation?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSAppAffectation?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSAppId?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSAppIdDomaine?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSId?sub
olcUniqueURI: ldap:///dc=univ,dc=fr?supannCMSIdEtiquette?sub
olcUniqueURI: ldap:///ou=groups,dc=univ,dc=fr?cn?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=groups,dc=univ,dc=fr?displayName?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=groups,dc=univ,dc=fr?supannRefId?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?eduPersonPrincipalName,eduPersonPrincipalNamePrior?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?eduPersonTargetedID?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?eduPersonUniqueId?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?mail,supannAutreMail?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannAliasLogin?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannCodeINE?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannEmpId?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannEtuId?sub?(objectClass=supannPerson)
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannFCSub?sub?(|(supannFCPerson)(objectClass=supannPerson))
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?supannRefId?sub
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?uid?sub
olcUniqueURI: ldap:///ou=people,dc=univ,dc=fr?userCertificate?sub
olcUniqueURI: ldap:///ou=structures,dc=univ,dc=fr?ou?sub?(objectClass=supannEntite)
olcUniqueURI: ldap:///ou=structures,dc=univ,dc=fr?supannCodeEntite?sub?(objectClass=supannEntite)
olcUniqueURI: ldap:///ou=structures,dc=univ,dc=fr?supannRefId?sub