Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] envoi du courrier aux listes

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Bruno Pean <adresse@cachée>
  • To: LEVEAU Stanislas <adresse@cachée>, adresse@cachée
  • Subject: Re: [sympa-fr] envoi du courrier aux listes
  • Date: Fri, 12 Dec 2008 08:49:53 +0100

[...]

Bonjour,
J'ai planché un peu sur ce problème chez nous....
Notre config des serveurs "sendmail" , "ldap" et evidement "sympa"

Le ldap est hébergé par ldap.eisti.fr.
sympa par tie.ccr.eisti.fr
les sendmails sont dispersés.

Lorque sendmail, veut délivrer un mail sur le domaine "eisti.fr" il recherche dans ldap l'attribut "mailRoutingAddress" avec comme clef de recherche l'attribut "email" pour le transferer à la la machinerie chargé des spams, virus, ... Lorsque le mail est lavé, le serveur de distribution final (ie dans les BAL des utilisateurs ) lui utilise le champ mailLocalAddress pour trouver le(s) destinataire(s) du mail.

A la création d'une liste il faut donc positionner des alias dans l'annuaire ldap pour que que les champs "mailRoutingAddress" pointent vers 'Alias'@ "la machine qui fait tourner sympa" (ie pour nous: '{adresse@cachée')
et que le "champ mailLocalAddress" pointe vers la commande de sympa correspondant au boulot (ie:'{COMMAND})'

Je transmet en attachement le fichier alias_manager.pl (renomer et txt) correspondant.

En espérant avoir pu vous aider.

Cordialement,


adresse@cachée a écrit :
Bonjour,
voilà mon problème :
J'ai un serveur SMTP postfix, un serveur POP/IMAP dovecot qui sert aussi de LDA
pour livrer le courrier. Le tout utilise une authentification LDAP. Mon
problème est de réussir à envoyer du courrier à mes listes. J'ai bien
configuré les interfaces pour SYMPA dans mon fichier master.cf (postfix). Dans
mes logs je constate que lors de la livraison c'est dovecot qui recherche
"adresse@cachée" dans LDAP et qui ne trouve pas l'utilisateur.
Pour palier au problème j'ai bien tenter d'utiliser l'outil
ldap_alias_manager.pl mais je ne parviens pas à l'utilser pour créer mes
alias dans mon annuaire.

S'il existe des solutions plus simples, car je n'ai rien trouvé dans les
archives.

Merci pour vos idées, je n'en ai plus
Bien cordialement






--
___
Remember: Unix is user friendly. It's just selective about who its friends are.
---
| Bruno Pean | E-mail: adresse@cachée
| Responsable C.C.R. Eisti | http://www.eisti.fr
| EISTI Cergy(95) France | tel : 01 34 25 10 04 ou 01 34 25 10 10
#!/usr/bin/perl

## This version of alias_manager.pl has been customized by Ludovic Marcotte,
Kazuo Moriwaka and Francis Lachapelle
## It has the ability to add/remove list aliases in an LDAP directory
## To make sympa use this script, you should install it as
/usr/lib/sympa/bin/alias_manager.pl
## You should edit all the $ldap_xxx below to use your own LDAP directory

$ENV{'PATH'} = '';

## Load Sympa.conf
use strict;
use lib '/usr/lib/sympa/bin';
use Conf;
use POSIX;
require "tools.pl";
require "tt2.pl";

use Net::LDAP;

unless (Conf::load('/etc/sympa/sympa.conf')) {
print gettext("The configuration file /etc/sympa/sympa.conf contains
errors.\n");
exit(1);
}

## LDAP configuration
my $ldap_connection = undef;
my $ldap_host = "ldap.eisti.fr";
my $ldap_search_base = "o=eisti,c=fr";

my $ldap_bind_dn = "ICI un DN qui a tous les droits";
my $ldap_bind_pw = "le password associé";
my $ldap_mail_attribute = "mail";
my $ldap_sample_dn = "uid={ALIAS},ou=list,o=eisti,c=fr";
my %ldap_attributes = ("objectClass" => ["top","person",
"organizationalPerson", "inetOrgPerson", "inetLocalMailRecipient"],
"cn" => ['{ALIAS}'],
"sn" => ['{ALIAS}'],
"uid" => ['{ALIAS}'],
"mailHost" => ['sympa.ccr.eisti.fr'],
"mailRoutingAddress" =>
['{adresse@cachée'],
"mailLocalAddress" => ['{COMMAND}']
);

my $default_domain;
my ($operation, $listname, $domain, $file) = @ARGV;


if (($operation !~ /^(add)|(del)$/) || ($#ARGV < 2)) {
printf "Usage: $0 <add|del> <listname> <domain> [<file>]\n";
exit(2);
}

$default_domain = $Conf{'domain'};

my %data;
$data{'date'} = &POSIX::strftime("%d %b %Y", localtime(time));
$data{'list'}{'domain'} = $data{'robot'} = $domain;
$data{'list'}{'name'} = $listname;
$data{'default_domain'} = $default_domain;
$data{'is_default_domain'} = 1 if ($domain eq $default_domain);
my @aliases ;

my $tt2_include_path = [$Conf{'etc'}.'/'.$domain,
$Conf{'etc'},
'/usr/share/sympa'];

my $aliases_dump;
&tt2::parse_tt2(\%data, 'list_aliases.tt2',\$aliases_dump, $tt2_include_path);

@aliases = split /\n/, $aliases_dump;

unless (@aliases) {
print STDERR "No aliases defined\n";
exit(15);
}

if ($operation eq 'add') {

## Check existing aliases
if (&already_defined(@aliases)) {
print STDERR "some alias already exist\n";
exit(13);
}

if (!&initialize_ldap) {
print STDERR "Can't bind to LDAP server\n";
exit(14);
}

foreach my $alias (@aliases) {
if ($alias =~ /^\#/) {
next;
}

$alias =~ /^([^:]+):\s*(\".*\")$/;
my $alias_value = $1;
my $command_value = $2;

# BP
# BP if ($command_value =~ m/bouncequeue/) {
# BP $command_value = "sympabounce";
# BP } else{
# BP $command_value = "sympa";
# BP }

# We create the new LDAP entry.
my $entry = Net::LDAP::Entry->new;

# We add the required mail attribute
my $TestBP=$command_value;
$TestBP =~ s/.*bounceque.*/sympabounce/;
if ( $TestBP eq "sympabounce")
{
$alias_value.="-owner";
$entry->add($ldap_mail_attribute, $alias_value."\@".$domain);
}
else
{
$entry->add($ldap_mail_attribute, $alias_value."\@".$domain);
}

# We substitute all occurences of + by - for the rest of the
attributes, including the dn.
# The rationale behind this is that the "uid" attribute prevents the
use of the '+' character.
$alias_value =~ s/\+/\-/g;

# We set the dn
my $value = $ldap_sample_dn;
$value =~ s/{ALIAS}/$alias_value/;
$entry->dn($value);
my $DnBP = $value;

# We add the rest of the attributes
foreach my $hash_key (keys %ldap_attributes) {
foreach my $hash_value (@{$ldap_attributes{$hash_key}}) {
$value = $hash_value;
$value =~ s/{ALIAS}/$alias_value/;
$value =~ s/{COMMAND}/$command_value/;
$entry->add($hash_key, $value);
}
}

# We finally add the entry
my $msg = $ldap_connection->add($entry);
if ($msg->is_error()) {
print STDERR "Can't add entry for dn:$DnBP $alias_value\@$domain:
",$msg->error(),"\n";
exit(15);
}
$entry = undef;
}

&finalize_ldap;

}
elsif ($operation eq 'del') {

if (!&initialize_ldap) {
print STDERR "Can't bind to LDAP server\n";
exit(7);
}

foreach my $alias (@aliases) {
if ($alias =~ /^\#/) {
next;
}

$alias =~ /^([^:]+):/;
my $alias_value = $1;
$alias_value =~ s/\+/\-/g;

my $value = $ldap_sample_dn;
$value =~ s/{ALIAS}/$alias_value/;
$ldap_connection->delete($value);
#BP Pa deb
$value =~ s/,ou=list/-owner,ou=list/;
$ldap_connection->delete($value);
#BP Pa fin
}

&finalize_ldap;
}
else {
print STDERR "Action $operation not implemented yet\n";
exit(2);
}

exit 0;

## Check if an alias is already defined
sub already_defined {

my @aliases = @_;

&initialize_ldap;

foreach my $alias (@aliases) {

$alias =~ /^([^:]+):/;

my $source_result = $ldap_connection->search(filter =>
"(".$ldap_mail_attribute."=".$1."\@".$domain.")",
base =>
$ldap_search_base);
if ($source_result->count != 0) {
print STDERR "Alias already defined : $1\n";
&finalize_ldap;
return 1;
}
}

&finalize_ldap;
return 0;
}

## Initialize the LDAP connection
sub initialize_ldap {
unless ($ldap_connection = Net::LDAP->new($ldap_host), version => 3) {
print STDERR "Can't connect to LDAP server $ldap_host: $@\n";
return 0;
}

my $msg = $ldap_connection->bind($ldap_bind_dn, password =>
$ldap_bind_pw);
if ($msg->is_error()) {
print STDERR "Can't bind to server $ldap_host: ",$msg->error(),"\n";
return 0;
}

return 1;
}

## Close the LDAP connection
sub finalize_ldap {
if (defined $ldap_connection) {
$ldap_connection->unbind;
$ldap_connection = undef;
}
}



Archives gérées par MHonArc 2.6.19+.

Haut de le page