Nous avons besoin d’une plateforme multi-domaines avec une gestion simple. L’annuaire LDAP permet un stockage hierarchique, rapide (quand c’est bien fait) et un acces standard. Des APIs sont disponibles dans n’importe quel langage, ce qui permettra de greffer un peu tout ce que l’on veut sur cet annuaire.
o=mail | |_ou=lescampeurs | |_dc=lescampeurs.org | | | |_ou=users | | | |_ou=contacts | | | |_ou=public_folders | | | |_ou=shared_folders | |_ou=doudou | |_dc=doudouke.org | | | | | |_ou=users | | | | | |_ou=contacts | | | | | |_ou=public_folders | | | | | |_ou=shared_folders | | | | | |_dc=golgot.org | | | |_ou=users | | | |_ou=contacts | | | |_ou=public_folders | | | |_ou=shared_folders
On trouve a la racine des groupes de Domaines qui contiennent un ou plusieurs domaines. Chaque Domaine peut avoir un ou plusieurs alias. Cette structure permet un délégation des gestions des domaines par groupe de Domaines.
Voici la structure des repertoires lie a la base LDAP.
/vmail/lescampeurs /vmail/lescampeurs/lescampeur.org /vmail/lescampeurs/lescampeur.org/users /vmail/lescampeurs/lescampeur.org/public_folders /vmail/doudou /vmail/doudou/douduke.org /vmail/doudou/douduke.org/users /vmail/doudou/douduke.org/public_folders /vmail/doudou/golgot.org /vmail/doudou/golgot.org/users /vmail/doudou/golgot.org/public_folders
Au depart j’etais partie pour faire truc en shell, puis en perl, puis un package pour mettre les info de configuration... puis c’est partie en couille. Je completerais les scripts d’exemples au fur et a mesure que modifierais l’api.
Cette api manipule les entres ldap et les maildirs pour que le tout reste coherent.
#!/usr/bin/perl -w use strict; #use diagnostics; use Ldap_Mail; my $m = Ldap_Mail->new; $m->set_bindpw('cn=admin,o=mail', 'secret'); my $g; #Cree un groupe de domaines $g = $m->new_dnsgroup('test'); my $d = $g->create_dns('test.com'); #Detruire un groupe de domaines $g = $m->get_dnsgroup('test'); $g->del_all();
#!/usr/bin/perl -w use strict; #use diagnostics; use Ldap_Mail; my $m = Ldap_Mail->new; $m->set_bindpw('cn=admin,o=mail', 'secret'); my $r; #Cree un groupe de domaines $r = $m->new_realm('test'); my $d = $r->create_domain('test.com'); $r = $m->get_realm('test'); $d = $r->new_domain('coucou.com'); #Creer un alias DNS $d->add_alias('coucou.net'); #Creer un utilisateur my $u = $d->new_user('postmaster5'); #Creer un alias pour postmaster5 => root@coucou.com root@coucou.net $u->add_alias('root'); #Creer un alias pour postmaster5 => admin@coucou.com $u->add_alias('admin@coucou.com'); #Creer un alias pour postmaster5 => webmaster@coucou.com webmaster@coucou.net $u->add_alias('webmaster'); my $p = $d->new_public_folder('Info'); $p = $d->new_public_folder('Evenements'); $u = $d->new_user('test', [userPassword => 'coucou']); $u = $d->new_user('danjer'); $u->set_passwd('coucou'); $u->add_subscribers('postmaster5', 'test'); $u->set_passwd('blah');
Bref tout ca est a mettre au propre...
Pour compartimenter au mieux la sécurité et pouvoir déployer d’autres types d’interfaces que des scripts (Web, etc...), voici ldap_mail_daemon.pl ou encore connue sous le nom de : ‘GolgotExecutor Server‘.