Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP

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

Archives de la liste

Chronologique Discussions  
  • From: Antoine Boursier <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP
  • Date: Fri, 19 Jan 2018 14:48:57 +0100

Bonjour à tous,

Après avoir bloqué quelques jours sur ces customs conditions, j'en suis toujous au même point.

J'ai essayé chacun de vos scripts, sans réussir à les faire fonctionner.

Du coup je suis passé sur quelque chose de beaucoup plus simple pour juste tester l'exécution du scénario. Et j'ai toujours les mêmes erreurs.

Voici ce que contient mon scenario d'envoi :

title.gettext Private, moderated for non subscribers

CustomCondition::test([sender],[listname]) smtp,dkim,md5,smime    -> do_it
true() smtp,dkim,md5,smime    -> reject

Et le test.pm

#!/usr/bin/perl
package CustomCondition::test;
use strict;
use Log;
sub verify {
    my $sender = shift;
    my $listname = shift;
    do_log ('info', 'arg :', $sender);
    do_log ('info', 'arg :', $listname);
    return 1;
}
1;

Je vous met les logs d'erreurs en PJ si ça peut aider.


Merci une fois de plus pour votre aide.


Bonne journée,


Antoine Boursier



On 01/09/2018 08:15 PM, David VERDIN wrote:
Je me demande si ce genre de choses ne trouverait pas utilement sa place dans le cœur de Sympa.
Comme règle de scénario standard.

----- Original Message -----
From: Benoît Marchal <adresse@cachée>
To: sympa-fr <adresse@cachée>
Sent: Tue, 09 Jan 2018 17:33:07 +0100 (CET)
Subject: Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP

Et bien on a retrouvé. 
En tout cas merci beaucoup car cela nous sert encore aujourd'hui. 

Bonne soirée 

----- Le 9 Jan 18, à 17:25, LALOT Dominique <adresse@cachée> a écrit : 

