Mini Howto Mail vers News Robert Hart, InterWeft IT Consultants Melbourne, Australie, iweft@ipax.com.au Traduit par Olivier Tharan, tharan@int-evry.fr v1.0, 4 novembre 1996 Ce document decrit comment configurer votre logiciel de News et mail2news.pl pour relier des listes de distribution aux groupes de news locaux. 11.. CCooppyyrriigghhtt eett aauuttrreess cchhoosseess Le copyright de ce document est retenu par l'auteur. Il donne la permission de distribuer ce document par des moyens electroniques et sur des CDs, a condition qu'il soit garde entierement dans son format d'origine. Il donne aussi la permission d'imprimer une copie de ce document pour usage personnel. La publication de ce document en partie ou en entier sans la permission du proprietaire du copyright de toute maniere autre qu'indiquee ci-dessus est interdite. Ce document est directement supporte par InterWeft IT Consultants (Melbourne, Australie). La derniere version de ce document est disponible sur le site WWW d'InterWeft chez InterWeft IT Consultants, . 22.. IInnttrroodduuccttiioonn La plupart des sites sur Internet sont toujours en train de chercher des moyens d'ameliorer l'utilisation de la bande passante limitee dont ils disposent sur leur lien a Internet. Supposons que plus d'un utilisateur s'abonne a la meme liste de distribution, et il y aura duplication de trafic. S'il y a un certain nombre de telles duplications, ou si le trafic sur les listes est important, la consommation de bande passante s'accroit. En abonnant le site a une liste (si c'est permis par le proprietaire de la liste), et en _r_o_u_t_a_n_t le courrier electronique vers le serveur de news local, il est possible de rendre les listes de distribution accessibles a tous les utilisateurs du site ou, en utilisant les principes de securite d'innd, de limiter l'acces a certains utilisateurs. Un tel abonnement de groupe (surtout s'il y a quelques listes a grand trafic) peut generer des economies d'utilisation de bande passante importantes. La lecture des listes a travers un lecteur de news offre aussi aux utilisateurs l'avantage du threading (NdT : creer des enfilades), qui n'est pas disponible dans de nombreux programmes de mail, et aussi l'avantage de liberer leur boite aux lettres pour du courrier peut- etre plus urgent ou plus personnel. Ce mini Howto decrit la mise en place du script mail2news.pl pour realiser ceci. 22..11.. OOuu ttrroouuvveerr mmaaiill22nneewwss..ppll L'auteur n'a pas pu trouver mail2news.pl sur le CPAN (le reseau complet d'archives Perl), mais il a pu passer devant sans le voir. Il est cependant sur sunsite.unc.edu (quelque part) et aussi sur ftp.redhat.com. Comme ce script Perl n'est pas tres long, vous le trouverez a la fin de ce Howto. 33.. VVuuee dd''eennsseemmbbllee dduu ssyysstteemmee Il est probablement plus facile de comprendre le fonctionnement de ce systeme en suivant un message a partir de la liste de distribution vers le groupe de news, puis d'un message poste sur le groupe de news local (route vers la liste de distribution) et en regardant comment ils sont traites. 33..11.. LLee ccoouurrrriieerr vveennaanntt ddee llaa lliissttee ddee ddiissttrriibbuuttiioonn Le courrier de la liste de distribution est envoye a toutes les adresses mail abonnees. Un alias de mail special est abonne a la liste de distribution en question et tout le trafic a destination et en provenance de la liste est ainsi envoye par le serveur de liste a cette adresse. Quand le courrier de la liste de distribution arrive sur la machine locale, l'alias de mail envoie le message entrant dans mail2news.pl. L'alias de mail specifie aussi le groupe de news (local) de destination. Le script mail2news.pl traite le message, en appliquant de nouvelles en-tetes et utilise ensuite rnews ou inews pour poster le message dans le groupe de news. 33..22.. MMeessssaaggeess ppoosstteess ddaannss llee ggrroouuppee ddee nneewwss llooccaall Le groupe de news local est installe en tant que groupe modere, puisque ceci nous permet de beneficier des possibilites de courrier electronique d'innd. Tout message poste dans un groupe modere n'est pas transmis automatiquement au groupe. A la place, les messages sont envoyes par _e_m_a_i_l au moderateur du groupe. En declarant le moderateur du groupe de news local comme etant l'adresse de la liste de distribution, tous les messages postes sur le groupe de news local seront envoyes par _e_m_a_i_l a la liste de distribution par innd et n'apparaitront qu'une fois qu'ils auront ete recus par mail2news.pl qui ajoute la ligne _a_p_p_r_o_v_e_d necessaire aux messages pour qu'innd accepte de les poster dans le groupe de news. 44.. CCoonnffiigguurreerr mmaaiill22nneewwss Placez le script mail2news.pl dans un endroit convenable. Je prefere /usr/local/scripts, mais l'endroit depend de vous. Vous devrez editer le script comme suit : +o au debut du script, assurez-vous que vous pointez vers le binaire Perl local ___________________________________________________________________ #!/usr/bin/perl # pointe vers l'endroit courant de Perl ___________________________________________________________________ +o j'ai eu des problemes avec les trois lignes suivantes. Les mettre en commentaire ne pose pas de problemes. ___________________________________________________________________ ( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/; die "$program: demande au moins la version 3 de Perl\n" if $version < 3; ___________________________________________________________________ +o editez les lignes suivantes pour pointer vers le programme qui poste (j'utilise rnews) et vers votre machine de news : ___________________________________________________________________ # $inews = "/usr/bin/inews"; # $iopts = "-h -o \"passerelle mail2news\""; $inews = "/usr/bin/rnews"; $iopts = ""; $postinghost = "votre.serveur.de.news"; # pointe vers votre serveur de news ___________________________________________________________________ +o assurez-vous que le script est executable (mode 755). 55.. MMeettttrree eenn ppllaaccee lleess aalliiaass ddee mmaaiill Editez /etc/aliases pour creer des entrees pour les listes de distribution que vous voulez envoyer vers les news. Chaque entree doit etre de la forme : : \ "| /usr/local/scripts/mail2news.pl " Si par exemple l'adresse de mail a laquelle il faut envoyer le courrier de la liste (l'adresse _e_m_a_i_l abonnee) est liste_site et le groupe de news local dans lequel il faut poster le courrier s'appelle groupe.site.local, l'alias sera # adresse d'abonnement de groupe pour machin@une.certaine.liste liste_site: "|/usr/local/scripts/mail2news.pl groupe.site.local" Creez une entree pour chaque liste de distribution que vous devez router vers votre serveur de news local et lancez ensuite newaliases. 66.. CCoonnffiigguurreerr lleess ggrroouuppeess ddee nneewwss eett llee sseerrvveeuurr ddee nneewwss ((iinnnndd) En utilisant ctlinnd, creez les groupes de news sur votre serveur de news. Rappelez-vous qu'ils doivent etre locaux, donc nommez-les de facon distincte avec un prefixe de facon a les exclure de votre distribution de news (dans le fichier newsfeeds). Vous devez aussi dire a innd que le groupe est modere (en utilisant ctlinnd). Rappelez-vous que innd est tres sensible aux proprietaires et permissions de fichiers, vous devez agir a ce niveau avec innd en tant qu'utilisateur _n_e_w_s. Vous indiquez un groupe modere en donnant le parametre m a la commande newgroup. ctlinnd newgroup m Le m indique a innd que le groupe est modere. Editez votre fichier newsfeeds pour vous assurer que ces groupes locaux ne sont pas distribues (sauf si vous voulez specifiquement que ca se passe ainsi). Par exemple, si votre liste de distribution s'appelle groupe.site.local, vous ajouterez sans doute !local* dans le second champ des sites que vous distribuez (ou dont vous recevez les news) dans votre fichier newsfeeds. Maintenant, de facon a vous assurer que les messages des utilisateurs sont envoyes sur la liste automatiquement par innd, editez /etc/news/moderators (ou /usr/local/news/moderators) pour ajouter une ligne qui declare l'adresse de la liste de distribution comme moderateur. groupe.site.local:liste@un.site.de.liste 77.. AAbboonnnneerr ll''aalliiaass mmaaiill22nneewwss a la liste de distribution Vous devez maintenant abonner l'alias de mail a la liste de distribution. Verifiez avec l'information de la liste de distribution comment s'abonner. Certaines listes de distribution vous permettent d'abonner une adresse _e_m_a_i_l differente de celle d'ou vient l'abonnement (elles verifient la confirmation avec l'adresse a abonner avant d'abonner reellement cette adresse). D'autres listes de distribution ne permettent pas ceci. Vous devrez donc _f_o_r_g_e_r une demande d'abonnement. Il y a plusieurs facons de faire ceci. L'une des plus simples est d'utiliser Netscape Mail configure (de maniere temporaire) avec l'adresse avec laquelle la liste de distribution doit envoyer le courrier. Apres l'abonnement, vous devriez voir un message de bienvenue de la part du serveur de listes dans votre serveur de news. Dans ce cas, tout s'est bien passe et vous pouvez maintenant tester l'autre sens en postant un message de news dans votre nouvelle liste. Le message _n_e _d_e_v_r_a_i_t _p_a_s apparaitre immediatement dans le groupe de news. Il devrait etre envoye par courrier electronique et recu a nouveau et poste dans le groupe de news. Si cela fonctionne, vous avez reussi a router la liste vers les news. 88.. SSii ccaa nnee ffoonnccttiioonnnnee ppaass...... Si ca ne marche pas, vous devez retrouver la trace des messages pour voir exactement ou ca s'arrete de fonctionner. Des outils utiles a ce niveau sont les logs de mail et de news. Robert Hart Melbourne, Victoria, Australie, octobre 1996 99.. LLee ssccrriipptt mmaaiill22nneewwss..ppll ______________________________________________________________________ #!/usr/bin/perl ($program = $0) =~ s%.*/%%; #( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/; #die "$program: demande au moins la version 3 de Perl\n" # if $version < 3; # $inews = "/usr/bin/inews"; # $iopts = "-h -o \"passerelle mail2news\""; $inews = "/usr/bin/rnews"; $iopts = ""; $postinghost = "votre.serveur.de.news"; if ($#ARGV < 0) { # $newsgroup = "test"; # nous attendons la ligne newsgroup dans le corps } elsif ($#ARGV == 0) { $newsgroup = $ARGV[0]; } else { die "usage: $program [groupe de news]\n"; } # si jamais inews fait un core dump ou quelque chose insense $SIG{'PIPE'} = "plumber"; sub plumber { die "$program: \"$inews\" est mort trop tot !\n"; } open (INEWS, "| $inews $iopts") || die "$program: ne peut pas lancer $inews\n"; # boucle qui prend les en-tetes while () { last if /^$/; # transforme la vraie ligne from: dans le vieux style s/^From:\s+(.*) <(.*)>/From: $2 ($1)/; s/Message-Id/Message-ID/; # transforme la ligne from_ en en-tete de chemin ; # fonctionne aussi en local s/^From\s+(\S+)@(\S+).*/Path: $2!$1/ || s/^From\s+(\S+)[^@]*$/Path: $1\n/; print INEWS # if /^(Date|From|Subject|Path|Newsgroups|Organization|Message-ID):/i; if /^(Date|From|Subject|Path|Newsgroups|Message-ID):/i; $saw_subject |= ( $+ eq 'Subject' ); $saw_msgid |= ( $+ eq 'Message-ID' ); # $saw_newsgroup |= ( $+ eq 'Newsgroups' ); } warn "$program: n'attendait pas le groupe dans les en-tetes et les arguments\n" if $newsgroup && $saw_newsgroup; die "$program: n'a pas obtenu le groupe des en-tetes ni des arguments\n" unless $newsgroup || $saw_newsgroup; $approved = $newsgroup; $approved =~ s/\./'-'/eg; ($sec,$min,$hour,$mday,$mon,$year)=localtime(time); $madeupid = "\<$year$mon$mday.$hour$min$sec.$$\@kepler.hedland.edu.au\>"; printf INEWS "Newsgroups: %s\n", $newsgroup if $newsgroup; printf INEWS "Approved: %s\@kepler.hedland.edu.au\n", $approved; print INEWS "Subject: Untitled\n" unless $saw_subject; printf INEWS "Message-ID: %s\n", $madeupid unless $saw_msgid; printf INEWS "NNTP-Posting-Host: %s\n", $postinghost; print INEWS "Organisation: (mail2news gateway)\n"; print INEWS "\n"; print INEWS while ; # avale le reste du message close INEWS; exit $?; ______________________________________________________________________ .