  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.

  11..  CCooppyyrriigghhtt eett aauuttrreess cchhoosseess

  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,  <http://203.29.72.65/>.

  22..  IInnttrroodduuccttiioonn

  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.

  22..11..  OOuu ttrroouuvveerr mmaaiill22nneewwss..ppll

  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.

  33..  VVuuee dd''eennsseemmbbllee dduu ssyysstteemmee

  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.

  33..11..  LLee ccoouurrrriieerr vveennaanntt ddee llaa lliissttee ddee ddiissttrriibbuuttiioonn

  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.

  33..22..  MMeessssaaggeess ppoosstteess ddaannss llee ggrroouuppee ddee nneewwss llooccaall

  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.

  44..  CCoonnffiigguurreerr mmaaiill22nneewwss

  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).

  55..  MMeettttrree eenn ppllaaccee lleess aalliiaass ddee mmaaiill

  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 :

       <adresse email abonnee a la liste>: \
                 "| /usr/local/scripts/mail2news.pl <nom du groupe de news local>"

  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.

  66..  CCoonnffiigguurreerr lleess ggrroouuppeess ddee nneewwss eett llee sseerrvveeuurr ddee nneewwss ((iinnnndd)

  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 <nom du nouveau groupe> m <administrateur>

  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

  77..  AAbboonnnneerr ll''aalliiaass mmaaiill22nneewwss 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.

  88..  SSii ccaa nnee ffoonnccttiioonnnnee ppaass......

  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

  99..  LLee ssccrriipptt mmaaiill22nneewwss..ppll

  ______________________________________________________________________
  #!/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 (<STDIN>) {
     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 <STDIN>;   # avale le reste du message

  close INEWS;
  exit $?;
  ______________________________________________________________________

