Perles de Mongueurs : Réparer Mailman avec Perl

Magazine
Marque
GNU/Linux Magazine
Numéro
130
Mois de parution
septembre 2010


Résumé
Mailman est un gestionnaire de listes de diffusion. Mailman est écrit en Python. Mailman fonctionne. Mailman est utile. Mailman est partout. Un bon nombre de listes Perl sont gérées par Mailman. Je suis abonné à plus de cinquante listes gérées par Mailman.

Body

1. Étape 1 : détester Mailman

Mais Mailman est quand même un logiciel, ce qui le rend détestable.

Voici plusieurs raisons de détester Mailman :

- L'option nodupes, qui permet de refuser les copies multiples des messages. Comme expliqué dans la documentation de Mailman : lorsque votre adresse se trouve dans l'un des en-têtes To: ou Cc: d'un message adressé à la liste, vous pouvez choisir de ne pas recevoir de message supplémentaire en provenance de la liste. Choisissez Oui pour éviter de recevoir plusieurs copies ; Non si vous voulez les avoir. Sur la plupart des serveurs, cette option est par défaut à Oui, ce qui déjoue les filtres de messagerie basés sur l'en-tête List-Id. Je préfère recevoir quelques rares messages en double, et qu'ils soient tous correctement triés, que de devoir repasser derrière car Mailman a cru bien faire.

- Dans mon expérience, la case à cocher Paramètre global n'a jamais marché.

- Il n'existe pas d'outil en ligne de commandes pour gérer les listes en tant qu'abonné lambda (de tels outils existent pour les administrateurs de Mailman, mais il faut avoir un compte shell sur le serveur qui fait tourner Mailman).

Quand je me plains de l'option nodupes, on me répond en général : « Ben, configure ton compte ! ». Mais configurer son compte, cela veut dire en général : requérir le renvoi du mot de passe (car on a depuis le temps oublié celui fourni automatiquement par Mailman), attendre l'arrivée du message, le lire, copier le mot de passe, aller sur la page de la liste, s'authentifier, aller sur la page des options, trouver l'option recherchée (nodupes est en bas de la page), valider. Même en excluant l'attente du message, cela va prendre plusieurs minutes. Multiplié par cinquante abonnements, on arrive rapidement à plusieurs heures perdues sur une tâche stupide et répétitive qui mériterait franchement d'être automatisée.

2. Étape 2 : programmer en Perl

Vous l'avez compris, en tant qu'utilisateur de Mailman, j'ai besoin d'un outil en ligne de commandes pour configurer mes listes. Et en tant que programmeur paresseux, j'ai préféré passer quelques heures à programmer une bonne fois pour toutes cet outil, plutôt que de cliquer comme un idiot pendant une après-midi entière.

La distribution WWW-Mailman contient plusieurs exemples dans son répertoire eg/, condensés ici en un seul programme.

    #!/usr/bin/env perl

use strict;

    use warnings;

    use WWW::Mailman;

    use Getopt::Long;

    use YAML::Tiny qw( LoadFile DumpFile Dump );

# La table de distribution %action est définie comme suit:

    # nom => {

    #    description => 'Courte description',

    # code => sub { ...; },

    # }

    my %action = (

# définition de %action

        # (voir la suite de la perle)

    );

    # paramètres de ligne de commande

    my %param = (

        config => 'mailman.yml',

        cookie => 'mailman.cookie',

    );

    GetOptions( \%param, 'config=s', 'cookie=s' )

or die "Usage: $0 [ --config file ] [ --cookie file ] <action>\n";

    # pas d'action ou action inconnue

    my $action = shift;

    if ( !$action || !exists $action{$action} ) {

print "Actions disponibles:\n",

            map { sprintf " %10s: %s\n", $_, $action{$_}{description} }

keys %action;

        exit !!$action;

    }

    # lecture des fichiers de configuration

    my $lists = LoadFile( $param{config} );

    my %opt = ( cookie_file => $param{cookie} );

# appel de la commande de la table de distribution

    $action{$action}->( \%opt, $lists );

