mail2news.pl
#!/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 $?;
Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre