9 my $publish_rejections_patfile= '/dev/null';
10 my $publish_rejections= 0;
14 last unless $ARGV[0] =~ m/^-/;
19 $publish_rejections= 1;
20 $publish_rejections_patfile= $1 if length $1;
22 die "bad option $_ ?";
31 $dir =~ s,/bin$,/log,;
36 sub parse__headerline () {
37 $f{Subject}= $' if m/^Subject:\s*/i; #';
38 $f{MessageID}= $' if m/^Message\-ID:\s*/i; #';
39 $f{From}= $' if m/^From:\s*/i; #';
41 sub parse__stumpsubject () {
42 $f{MessageNum}=$1 if m/^Subject:.*\:\:\w+\/(\d+)$/i;
53 sub parse_submission () {
59 print STDERR "$hadng $had2|$_|\n";
60 $hadng++ if m/^Newsgroups:/i;
67 last unless m/^\S+\:|^\s|^$|^From /;
71 $f{Event}= $had2 ? 'receive newstyle' : 'receive';
74 $f{Subject}= '[suppressed]';
75 $f{Event}= 'receive junk';
79 sub parse_stump2webstump () {
82 parse__stumpsubject() unless exists $f{'MessageNum'};
93 sub parse_webstump2stump () {
96 parse__stumpsubject();
101 next unless m/^reject|^approve|^preapprove/;
107 sub parse_mailout () {
110 $keepheader= 1 unless m/^[ \t]/;
115 $keepheader= 'mangle'
124 $line =~ s/\@.{0,2}/ at ../g if $keepheader eq 'mangle';
128 if (m/^X-Webstump-Event:\s*(?:\[(\d+)\])?\s*/i) { #';
129 $f{Event}= "notify $'";
130 $f{MessageNum}= $1 if defined $1;
137 next unless s/^\> //;
145 while (<STDIN>) { $message .= $_; }
146 STDIN->error and die $!;
150 sub want_publish_rejection_kind ($) {
152 return 1 if $publish_rejections_patfile eq '';
153 if (!open PF, '<', $publish_rejections_patfile) {
154 return 1 if $!==&ENOENT;
155 die "$publish_rejections_patfile: $!";
163 s/[^0-9a-zA-Z*?]/\\$&/g;
166 return $yn if $kind =~ m/^$_$/;
172 if ($publish_rejections &&
173 $f{Event} =~ m/^notify reject (\S+)/ &&
174 want_publish_rejection_kind($1))
176 $f{CopyRef}= $f{MessageNum} || $f{MessageID};
177 $f{CopyRef} =~ s/\W/ sprintf '-%02x', ord($&) /ge;
178 open I, ">$dir/public/nr-$f{CopyRef}.txt" or die $!;
179 print I $message or die $!;
183 open L, ">>$dir/event.log" or die $!;
187 $v= '' unless defined $v;
191 } qw(Now MessageNum MessageID From Subject Event CopyRef);
193 print L join("\t",@s)."\n" or die $!;