Change: Modify headers for test posts.
[usenet/yapfaq.git] / yapfaq.pl
index 2817dca..4fd0e53 100644 (file)
--- a/yapfaq.pl
+++ b/yapfaq.pl
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -W
 #
-# yapfaq Version 0.7 by Thomas Hochstein
+# yapfaq Version 0.8.1 by Thomas Hochstein
 # (Original author: Marc Brockschmidt)
 #
 # This script posts any project described in its config-file. Most people
 # It can be redistributed and/or modified under the same terms under 
 # which Perl itself is published.
 
-my $Version = "0.8-prelease";
+our $VERSION = "0.9-prelease";
 
 # Please do not change this setting!
 # You may override the default .rc file (.yapfaqrc) by using "-c .rc file"
 my $RCFile = '.yapfaqrc';
 # Valid configuration variables for use in a .rc file
-my @ValidConfVars = ('NNTPServer','NNTPUser','NNTPPass','Sender','ConfigFile');
+my @ValidConfVars = ('NNTPServer','NNTPUser','NNTPPass','Sender','ConfigFile','Program');
 
 ################################### Defaults ###################################
 # Please do not change anything in here!
@@ -27,7 +27,8 @@ my %Config = (NNTPServer => "",
               NNTPUser   => "",
               NNTPPass   => "",
               Sender     => "",
-              ConfigFile => "yapfaq.cfg");
+              ConfigFile => "yapfaq.cfg",
+              Program    => "");
 
 ################################# Main program #################################
 
@@ -37,6 +38,7 @@ use Net::Domain qw(hostfqdn);
 use Date::Calc qw(Add_Delta_YM Add_Delta_Days Delta_Days Today);
 use Fcntl ':flock'; # import LOCK_* constants
 use Getopt::Std;
+$Getopt::Std::STANDARD_HELP_VERSION = 1;
 my ($TDY, $TDM, $TDD) = Today(); #TD: Today's date
 
 # read commandline options
@@ -44,7 +46,7 @@ my %Options;
 getopts('Vhvpdt:f:c:s:', \%Options);
 # -V: print version / copyright information
 if ($Options{'V'}) {
-  print "$0 v $Version\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n";
+  print "$0 v $VERSION\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n";
   print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n";
   exit(0);
 }
@@ -64,6 +66,8 @@ if (-f $RCFile) {
   warn "$0: W: .rc file $RCFile does not exist!\n";
 }
 
+$Options{'s'} = $Config{'Program'} if (defined($Config{'Program'}) && $Config{'Program'} && !defined($Options{'s'}));
+
 # read configuration (configured FAQs)
 my @Config;
 readconfig (\$Config{'ConfigFile'}, \@Config, \$Faq);
@@ -259,7 +263,7 @@ sub postfaq {
     s/\r//;
     push (@Body, $_), next if $InRealBody;
     $InRealBody++ if /^$/;
-    $LastModified = $1 if /^Last-modified: (\S+)$/i;
+    $LastModified = $1 if /^Last-modified:\s*(\S+)\s*$/i;
     push @Body, $_;
   }
   close FH;
@@ -288,11 +292,17 @@ sub postfaq {
   #Replace %LM by the content of the news.answer-pseudo-header Last-modified:
   if ($LastModified) {
     $$Subject =~ s/\%LM/$LastModified/;
+  } else {
+    $$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//;
   }
 
   # Test mode?
   if($Options{'t'} and $Options{'t'} !~ /console/i) {
     $$NG = $Options{'t'};
+    $MID =~ s/@/-$Timestamp-test@/g;
+    $$ExtraHeaders .= "\n" if $$ExtraHeaders;
+    $$ExtraHeaders .= "X-Supersedes: $$Supersedes\nX-yapfaq-Remark: This is only a test message.";
+    undef $$Supersedes;
   }
 
   #Now create the complete Header:
@@ -309,7 +319,7 @@ sub postfaq {
   push @Header, "Reply-To: $$ReplyTo\n" if $$ReplyTo;
   push @Header, "Content-Type: text/plain; charset=ISO-8859-15\n";
   push @Header, "Content-Transfer-Encoding: 8bit\n";
-  push @Header, "User-Agent: yapfaq/$Version\n";
+  push @Header, "User-Agent: yapfaq/$VERSION\n";
   if ($$ExtraHeaders) {
     push @Header, "$_\n" for (split /\n/, $$ExtraHeaders);
   }
@@ -639,6 +649,13 @@ This setting is optional.
 The configuration file defining the FAQ(s) to post. Must be set (or
 omitted; the default is "yapfaq.cfg").
 
+=item B<Program> = I<file name> (optional)
+
+A program the article is piped to instead of posting it to Usenet.
+See option "-f" below (which takes preference).
+
+This setting is optional.
+
 =back
 
 =head3 Example runtime configuration file
@@ -648,6 +665,7 @@ omitted; the default is "yapfaq.cfg").
     NNTPPass   = ''
     Sender     = ''
     ConfigFile = 'yapfaq.cfg'
+    Program    = ''
 
 =head3 Using more than one runtime configuration
 
@@ -684,11 +702,16 @@ update any status information.
 =item B<-t> I<newsgroup(s) | CONSOLE> (test)
 
 Don't post to the newsgroups defined in F<yqpfaq.cfg>, but to the
-newsgroups given after B<-t> as a comma-separated list or print the
-FAQs to STDOUT separated by lines of dashes if the special string
-C<CONSOLE> is given.  This can be used to preview what B<yapfaq> would
-do without embarassing yourself on Usenet.  The status files are not
-updated when this option is given.
+(test) newsgroup(s) given after B<-t> as a comma-separated list or
+print the FAQs to STDOUT separated by lines of dashes if the special
+string C<CONSOLE> is given.  This can be used to preview what
+B<yapfaq> would do without embarassing yourself on Usenet. 
+
+The status files are not updated when this option is given.
+
+When this option is used to post to some other newsgroup(s), a(nother)
+timestamp is added to the Message-ID header and the Supersedes header
+is replaced by a special X-Supersedes header.
 
 You may want to use this with the B<-f> option (see below).
 
@@ -713,6 +736,9 @@ For example, you may want to use the I<inews> utility from the INN package
 or the much more powerful replacement I<tinews.pl> from
 I<ftp://ftp.tin.org/tin/tools/tinews.pl> which is able to sign postings.
 
+If I<Program> is also defined in the runtime configuration file (by default
+F<.yapfaqrc>), B<-s> takes preference.
+
 =item B<-c> I<.rc file>
 
 Load another runtime configuration file (.rc file) than F<.yaofaq.rc>.
@@ -792,13 +818,19 @@ the last post of that FAQ.
 
 =head1 BUGS
 
-Many, I'm sure.
+Please report any bugs or feature request to the author or use the
+bug tracker at L<http://bugs.th-h.de/>!
 
 =head1 SEE ALSO
 
 L<http://th-h.de/download/scripts.php> will have the current
 version of this program.
 
+This program is maintained using the Git version control system. You
+may clone L<git://code.th-h.de/usenet/yapfaq.git> to check out the
+current development tree or browse it on the web via
+L<http://code.th-h.de/?p=usenet/yapfaq.git>.
+
 =head1 AUTHOR
 
 Thomas Hochstein <thh@inter.net>
This page took 0.012217 seconds and 4 git commands to generate.