X-Git-Url: https://code.th-h.de/?p=usenet%2Fyapfaq.git;a=blobdiff_plain;f=yapfaq.pl;h=816f1954177b1ce7891f057d3748d87628c7c4ec;hp=14efde4e10507f9cf5bdb60425955246f3aaffa5;hb=7ef63844b5c14ca2bf5875bb39012faab0402f4f;hpb=227afd47f619343b93c4c7de22deea44b8562939 diff --git a/yapfaq.pl b/yapfaq.pl index 14efde4..816f195 100644 --- a/yapfaq.pl +++ b/yapfaq.pl @@ -1,6 +1,6 @@ #! /usr/bin/perl -W # -# yapfaq Version 0.6 by Thomas Hochstein +# yapfaq Version 0.7 by Thomas Hochstein # (Original author: Marc Brockschmidt) # # This script posts any project described in its config-file. Most people @@ -12,7 +12,7 @@ # It can be redistributed and/or modified under the same terms under # which Perl itself is published. -my $Version = "0.6.2"; +my $Version = "0.8-prelease"; my $RCFile = '.yapfaqrc'; my @ValidConfVars = ('NNTPServer','NNTPUser','NNTPPass','Sender','ConfigFile', @@ -20,7 +20,7 @@ my @ValidConfVars = ('NNTPServer','NNTPUser','NNTPPass','Sender','ConfigFile', 'PathtoPGPPass','pgpbegin','pgpend','pgptmpf','pgpheader'); ################################### Defaults ################################## -my %Config = (NNTPServer => "localhost", +my %Config = (NNTPServer => "", NNTPUser => "", NNTPPass => "", Sender => "", @@ -207,10 +207,12 @@ sub readconfig{ $Error .= "E: The Posting-frequency for your project \"$$Config[$i]{'name'}\" is invalid.\n" } unless(!$$Config[$i]{'expires'} || $$Config[$i]{'expires'} =~ /^\s*\d+\s*[dwmy]\s*$/) { - warn "$0: W: The Expires for your project \"$$Config[$i]{'name'}\" is invalid - set to 3 month.\n"; + warn "$0: W: The Expires for your project \"$$Config[$i]{'name'}\" is invalid - set to 3 month.\n"; + $$Config[$i]{'expires'} = '3m'; # set default (3 month) if expires is unset or invalid } - unless(defined($$Config[$i]{'mid-format'}) && $$Config[$i]{'mid-format'} =~ /^<\S+\@\S{2,}\.\S{2,}>$/) { - warn "$0: W: The Expires for your project \"$$Config[$i]{'name'}\" seems to be invalid - set to default.\n"; + unless(!$$Config[$i]{'mid-format'} || $$Config[$i]{'mid-format'} =~ /^<\S+\@\S{2,}\.\S{2,}>$/) { + warn "$0: W: The Message-ID format for your project \"$$Config[$i]{'name'}\" seems to be invalid - set to default.\n"; + $$Config[$i]{'mid-format'} = '<%n-%d.%m.%y@'.hostfqdn.'>'; # set default if mid-format is invalid } } $Error .= "-" x 25 . 'program terminated' . "-" x 25 . "\n" if $Error; @@ -232,6 +234,21 @@ sub calcdelta { } return ($NYear, $NMonth, $NDay); } + +################################ updatestatus ############################### +# Takes a MID and a status file name +# and writes status information to disk + +sub updatestatus { + my ($ActName, $File, $date, $MID) = @_; + + print "$$ActName: Save status information.\n" if($Options{'v'}); + + open (FH, ">$$File.cfg") or die "$0: E: Can't open $$File.cfg: $!"; + print FH "##;; Lastpost: $date\n"; + print FH "##;; LastMID: $MID\n"; + close FH; +} ################################## postfaq ################################## # Takes a filename and many other vars. @@ -249,7 +266,7 @@ sub postfaq { $$TDD = ($$TDD < 10 && $$TDD !~ /^0/) ? "0" . $$TDD : $$TDD; $MID = $$MIDF; - $MID = '<%n-%d.%m.%y@'.hostfqdn.'>' if !defined($MID); + $MID = '<%n-%d.%m.%y@'.hostfqdn.'>' if !defined($MID); # set to default if unset $MID =~ s/\%n/$$ActName/g; $MID =~ s/\%d/$$TDD/g; $MID =~ s/\%m/$$TDM/g; @@ -321,18 +338,13 @@ sub postfaq { # post article print "$$ActName: Posting article ...\n" if($Options{'v'}); - post(\@Article); - - # Test mode? - return if($Options{'t'}); - - # otherwise: update status data - print "$$ActName: Save status information.\n" if($Options{'v'}); - - open (FH, ">$$File.cfg") or die "$0: E: Can't open $$File.cfg: $!"; - print FH "##;; Lastpost: $day.$month.$year\n"; - print FH "##;; LastMID: $MID\n"; - close FH; + my $failure = post(\@Article); + + if ($failure) { + print "$$ActName: Posting failed, ERROR.dat may have more information.\n" if($Options{'v'} && (!defined($Options{'t'}) || $Options{'t'} !~ /console/i)); + } else { + updatestatus($ActName, $File, "$day.$month.$year", $MID) if !defined($Options{'t'}); + } } ################################## post ################################## @@ -342,42 +354,49 @@ sub postfaq { sub post { my ($ArticleR) = @_; + my ($failure) = -1; - # Test mode? + # test mode - print article to console if(defined($Options{'t'}) and $Options{'t'} =~ /console/i) { print "-----BEGIN--------------------------------------------------\n"; - print @$ArticleR; + print @$ArticleR; print "------END---------------------------------------------------\n"; - return; - } - - # pipe to script? - if(defined($Options{'s'})) { + # pipe article to script + } elsif(defined($Options{'s'})) { open (POST, "| $Options{'s'}") or die "$0: E: Cannot fork $Options{'s'}: $!\n"; print POST @$ArticleR; close POST; - return; - } - - my $NewsConnection = Net::NNTP->new($Config{'NNTPServer'}, Reader => 1) or die "$0: E: Can't connect to news server '$Config{'NNTPServer'}'!\n"; - $NewsConnection->authinfo ($Config{'NNTPUser'}, $Config{'NNTPPass'}) if (defined($Config{'NNTPUser'})); - $NewsConnection->post(); - $NewsConnection->datasend (@$ArticleR); - $NewsConnection->dataend(); - - # Posting failed? Save to ERROR.dat - if (!$NewsConnection->ok()) { - open FH, ">>ERROR.dat"; - print FH "\nPosting failed! Saving to ERROR.dat. Response from news server:\n"; - print FH $NewsConnection->code(); - print FH $NewsConnection->message(); - print FH "\n"; - print FH @$ArticleR; - print FH "-" x 80, "\n"; - close FH; + if ($? == 0) { + $failure = 0; + } else { + warn "$0: W: $Options{'s'} exited with status ", ($? >> 8), "\n"; + $failure = $?; + } + # post article + } else { + my $NewsConnection = Net::NNTP->new($Config{'NNTPServer'}, Reader => 1) or die "$0: E: Can't connect to news server '$Config{'NNTPServer'}'!\n"; + $NewsConnection->authinfo ($Config{'NNTPUser'}, $Config{'NNTPPass'}) if (defined($Config{'NNTPUser'})); + $NewsConnection->post(); + $NewsConnection->datasend (@$ArticleR); + $NewsConnection->dataend(); + + if ($NewsConnection->ok()) { + $failure = 0; + # Posting failed? Save to ERROR.dat + } else { + warn "$0: W: Posting failed!\n"; + open FH, ">>ERROR.dat"; + print FH "\nPosting failed! Saving to ERROR.dat. Response from news server:\n"; + print FH $NewsConnection->code(); + print FH $NewsConnection->message(); + print FH "\n"; + print FH @$ArticleR; + print FH "-" x 80, "\n"; + close FH; + } + $NewsConnection->quit(); } - - $NewsConnection->quit(); + return $failure; } #-------- sub getpgpcommand @@ -618,7 +637,7 @@ or Ionths> or Iears>. This value must be set. -=item B = I