Principe de fonctionnement

heu ben à vrai dire je ne sais pas trop, nous avons suivi une doc et

ça marche …

Plus sérieusement, nous avons un ldap qui a tous les comptes .

Si on fait un ldapsearch sur le ldap

ldapsearch "*" -b dc=mdl29,dc=net -x

Il nous ramène tous ce qui a dans le ldap

mais comme tout nous intéresse pas repérez l'adresse mail d'un utilisateur

par exemple: bjensen@mdl29.net

et si on refait une recherche

ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x

il n'en ressort que sa fiche

heu, juste une parenthèse, pour rechercher tous ceux qui aurait une adresse mail en mdl29 il suffit d'executer

ldapsearch "mail=*@mdl29.net" -b dc=mdl29,dc=net -x

bon revenons à la fiche de bjensen

# 42, Users, mdl29.net
dn: uid=42,ou=Users,dc=mdl29,dc=net
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: qmailUser
mailHost: mail1.mdl29.net
cn: bjensen
displayName: Babs Jensen
sn: Jensen
givenName: Barbara
initials: BJJ
uid: 42
mail: bjensen@mdl29.net
telephoneNumber: +1 408 555 1862
facsimileTelephoneNumber: +1 408 555 1992
mobile: +1 408 555 1941
roomNumber: 0209
carLicense: 6ABC246
o: Siroe
ou: Product Development
departmentNumber: 2604
employeeNumber: 42
employeeType: full time
preferredLanguage: fr, en-gb;q=0.8, en;q=0.7
labeledURI: http://www.siroe.com/users/bjensen My Home Page

bon heu, il y a un peu trop de chose,

nous allons prendre que ce qui nous intéresse.

Et hop un autre Ldapsearch…

ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x mail uid cn mailhost

ce qui nous donne

# 42, Users, mdl29.net
dn: uid=42,ou=Users,dc=mdl29,dc=net
mailHost: mail1.mdl29.net
cn: bjensen
uid: 42
mail: bjensen@mdl29.net

ha ben oui c'est mieux la … on y plus claire

donc quand postfix recoit un mail il regarde si il a le droit de le prendre.

ensuite il décide de ce qu'il va en faire.

Pour cela il va regarder dans le ldap si le mail existe et si le mailhost est égal à mail1.mdl29.net

c'est à cela que sert les paramètres dans le main.cf

virtual_mailbox_maps = hash:/etc/postfix/account.cf,ldap:mailbox
mailbox_server_host = localhost
mailbox_version = 3
mailbox_search_base = ou=Users,dc=saffron,dc=net
mailbox_domain = mdl29.net  
mailbox_query_filter = (&(mail=%s)(mailhost=mail1.mdl29.net))
mailbox_result_attribute = uid
mailbox_result_filter = %s/

Pourquoi faire le test de mail1.mdl29.net?

ben pour pouvoir augmenter le nombre de serveur mail sans devoir changer de domaine avec cette requete, postfix sait que c'est un mail que nous gérons et que ce mail est hebergé chez lui. Si nous avions deux serveurs nous mettrions en place une autre regle mais cette fois ci dans le main.cf

transport_maps=ldap:transport
transport_server_host = localhost
transport_version = 3
transport_search_base = ou=Users,dc=saffron,dc=net
transport_domain = mdl29.net  
transport_query_filter = (mail=%s)
transport_result_attribute = mailhost

Ce qui signifie que postfix fait une requête pour savoir qui héberge le mail et ensuite il transmet ce mail aux serveurs

maintenant reprenons la fiche simplifié de bjenson

ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x mail uid cn mailhost

ce qui nous donne

# 42, Users, mdl29.net
dn: uid=42,ou=Users,dc=mdl29,dc=net
mailHost: mail1.mdl29.net
cn: bjensen
uid: 42
mail: bjensen@mdl29.net

L'uid correspond à son numéro d'adhérent. C'est ce numéro qui va l'identifier du facon unique. L'ensemble de la plateforme se basera sur ce numero. Postfix deposera les mail dans un dossier qui comporte le numero d'adherent bjensen aura donc sa boite mail dans le numero 42.

Maintenant Mme bjensen divorce de Mr Jensen (ben oui souvenez vous elle s'apelle barbara) elle redeviendra Mrs Michu. et nous pouvons changer cela dans le ldap sans que le numéro d'adhérent ne change. bon heu pour l'instant on a pas d'outils pour aller le changer donc vous pouvez le faire qu'en modifiant le fichier ldif et en rechargeant le ldap

cf. Doc du ldap

bien maintenant regardons dovecot le frontal pop/imap Dans le fichier /etc/dovecot/dovecot-ldap.conf

hosts = 127.0.0.1
default_pass_scheme = PLAIN
auth_bind = yes
ldap_version = 3
base = dc=mdl29,dc=net
deref = never
scope = subtree
pass_attrs = uid=user
pass_filter = (&(|(cn=%u)(uid=%u))(mailhost=mail1.mdl29.net))

Il fait lui aussi une requête pour savoir si, il héberge l'utilisateur qui essaie de se connecter avec le champ mailhost donc si mailhost est different de mail1.mdl29.net, l'utilisateur se fait jeter. Nous avons paramétré dovecot pour qu'il sache authentifier aussi bien avec le uid qu'avec le cn. Le cn d'ailleur doit correspondre au nom du mail sans l'arobase et le nom de domaine.

pendant qu'on est la dessus une petite précision

(|(cn=%u)(uid=%u))

le caractere | veut dir ou donc ici la requete veut dir cn=%u ou uid=%u

(&(cn=%u)(uid=%u))

le caractere & veut dir et donc ici la requete veut dir cn=%u et uid=%u et si nous voulons faire du et et ou en même temps il suffit de mettre des parentheses comme en math pour prioriser les actions. remarquez qu'a la différence des math l'operateur se met juste après la parenthese.

et enfin le %u est le nom d'utilisateur que nous mettons pour nous connecter dans notre client de messagerie preferé

donc dans dovecot-ldap quand nous faisons cette requete,

(&(|(cn=%u)(uid=%u))(mailhost=mail1.mdl29.net))

cela veut dire que dovecot cherche dans le ldap si il y a un cn ou un uid qui est egal à l'utilisateur et dont son mailhost est égal à mail1.mdl29.net

Donc ça signifie que l'utilisateur peut aussi bien se connecter avec son cn qu'avec son numero d'adherent.

Le champ

pass_attrs = uid=user 

Permet de retourner l'uid pour que dovecot puisse savoir quel est le répertoire de l'utilisateur.

bien en ecrivant la doc, je me suis rendu compte d'une chose c'est que si nous herbergeons plusieur domaine, nous pourrions avoir deux utilisateurs ayant le meme nom exemple :

bjensen@mdl29.net 
bjensen@braveo.net

Il faut donc que nous décidions que le bjensen doit etre unique ou que nous decidions de changer la conf de dovecot pour que l'authentification se fasse sur le champ mail au lieu de cn.

Faut y réfléchir sérieusement car pour la suite la question se pose aussi. genre l'url des blogs exemple:

http://mdl29.net/bjensen.mdl29.net

ou

http://mdl29.net/bjensen

ce qui pourrait etre cela

http://bjensen.mdl29.net

ou

http://bjensen42.mdl29.net

j'en sais rien …