Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa
Archives de la liste
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP
- 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 :
Et le test.pm
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 --
|
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
-
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP,
Antoine Boursier, 19/01/2018
-
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP,
Benoît Marchal, 19/01/2018
-
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP,
David Verdin, 22/01/2018
- Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP, Antoine Boursier, 23/01/2018
- Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP, Antoine Boursier, 26/01/2018
-
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP,
David Verdin, 22/01/2018
-
Re: [sympa-fr] Scenariod'autorisation-RequêteLDAP,
Benoît Marchal, 19/01/2018
Archives gérées par MHonArc 2.6.19+.