-my $xmessage = 1;
-my $suppressnext = 0;
-
-my $thisheader = '';
-my $this = '';
-
-my $cmsg = 1;
-
-my $normstate= 'kill-init';
-my $linenum = 0;
-my $mail = '';
-my @mails = ();
-while(my $line = <L>) {
- $linenum++;
- if ($line =~ m/^.$/ and 1 <= ord($line) && ord($line) <= 7) {
- # state transitions
- my $newstate;
- my $statenum = ord($line);
-
- $newstate = 'autocheck' if ($statenum == 1);
- $newstate = 'recips' if ($statenum == 2);
- $newstate = 'kill-end' if ($statenum == 3);
- $newstate = 'go' if ($statenum == 5);
- $newstate = 'html' if ($statenum == 6);
- $newstate = 'incoming-recv' if ($statenum == 7);
-
- # disallowed transitions:
- $_ = "$normstate $newstate";
- unless (m/^(go|go-nox|html) kill-end$/
- || m/^(kill-init|kill-end) (incoming-recv|autocheck|recips|html)$/
- || m/^kill-body go$/)
- {
- &quit("$ref: Transition from $normstate to $newstate at $linenum disallowed");
- }
-
- if ($newstate eq 'go') {
- $this .= "<pre>\n";
- }
-
- if ($newstate eq 'html') {
- $this = '';
- }
-
- if ($newstate eq 'kill-end') {
-
- my $show = 1;
- $show = $boring
- if ($suppressnext && $normstate ne 'html');
-
- $show = ($xmessage == $msg) if ($msg);
-
- push @mails, $mail if ( $mbox && $mail );
- if ($show) {
- my $downloadHtml = '';
- if ($mail) {
- my $parser = new MIME::Parser;
- $parser->tmp_to_core(1);
- $parser->output_to_core(1);
-# $parser->output_under("/tmp");
- my $entity = $parser->parse_data($mail);
- # TODO: make local subdir, clean it outselves
- # the following does NOT delete the msg dirs in /tmp
- END { $entity->purge; $parser->filer->purge; }
- my @attachments = ();
- if ( $entity->is_multipart ) {
- my @parts = $entity->parts_DFS;
-# $this .= htmlsanit($entity->head->stringify);
- my @keep = ();
- foreach ( @parts ) {
- my $head = $_->head;
-# $head->mime_attr("content-transfer-encoding" => "8bit")
-# if !$head->mime_attr("content-transfer-encoding");
- my ($disposition,$type) = (
- $head->mime_attr("content-disposition"),
- lc $head->mime_attr("content-type")
- );
-
-#print STDERR "'$type' '$disposition'\n";
- if ($disposition && ( $disposition eq "attachment" || $disposition eq "inline" ) && $_->head->recommended_filename ) {
- push @attachments, $_;
- my $file = $_->head->recommended_filename;
- $downloadHtml .= "View Attachment: <a href=\"".dlurl($ref,"msg=$xmessage","att=$#attachments","filename=$file")."\">$file</a>\n";
- if ($msg && $att eq $#attachments) {
- my $head = $_->head;
- my $type;
- chomp($type = $head->mime_attr("content-type"));
- my $body = $_->stringify_body;
- print "Content-Type: $type; name=$file\n\n";
- my $decoder = new MIME::Decoder($head->mime_encoding);
- $decoder->decode(new IO::Scalar(\$body), \*STDOUT);
- exit(0);
- }
- if ($type eq 'text/plain') {
-# push @keep, $_;
- }
-# $this .= htmlsanit($_->head->stringify);
- } else {
-# $this .= htmlsanit($_->head->stringify);
-# push @keep, $_;
- }
-# $this .= "\n" . htmlsanit($_->stringify_body);
- }
-# $entity->parts(\@keep) if (!$msg);
- }
- $this .= htmlsanit($entity->stringify);
- }
- $this = "$downloadHtml\n$this$downloadHtml" if $downloadHtml;
- $downloadHtml = '';
- $this = "<pre>\n$this</pre>\n"
- if $normstate eq 'go' || $normstate eq 'go-nox';
- $this = "$thisheader$this" if $thisheader && !( $normstate eq 'html' );;
- $thisheader = '';
- if ($normstate eq 'html') {
- $this .= " <em><A href=\"" . bugurl($ref, "msg=$xmessage") . "\">Full text</A> available.</em>";
- }
- if ($reverse) {
- $log = "$this\n<hr>$log";
- } else {
- $log .= "$this\n<hr>\n";
- }
- }
-
- $xmessage++ if ($normstate ne 'html');
-
- $suppressnext = $normstate eq 'html';
- }
-
- $normstate = $newstate;
- $mail = '';
- next;
- }
-
- $_ = $line;
- if ($normstate eq 'incoming-recv') {
- my $pl= $_;
- $pl =~ s/\n+$//;
- m/^Received: \(at (\S+)\) by (\S+)\;/
- || &quit("bad line \`$pl' in state incoming-recv");
- $thisheader = "<h2>Message received at ".htmlsanit("$1\@$2")
- . ":</h2>\n";
- $this = '';
- $normstate= 'go';
- $mail .= $_;
- } elsif ($normstate eq 'html') {
- $this .= $_;
- } elsif ($normstate eq 'go') {
- if ($mail) {
- $mail .= $_;
- } else {
- $this .= htmlsanit($_);
- }
- } elsif ($normstate eq 'go-nox') {
- next if !s/^X//;
- if ($mail) {
- $mail .= $_;
- } else {
- $this .= htmlsanit($_);
- }
- } elsif ($normstate eq 'recips') {
- if (m/^-t$/) {
- $this = "<h2>Message sent:</h2>\n";
- } else {
- s/\04/, /g; s/\n$//;
- $this = "<h2>Message sent to ".htmlsanit($_).":</h2>\n";
- }
- $normstate= 'kill-body';
- } elsif ($normstate eq 'autocheck') {
- next if !m/^X-Debian-Bugs(-\w+)?: This is an autoforward from (\S+)/;
- $normstate= 'autowait';
- $this = "<h2>Message received at $2:</h2>\n";
- } elsif ($normstate eq 'autowait') {
- next if !m/^$/;
- $normstate= 'go-nox';
- $this .= "<pre>\n";
- } else {
- &quit("$ref state $normstate line \`$_'");
- }