#!/usr/bin/perl -w use strict (qw(vars)); use IO::Handle; our %f; our ($how) = @_; my $dir= $0; $dir =~ s,/[^/]+$,,; $dir =~ s,/bin$,/log,; $dir .= "/$ARGV[1]"; my $message; sub parse__headerline () { $f{Subject}= $' if m/^Subject:\s*/i; #'; $f{MessageID}= $' if m/^Message\-ID:\s*/i; #'; $f{From}= $' if m/^From:\s*/i; #'; } sub parse__stumpsubject () { $f{MessageNum}=$1 if m/^Subject:.*\:\:\w+\/(\d+)$/i; } sub parse_posted () { while () { chomp; parse__headerline(); last if m/^$/; } $f{Event}= 'post'; } sub parse_submission () { my $hadng=0; while () { chomp; $hadng++ if m/^Newsgroups:/i; if (m/^$/) { last if $hadng; undef %f; } parse__headerline(); } $f{Event}= 'receive'; } sub parse_stump2webstump () { while () { chomp; parse__stumpsubject() unless exists $f{'MessageNum'}; last if m/^\@{40,}$/; } while () { chomp; last if m/^$/; parse__headerline(); } $f{Event}= 'enqueue'; } sub parse_webstump2stump () { while () { chomp; parse__stumpsubject(); last if m/^$/; } while () { chomp; next unless m/^reject|^approve|^preapprove/; $f{Event}= $_; last; } } sub parse_mailout () { my $keepheader= 1; while () { $keepheader= 1 unless m/^[ \t]/; $keepheader= 0 if m/^(?: received )/ix; $keepheader= 'mangle' if m/^(?: to | from | return-path | reply-to | errors-to )/ix; if ($keepheader) { my $line= $_; $line =~ s/\@.{0,2}/ at ../g if $keepheader eq 'mangle'; $message .= $line; } chomp; $f{Event}= "notify $'" if m/^X-Webstump-Event:\s*/i; #'; last if m/^$/; } while () { $message .= $_; chomp; next unless s/^\> //; last if m/^$/; parse__headerline(); } } $f{Event}= '?'; &{"parse_$ARGV[0]"}; while () { $message .= $_; } STDIN->error and die $!; $f{Now}= time; if ($f{Event} =~ m/^notify reject /) { #$ref= $f{MessageID} open I, ">$dir/nr-$f{MessageNum}.txt" or die $!; print I $message or die $!; close I or die $!; } open L, ">>$dir/event.log" or die $!; my @s= map { my $v= $f{$_}; $v= '' unless defined $v; $v =~ s/\t/ /g; $v =~ s/[\r\n]/?/g; $v; } qw(Now MessageNum MessageID From Subject Event); print L join("\t",@s)."\n" or die $!; close L or die $!;