Salut Benoit,
On y voit encore TRACEDOM. Tiens ça doit être moi
A utiliser sans modération.. Et bien pratique quand on change de domaine, voire
valider des mails alternatifs.
A+
Dom
--
Dominique LALOT
Responsable Pôle Environnement Numérique
Direction O p érationnelle du Système d'Information (DOSI)
( Aix * Marseille U niversité
Coordonnées: [ http://annuaire.univ-amu.fr/personnel/detail/bGFsb3Q= |
http://annuaire.univ-amu.fr/personnel/detail/bGFsb3Q= ]
De : adresse@cachée <adresse@cachée> de
la part de Benoît Marchal <adresse@cachée>
Envoyé : mardi 9 janvier 2018 13:26:52
À : sympa-fr
Objet : Re: [sympa-fr] Scenario d'autorisation -RequêteLDAP
Bonjour,
Nous avons eu le même souci en 2012 lors de la création de l'université de
Lorraine, fusion des 4 universités lorraines.
J'avais fait un truc du genre en reprenant une idée de quelqu'un :
le fichier
custom_conditions/is_subscriber.pm
!/usr/bin/perl
use lib '/home/sympa/bin';
package CustomCondition::is_subscriber;
use strict;
use List;
use ULSympa;
use Log; # optional : we log parameters
sub verify {
my $listName = shift;
my $sender = shift;
my $robot = (scalar @_ )? $_[$#_]:"";
# BM : Création de l'objet List
my $list = ( $listName =~ /\@/ || $robot eq "")? new List($listName) : new List
($listName, $robot);
return -1 if( !defined($list));
my @alternatemail=ULSympa::alternate($sender);
#do_log ('info', "custom: is_subscriber(new): sender : ".$sender." pour la liste
".$listName.(( $robot ne "" )? "@".$robot:""));
foreach my $mail (@alternatemail){
#do_log ('info', "custom: is_subscriber: mail teste : ".$mail);
return 1 if $list->is_user($mail);
}
#do_log ('info', "TRACEDOM sender: $sender -> $list_name");
return -1;
}
## Packages must return true.
1;
Il y a un petit patch pour récupérer le robot de la liste s'il n'est pas connu
dans le premier paramètre passé à la fonction.
Et le module ULSympa.pm
package ULSympa;
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
@ISA = ('Exporter');
@EXPORT = qw( &alternate);
use Net::LDAP;
use strict;
my $refLDAP =
{
hosts => [ "<mon server ldap>" ],
basedn => "ou=people, dc=univ-lorraine, dc=fr",
filter => "(|(mail=%s)(udlMailAlias=%s))",
attrs => [ "mail", "udlMailAlias" ],
#filter => "(|(mail=%s)(udlOldMails=%s)(udlMailAlias=%s))",
#attrs => [ "mail", "udlOldMails", "udlMailAlias" ],
};
my $checkMail = "<listes des anciens domaines en les séparant par un pipe>";
##########################################################################################
# recoit une adresse mail en parametre
# retourne un tableau de toutes les adresses mail valides
##########################################################################################
sub alternate {
my $mail2check = shift;
return $mail2check unless ($mail2check =~ /\@/);
my @TMailsValides = (lc($mail2check));
my $refAttrs = $$refLDAP{attrs};
return @TMailsValides if ($mail2check !~ /$checkMail/i);
my $ldap = Net::LDAP->new($$refLDAP{hosts}) or return @TMailsValides;
my $mesg = $ldap->bind('', version => 3 ) or return @TMailsValides;
my $filter = "$$refLDAP{filter}";
$filter =~ s/\%s/$mail2check/sg;
$mesg = $ldap->search ( # perform a search
base => $$refLDAP{basedn},
filter => $filter,
attrs => $$refLDAP{attrs},
scope => "one"
);
$ldap->unbind();
return @TMailsValides if ($mesg->count == 0);
my $entry = $mesg->shift_entry;
foreach my $attr (@$refAttrs){
my $refVal = $entry->get_value($attr, asref =>1);
next unless (defined($refVal));
foreach my $val (@$refVal){
my $mail = lc($val);
next unless($mail =~ /\@/);
push (@TMailsValides, $mail) unless (grep /^$mail$/, @TMailsValides);
}
}
return @TMailsValides;
}
## Packages must return true.
1;
C'est un peu compliqué que la solution de david, mais présentent l'avantage de
prendre systématiquement l'ensemble des adresses d'une personne, si c'est connu
de l'annuaire de l'établissement. Ce qui est le cas chez nous.
A ce jour, on a supprimé le test avec $checkMail, puis que nous n'avons plus les
anciennes adresses (ou alors, elles sont dans l'annuaire).
Cela s'utilise comme David le donne.
Pas de souci pour aider si besoin.
Cordialement
----- Le 9 Jan 18, à 12:50, David Verdin <adresse@cachée> a écrit :
Bonjour,
À la louche, je dirais que c'est un bon candidat pour une custom condition: [
https://www.sympa.org/manual/authorization-scenarios#custom_perl_package_conditions
|
https://www.sympa.org/manual/authorization-scenarios#custom_perl_package_conditions
]
Un truc dans ce genre, peut-être, certainement améliorable : #!/usr/bin/perl
package CustomCondition::lilletruc;
use strict;
use List;
sub verify {
my ($sender, $listname) = @_;
return 0 unless ($sender && $listname);
my $list = List::new($listname);
return 0 unless ($list);
if ($list->is_user($sender) {
return 1;
}
return 0 unless ($sender =~ m{ univ-lille\.fr });
$sender =~ s{univ-lille\.fr}{univ-lille1.fr};
if ($list->is_user($sender) {
return 1;
}
$sender =~ s{univ-lille1\.fr}{univ-lille2.fr};
if ($list->is_user($sender) {
return 1;
}
$sender =~ s{univ-lille2\.fr}{univ-lille3.fr};
if ($list->is_user($sender) {
return 1;
}
return 0;
}
1;
Après, tu mets cette ligne dans ton scénario :
CustomCondition:: lilletruc ([sender],[listname]) smtp,smime,md5,dkim -> do_it()
Le scénario renvoie 1 si la personne est abonnée. Si l'adresse d'expédition
n'est pas abonnée et que c'est du univ-lille.fr, il essaie de substituer avec
du lille 1 2 ou 3.
Voilà. Le scénario n'est pas testé, donc à prendre avec des pincettes mais ça
vous fait une base de départ.
Bonne journée !
David
On 09/01/2018 12:22, Antoine BOURSIER wrote:
Bonjour à tous,
Je me permet de vous solliciter une fois de plus, pour un soucis sur un scenario
d'autorisation.
Nous avons historiquement à l'université, 3 types d'adresses mails
(@univ-lille1.fr, @univ-lille2.fr et @univ-lille3.fr).
Cette année, les 3 universités de Lille fusionnent et tout le monde utilisera à
terme une adresse en univ-lille.fr.
J'aimerais pouvoir mettre en place un scénario, qui autorise un utilisateur qui
écrit avec son adresse @univ-lille.fr à écrire à une liste, si celui-ci est
abonné avec son adresse en @univ-lille(1|2|3).fr.
J'ai pensé à faire une recherche LDAP pour récupérer l'ancienne adresse mail de
l'utilisateur et vérifier si celui-ci est abonné à la liste, mais je ne trouve
pas le moyen de le mettre en oeuvre.
Comment utiliser le résultat d'une requête LDAP avec la condition
"is_subscriber" du scénario, au lieu de "search" ?
Si quelqu'un a déjà eu l'occasion de travailler sur des scénario complexes ou à
une idée sur la façon de procéder, je suis preneur :)
PS : Je ne peux pas abonné les deux types d'adresses à la même liste. Les mails
étant transférés d'une boite à l'autre, cela causerait des doublons.
Merci à vous et bonne journée à tous.
Antoine Boursier
Administrateur Systèmes
Direction des systèmes d'information | Cellule Systèmes & Hébergements
[ mailto:adresse@cachée | adresse@cachée ]
Université de Lille | Sciences Humaines et Sociales
--
"Mieux vaut viser la perfection et la rater que viser la médiocrité et
l'atteindre."
- Francis Blanche
--
Benoît MARCHAL
Sous direction Infrastructure & Services
Direction du Numérique
Université de Lorraine
Tél : 03.72.74.11.39
mél : adresse@cachée

--
Jan 19 13:28:06 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessTemplate::_twist() Processing Sympa::Message::Template
<adresse@cachée,7390>;
adresse@cachée;
adresse@cachée; recipients=ARRAY;
adresse@cachée; template=listmaster_notification;
type=mail_intern_error
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: err main::#243 >
Sympa::Spindle::spin#92 > Sympa::Spindle::AuthorizeMessage::_twist#98 >
Sympa::Scenario::request_action#570 > Sympa::Scenario::verify#1379 >
Sympa::Scenario::verify_custom#1730 Error requiring test: Attempt to reload
/opt/sympa/etc/univ-lille.fr/custom_conditions/test.pm
aborted.#012Compilation failed in require at /opt/sympa/bin/Sympa/Scenario.pm
line 1728.#012 ()
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info
Sympa::Scenario::request_action() error in
CustomCondition::test([sender],[listname]),smtp,do_it
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info
Sympa::Scenario::request_action() Error in privateoreditorkey scenario, in
list test-custom-condition
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessTemplate::_twist() Processing Sympa::Message::Template
<adresse@cachée,7664>;
adresse@cachée;
adresse@cachée; recipients=ARRAY;
adresse@cachée; template=listmaster_notification;
type=error_performing_condition
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info Sympa::Alarm::store()
Stacking message about "error_performing_condition" for
adresse@cachée (univ-lille.fr)
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: err main::#243 >
Sympa::Spindle::spin#92 > Sympa::Spindle::AuthorizeMessage::_twist#103
Message Sympa::Message <adresse@cachée>
ignored because unable to evaluate scenario "send" for list Sympa::List
<adresse@cachée>
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessIncoming::_twist() Processing Sympa::Message
<adresse@cachée>;
adresse@cachée;
adresse@cachée;
adresse@cachée
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info
Sympa::Spindle::DoMessage::_twist() Processing message Sympa::Message
<adresse@cachée> for Sympa::List
<adresse@cachée> with priority 5,
<adresse@cachée>
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: notice
Sympa::Scenario::verify_custom() Use module
/opt/sympa/etc/univ-lille.fr/custom_conditions/test.pm for custom condition
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info
Sympa::Scenario::request_action() error in
CustomCondition::test([sender],[listname]),smtp,do_it
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info
Sympa::Scenario::request_action() Error in privateoreditorkey scenario, in
list test-custom-condition
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessTemplate::_twist() Processing Sympa::Message::Template
<adresse@cachée,7664>;
adresse@cachée;
adresse@cachée; recipients=ARRAY;
adresse@cachée; template=listmaster_notification;
type=error_performing_condition
Jan 19 13:29:22 sympa6-1-test sympa_msg[107586]: info Sympa::Alarm::store()
Stacking message about "error_performing_condition" for
adresse@cachée (univ-lille.fr)
Jan 19 13:29:23 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessTemplate::_twist() Processing Sympa::Message::Template
<adresse@cachée,2674>;
adresse@cachée;
adresse@cachée; recipients=ARRAY;
adresse@cachée; template=listmaster_notification;
type=mail_intern_error
Jan 19 13:29:23 sympa6-1-test sympa_msg[107586]: info Sympa::Alarm::store()
Stacking message about "mail_intern_error" for
adresse@cachée (univ-lille.fr)
Jan 19 13:29:23 sympa6-1-test sympa_msg[107586]: notice
Sympa::Spindle::ProcessTemplate::_twist() Processing Sympa::Message::Template
<adresse@cachée,176>;
envelope_sender=<>; adresse@cachée;
adresse@cachée;
adresse@cachée; template=delivery_status_notification;
action=failed; status=5.3.0



Archives gérées par MHonArc 2.6.19+.

Haut de le page