L'utilisation des options pour le sous-typage des attributs est possible nativement dans OpenLDAP. Il faut seulement déclarer les options ou les préfixes admissibles. Cette déclaration est globale pour tous les attributs.
-
lang-
est déclaré de façon implicite (mais doit être redéclaré de façon explicite si d'autres préfixes ou options sont ajoutés)
Si nous voulons déclarer le préfixe x-
(pour autoriser toutes les options à usage privé, non déclarées à l'IANA), on ajoute dans slapd.conf
:
attributeoptions lang- x-
En configuration dynamique, il faut modifier l'objet cn=config
, et ajouter l'attribut olcAttributeOptions
.
Pour ajouter deux valeurs de l'attribut supannCMSId à un utilisateur existant, dans deux encodages différents, on insère le LDIF suivant :
dn: uid=dupont,ou=people,dc=univ,dc=fr changetype: modify add: supannCmsId;x-mifare-xlsb supannCmsId;x-mifare-xlsb: DEADBEEF000000 - add: supannCmsId;x-mifare-xmsb supannCmsId;x-mifare-xmsb: 000000EFBEADDE
On peut demander à lire toutes les valeurs, en spécifiant le type sans option. Dans ce cas, le serveur renvoie l'intégralité des valeurs :
# ldapsearch -x '(uid=dupont)' supannCmsId dn: uid=dupont,ou=people,dc=unilim,dc=fr supannCmsId;x-mifare-xlsb: DEADBEEF000000 supannCmsId;x-mifare-xmsb: 000000EFBEADDE
On peut demander à lire uniquement la valeur associée à une option :
# ldapsearch -x '(uid=dupont)' 'supannCmsId;x-mifare-xlsb' dn: uid=dupont,ou=people,dc=unilim,dc=fr supannCmsId;x-mifare-xlsb: DEADBEEF000000
Le même principe est valable pour les filtres de recherche : on peut faire une recherche avec ou sans option. Sans option, la recherche sera faite sur toutes les valeurs de l'attribut, quelle que soit son option. Exemples :
# ldapsearch -x '(supannCmsId=DEADBEEF000000)' 'uid' dn: uid=dupont,ou=people,dc=unilim,dc=fr uid: dupont # ldapsearch -x '(supannCmsId=000000EFBEADDE)' 'uid' dn: uid=dupont,ou=people,dc=unilim,dc=fr uid: dupont
En précisant l'option, seule la valeur correspondante sera interrogée:
# ldapsearch -x '(supannCmsId;x-mifare-xmsb=000000EFBEADDE)' 'uid' dn: uid=dupont,ou=people,dc=unilim,dc=fr uid: dupont
En revanche, dans cet exemple, le filtre “(supannCmsId;x-mifare-xlsb=000000EFBEADDE)” ne renverra pas l'entrée “uid=dupont”, car la valeur 000000EFBEADDE n'est pas associée à l'option x-mifare-xlsb.
Ces exemples ont été réalisés avec les commandes en ligne fournies par OpenLDAP, mais les mêmes règles s'appliquent pour tout outil de requêtage respectant le protocole.
Dans certains cas il peut être nécessaire de restreindre l'accès à un sous-ensemble d'options d'un attribut.
Cela peut répondre à des besoins de :
Dans OpenLDAP, les ACLs sur des options d'attributs fonctionnement de la même manière que celles sur les sous-types d'attributs:
Les exemples ci-dessous exploitent ces propriétés en ordonnant les ACLs de façon à obtenir le résultat souhaité:
# limite l'option "x-ascii" du displayName en recherche seule, # sauf pour les membres du groupe "ldap.acl.ascii.access": access to attrs=displayName;x-ascii by group="cn=ldap.acl.ascii.access,ou=groups,dc=univ-x,dc=fr" break by * search # définition des règles d'accès par défaut du displayName: access to attrs=displayName by self write by * read # limite l'option "x-mifare-xlsb" du supannCmsId # aux seuls membres du groupe "ldap.acl.xlsb.access": access to attrs=supannCmsId;x-mifare-xlsb by group="cn=ldap.acl.xlsb.access,ou=groups,dc=univ-x,dc=fr" break by * none # définition des règles d'accès par défaut du supannCmsId: access to attrs=supannCmsId by * read