Le code ci-dessus est très simple. Il analyse les paramètres de ligne de commandes pour trouver le fichier de configuration des listes Mailman et un éventuel fichier de sauvegarde des cookies (l'authentification par cookies accélère les choses en éliminant un certain nombre de requêtes intermédiaires).

Après lecture du fichier de configuration des listes, on définit les options par défaut de WWW::Mailman (le fichier de cookies) et on lance la commande demandée depuis la table de distribution.

Le fichier de configuration YAML ressemble à ceci :

    ---

    example:

      uri: http://lists.example.com/mailman/listinfo/example

email: user@example.com

      password: s3kr3t

3. Étape 3 : profiter !

Il ne reste donc plus qu'à ajouter les entrées qui nous seront utiles dans la table de distribution.

3.1 Obtenir la liste de toutes mes listes

        othersubs => {

            description => q{Demande un rappel de mot de passe},

            code => sub {

                my ( $opt, $lists ) = @_;

                for my $list ( values %$lists ) {

                    my $mm = WWW::Mailman->new( %opt, %$list );

                    for my $uri ( $mm->othersubs ) {

                        my $other = WWW::Mailman->new( %opt, uri => $uri );

                        $lists->{ $other->list }

||= { uri => "$uri", email => $mm->email };

                    }

                }

                # met à jour le fichier de configuration

                DumpFile( $param{config}, $lists );

}

       },

Pour chaque liste configurée, WWW::Mailman ira chercher les autres listes auxquelles l'utilisateur est abonné sur le serveur, et les ajoutera à sa configuration si elles n'y sont pas déjà.

3.2 Obtenir les mots de passe de toutes mes listes

        emailpw => {

            description => q{Demande un rappel de mot de passe},

            code => sub {

                my ( $opt, $lists ) = @_;

                for my $list ( values %$lists ) {

                    next if exists $list->{password};

print "Demande de mot de passe pour $list->{uri}\n";

                    WWW::Mailman->new( %opt, %$list )->emailpw;

}

            }

        },

Une fois la liste des listes obtenue, il nous faut les mots de passe. Cette commande va se connecter à chacune des listes pour obtenir un rappel de mot de passe.

J'avoue n'avoir pas été assez paresseux pour programmer un script de récupération des mots de passe dans ma boîte e-mail (principalement parce c'est vraiment une opération que je ne ferai qu'une fois, et que désormais je mettrai mon fichier de configuration à jour au fur et à mesure).

Après une courte séance de copier/coller entre la messagerie et le fichier de configuration, on peut passer à la suite.

3.3 Reconfigurer toutes mes listes

        nodupes => {

            description => q{Désactive l'option <nodupes>},

            code => sub {

                my ( $opt, $lists ) = @_;

                for my $list ( values %$lists ) {

                    my $mm = WWW::Mailman->new( %$opt, %$list );

$mm->options( { nodupes => 0 } );

                }

            },

        },

Cette commande reconfigure toutes les listes exactement comme j'en ai envie. :-)

Pour savoir exactement quels paramètres fournir à la référence de table de hachage en paramètre d'options(), le plus simple est de commencer par faire un script qui affiche le contenu du formulaire et de comparer avec le formulaire sur le Web. Cela donne en général une bonne idée des valeurs qu'on veut y mettre.

3.4 Et pour les administrateurs de listes ?

WWW::Mailman dispose également de méthodes donnant accès aux pages d'administration d'une liste. Comme pour un simple utilisateur la connexion est automatique, pourvu que l'objet ait été configuré avec les bons mots de passe.

L'ajout de commandes (d'entrées dans la table de distribution) d'administration à cet utilitaire est laissé en exercice au lecteur. ;-)

Références

- La liste de diffusion anglophone « hates software » (qui n'est pas gérée par Mailman, mais par un autre logiciel détestable : Siesta). C'est un défouloir pour les utilisateurs frustrés par les logiciels qu'ils utilisent. http://hates-software.com/ J'apprécie cette liste pour le niveau très élevé des participants, dont certains sont de véritables « dinosaures » de l'informatique avec, vous pouvez l'imaginer, une grande quantité de haine à remâcher.

- « Perles de Mongueurs 6 : Tables de distribution », par Philippe Bruhat, paru dans GNU/Linux Magazine nº65, octobre 2004, http://articles.mongueurs.net/magazines/perles/perles-06.html

- La distribution WWW-Mailman sur CPAN, http://search.cpan.org/dist/WWW-Mailman

- « LWP, Le Web en Perl (3) », par Philippe Bruhat, paru dans GNU/Linux Magazine nº58, février 2004. La section « Un exemple pas à pas » : le formulaire de Mailman constitue ma première expérience avec l'automatisation des interactions avec Mailman, http://articles.mongueurs.net/magazines/linuxmag58.html#h3

À vous !

Envoyez vos perles à perles@mongueurs.net, elles seront peut-être publiées dans un prochain numéro de GNU/Linux Magazine.




Article rédigé par

Par le(s) même(s) auteur(s)

Perles de Mongueurs

Magazine
Marque
GNU/Linux Magazine
Numéro
126
Mois de parution
avril 2010
Résumé
Depuis le numéro 59, les Mongueurs de Perl vous proposent tous les mois de découvrir les scripts jetables qu’ils ont pu coder ou découvrir dans leur utilisation quotidienne de Perl. Bref, des choses trop courtes pour en faire un article, mais suffisamment intéressantes pour mériter d’être publiées. Ce sont les perles de Mongueurs.

Les derniers articles Premiums

Les derniers articles Premium

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Présentation de Kafka Connect

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Un cluster Apache Kafka est déjà, à lui seul, une puissante infrastructure pour faire de l’event streaming… Et si nous pouvions, d’un coup de baguette magique, lui permettre de consommer des informations issues de systèmes de données plus traditionnels, tels que les bases de données ? C’est là qu’intervient Kafka Connect, un autre composant de l’écosystème du projet.

Le combo gagnant de la virtualisation : QEMU et KVM

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

C’est un fait : la virtualisation est partout ! Que ce soit pour la flexibilité des systèmes ou bien leur sécurité, l’adoption de la virtualisation augmente dans toutes les organisations depuis des années. Dans cet article, nous allons nous focaliser sur deux technologies : QEMU et KVM. En combinant les deux, il est possible de créer des environnements de virtualisation très robustes.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 65 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous