9 my $publish_rejections_patfile= '/dev/null';
10 my $publish_rejections= 0;
11 if ($ARGV[0] eq '-P') {
12 $publish_rejections= 1;
14 } elsif ($ARGV[0] =~ s/^\-P//) {
15 $publish_rejections= 1;
16 $publish_rejections_patfile= shift @ARGV;
23 $dir =~ s,/bin$,/log,;
28 sub parse__headerline () {
29 $f{Subject}= $' if m/^Subject:\s*/i; #';
30 $f{MessageID}= $' if m/^Message\-ID:\s*/i; #';
31 $f{From}= $' if m/^From:\s*/i; #';
33 sub parse__stumpsubject () {
34 $f{MessageNum}=$1 if m/^Subject:.*\:\:\w+\/(\d+)$/i;
45 sub parse_submission () {
51 print STDERR "$hadng $had2|$_|\n";
52 $hadng++ if m/^Newsgroups:/i;
59 last unless m/^\S+\:|^\s|^$|^From /;
63 $f{Event}= $had2 ? 'receive newstyle' : 'receive';
66 $f{Subject}= '[suppressed]';
67 $f{Event}= 'receive junk';
71 sub parse_stump2webstump () {
74 parse__stumpsubject() unless exists $f{'MessageNum'};
85 sub parse_webstump2stump () {
88 parse__stumpsubject();
93 next unless m/^reject|^approve|^preapprove/;
99 sub parse_mailout () {
102 $keepheader= 1 unless m/^[ \t]/;
107 $keepheader= 'mangle'
116 $line =~ s/\@.{0,2}/ at ../g if $keepheader eq 'mangle';
120 if (m/^X-Webstump-Event:\s*(?:\[(\d+)\])?\s*/i) { #';
121 $f{Event}= "notify $'";
122 $f{MessageNum}= $1 if defined $1;
129 next unless s/^\> //;
137 while (<STDIN>) { $message .= $_; }
138 STDIN->error and die $!;
142 sub want_publish_rejection_kind ($) {
144 return 1 if $publish_rejections_patfile eq '';
145 if (!open PF, '<', $publish_rejections_patfile) {
146 return 1 if $!==&ENOENT;
147 die "$publish_rejections_patfile: $!";
155 s/[^0-9a-zA-Z*?]/\\$&/g;
158 return $yn if $kind =~ m/^$_$/;
164 if ($publish_rejections &&
165 $f{Event} =~ m/^notify reject (\S+)/ &&
166 want_publish_rejection_kind($1))
168 $f{CopyRef}= $f{MessageNum} || $f{MessageID};
169 $f{CopyRef} =~ s/\W/ sprintf '-%02x', ord($&) /ge;
170 open I, ">$dir/public/nr-$f{CopyRef}.txt" or die $!;
171 print I $message or die $!;
175 open L, ">>$dir/event.log" or die $!;
179 $v= '' unless defined $v;
183 } qw(Now MessageNum MessageID From Subject Event CopyRef);
185 print L join("\t",@s)."\n" or die $!;