Next Previous Contents

5. Astuces

5.1 Souplesse de la base

LDAP est souple. Il suffit par exemple d'ajouter dans le fichier de description d'une personne :

telephonenumber: 06-00-00-00-00
pour que la base intègre son numéro de téléphone portable. Bien entendu la souplesse du serveur doit se retrouver dans les clients. S'ils ne sont pas capables de prendre en compte un attribut qu'ils ne connaissent pas, cela ne sert à rien. Il est aussi possible d'avoir plusieurs fois le même attribut avec des valeurs différentes. Par exemple, quand je dois indiquer une adresse, j'utilise plusieurs entrées PostalAdress :
PostalAdress: Numéro et Rue
PostalAdress: Bâtiment et Etage
PostalAdress: Boîte postale

5.2 Interrogation avec un navigateur

(l'article qui m'a servis de base semble avoir disparu, domage : http://www.info.fundp.ac.be/~bcoppens/tima/accueil.html)

Il est possible d'interroger le serveur LDAP à partir d'un navigateur le supportant (Netscape 4.5 par exemple) avec l'adresse suivante :

ldap://ldap.MaSociete.fr/o=MaSociete,c=fr??Sub

On obtient la liste de toutes les entrées de l'annuaire; il est possible de limiter le champs de recherche, de limiter les attributs affichés ou de filter sur des attributs : La forme générale est la suivante :

ldap://host[:port]/dn?[attributs]?[étendu]?[filtre]
Pour les attributs, il s'agit d'une liste séparé par des "," : cn,mail donnera les nom commun et les adresse E-Mail. Pour l'étendu, il y a 3 possibilités :

Enfin, pour le filtre, cela marche avec des associations entre paranthèses : (cn=fabrice.rafart@Masociete.fr). Cela marche aussi avec des "*" ou des "?".

Nous avons donc par exemple :

ldap://ldap.Masociete.fr/o=Masociete,=c=fr??cn,mail?Sub
  Tous les cn et mail de l'arbre
ldap://ldap.Masociete.fr/o=Masociete,c=fr?cn?Sub?(mail=fabrice.rafart@Masociete.fr)
  le cn des objects ayant fabrice.rafart@Masociete.fr comme mail

5.3 Statistique

L'objet monitor est un peu particulier dans le sens ou il n'est pas vraiment inclu dans la base (il est lui-même une base). Avec un navigateur, l'adresse suivante vous donnera des statistiques sur l'utilisation du serveur LDAP :

ldap://ldap.MaSociete.fr/cn=monitor

Il peut être très pratique de faire remonter chaque nuit les statistiques via cron/mail. Il faut donc créer un cron avec la commande suivante :

ldapsearch -s base -b'cn=monitor' 'objectclass=*'
Le résultat devrait ressembler à ça :
cn=monitor
version=slapd 1.1-beta (Mon Jan 18 00:36:43 EST 1999)
threads=1
connection=7 : 19990416184428Z : 2 : 1 : NULLDN :
currentconnections=1
totalconnections=1
dtablesize=256
writewaiters=0
readwaiters=0
opsinitiated=2
opscompleted=1
entriessent=0
bytessent=14
currenttime=19990416184428Z
starttime=19990416180427Z
nbackends=1

5.4 Trombinoscope

Il faut présiser que la destination d'un serveur LDAP n'est pas de contenir des données mais plutôt des pointeurs vers les données. Ceci étant, il est très sympa de faire un trombinoscope avec un serveur LDAP :

dn: cn=Fabrice Rafart, ou=siege, o=MaSociete, c=FR
changetype: modify
add: jpegphoto
jpegphoto: /chemin/photo.jpg
ensuite, on inclu ce fichier avec :
/usr/sbin/ldapmodify.bash -b -f ./fichier.ldif
Pour ldapmodify.bash, voir ldapmodify.bash

Ensuite, il ne reste plus qu'à acceder à la base avec un client capable d'interpreter correctement les JPG (Netscape par exemple) : ldap://ldap.MaSociete.fr/o=Masociete.fr??Sub et les photos apparaissent.

5.5 Un serveur, plusieur arbres

J'ai découvert il y a peu que l'on pouvait include plusieur arbres sur le même serveur, il suffit de lui indiquer dans le slapd.conf. En voici un exemple (réduit juste à la partie de la déclaration des suffix, le reste ne change pas) :

suffix  "o=Arbre1, c=FR"
suffix  "o=Arbre2, c=FR"
suffix  "o=Arbre3, c=FR"
Bien sùr, pour chaque arbre, il faut repasser par toutes les étapes de la création (la base, ...).Pour ce qui est du rootdn et rootpw, il peuvent être les même ou bien différents, c'est selon votre bon plaisir. Dans le cas ou il sont différents, il faut jongler un peu avec les droits d'accès avec une construction du genre :
access to dn="o=arbre1, c=fr"
  by self                write
  by dn="o=arbre1,c=fr"  read
  by dn="o=arbre2,c=fr"  read
  by dn="o=arbre3,c=fr"  none
access to dn="o=arbre2, c=fr"
  ...
access to dn="o=arbre3, c=fr"
  ...
Dans cet exemple, les personnes de l'arbre2 peuvent lire l'arbre1 tandis que celles de l'arbre3 ne le peuvent pas. Le plus simple étant (si cela ne pose pas de problème) de mettre un droit par défaut à read et de ne spécifier que les autres droits (write, compare, ...).


Next Previous Contents