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

Bénéficiez de statistiques de fréquentations web légères et respectueuses avec Plausible Analytics

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

Pour être visible sur le Web, un site est indispensable, cela va de soi. Mais il est impossible d’en évaluer le succès, ni celui de ses améliorations, sans établir de statistiques de fréquentation : combien de visiteurs ? Combien de pages consultées ? Quel temps passé ? Comment savoir si le nouveau design plaît réellement ? Autant de questions auxquelles Plausible se propose de répondre.

Quarkus : applications Java pour conteneurs

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

Initié par Red Hat, il y a quelques années le projet Quarkus a pris son envol et en est désormais à sa troisième version majeure. Il propose un cadre d’exécution pour une application de Java radicalement différente, où son exécution ultra optimisée en fait un parfait candidat pour le déploiement sur des conteneurs tels que ceux de Docker ou Podman. Quarkus va même encore plus loin, en permettant de transformer l’application Java en un exécutable natif ! Voici une rapide introduction, par la pratique, à cet incroyable framework, qui nous offrira l’opportunité d’illustrer également sa facilité de prise en main.

De la scytale au bit quantique : l’avenir de la cryptographie

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

Imaginez un monde où nos données seraient aussi insaisissables que le célèbre chat de Schrödinger : à la fois sécurisées et non sécurisées jusqu'à ce qu'un cryptographe quantique décide d’y jeter un œil. Cet article nous emmène dans les méandres de la cryptographie quantique, où la physique quantique n'est pas seulement une affaire de laboratoires, mais la clé d'un futur numérique très sécurisé. Entre principes quantiques mystérieux, défis techniques, et applications pratiques, nous allons découvrir comment cette technologie s'apprête à encoder nos données dans une dimension où même les meilleurs cryptographes n’y pourraient rien faire.

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous