From 321d43636cdae352820ca7d9a54bb568af317b8d Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Sat, 27 May 2006 00:08:05 -0700 Subject: [PATCH] * Add multiple status mailbox types * Use Debbugs::Config * use warnings --- cgi/bugreport.cgi | 68 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index 16d6ecc..7405f4c 100755 --- a/cgi/bugreport.cgi +++ b/cgi/bugreport.cgi @@ -2,6 +2,7 @@ package debbugs; +use warnings; use strict; use POSIX qw(strftime tzset); use MIME::Parser; @@ -9,17 +10,16 @@ use MIME::Decoder; use IO::Scalar; use IO::File; +use Debbugs::Config qw(:globals); #require '/usr/lib/debbugs/errorlib'; require './common.pl'; -require '/etc/debbugs/config'; require '/etc/debbugs/text'; -use vars(qw($gEmailDomain $gHTMLTail $gSpoolDir $gWebDomain)); - # for read_log_records use Debbugs::Log; -use Debbugs::MIME qw(convert_to_utf8 decode_rfc1522); +use Debbugs::MIME qw(convert_to_utf8 decode_rfc1522 create_mime_message); +use Debbugs::CGI qw(:url :html); use Scalar::Util qw(looks_like_number); @@ -41,6 +41,11 @@ my $mime = ($param{'mime'} || 'yes') eq 'yes'; my $trim_headers = ($param{trim} || ($msg?'no':'yes')) eq 'yes'; +my $mbox_status_message = ($param{mboxstat}||'no') eq 'yes'; +my $mbox_maint = ($param{mboxmaint}||'no') eq 'yes'; +$mbox = 1 if $mbox_status_message or $mbox_maint; + + # Not used by this script directly, but fetch these so that pkgurl() and # friends can propagate them correctly. my $archive = ($param{'archive'} || 'no') eq 'yes'; @@ -410,7 +415,7 @@ sub handle_record{ $output .= 'Full text and rfc822 format available.'; - $output = "
\n" . $output . "
\n"; + $output = qq(
\n\n) . $output . "
\n"; } elsif (/recips/) { my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; @@ -420,6 +425,7 @@ sub handle_record{ elsif (defined $msg_id) { $$seen_msg_ids{$msg_id} = 1; } + $output .= qq(\n); $output .= 'View this message in rfc822 format'; $output .= handle_email_message($record->{text}, ref => $bug_number, @@ -439,7 +445,7 @@ sub handle_record{ } # Incomming Mail Message my ($received,$hostname) = $record->{text} =~ m/Received: \(at (\S+)\) by (\S+)\;/; - $output .= qq|

Message received at |. + $output .= qq|

Message received at |. htmlsanit("$received\@$hostname") . q| (full text'.q|, mbox)'.":

\n"; $output .= handle_email_message($record->{text}, ref => $bug_number, @@ -461,6 +467,7 @@ if (looks_like_number($msg) and ($msg-1) <= $#records) { } my @log; if ( $mbox ) { + my $date = strftime "%a %b %d %T %Y", localtime; if (@records > 1) { print qq(Content-Disposition: attachment; filename="bug_${ref}.mbox"\n); print "Content-Type: text/plain\n\n"; @@ -470,9 +477,49 @@ if ( $mbox ) { print qq(Content-Disposition: attachment; filename="bug_${ref}_message_${msg_num}.mbox"\n); print "Content-Type: message/rfc822\n\n"; } + if ($mbox_status_message and @records > 1) { + my $status_message=''; + my @status_fields = (retitle => 'subject', + package => 'package', + submitter => 'originator', + severity => 'severity', + tag => 'tags', + owner => 'owner', + blocks => 'blocks', + forward => 'forward', + ); + my ($key,$value); + while (($key,$value) = splice(@status_fields,0,2)) { + if (defined $status{$value} and length $status{$value}) { + $status_message .= qq($key $ref $status{$value}\n); + } + } + print STDOUT qq(From unknown $date\n), + create_mime_message([From => "$debbugs::gBug#$ref <$ref\@$debbugs::gEmailDomain>", + To => "$debbugs::gBug#$ref <$ref\@$debbugs::gEmailDomain>", + Subject => "Status: $status{subject}", + "Reply-To" => "$debbugs::gBug#$ref <$ref\@$debbugs::gEmailDomain>", + ], + <{type} !~ /^(?:recips|incoming-recv)$/; - next if not $boring and $record->{type} eq 'recips' and @records > 1; + my $wanted_type = $mbox_maint?'recips':'incoming-recv'; + # we want to include control messages anyway + my $record_wanted_anyway = 0; + my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; + next if exists $seen_message_ids{$msg_id}; + $seen_message_ids{$msg_id} = 1; + next if $msg_id =~/handler\..+\.ack(?:info)?\@/; + $record_wanted_anyway = 1 if $record->{text} =~ /^Received: \(at control\)/; + next if not $boring and $record->{type} ne $wanted_type and not $record_wanted_anyway and @records > 1; my @lines = split( "\n", $record->{text}, -1 ); if ( $lines[ 1 ] =~ m/^From / ) { my $tmp = $lines[ 0 ]; @@ -480,7 +527,6 @@ if ( $mbox ) { $lines[ 1 ] = $tmp; } if ( !( $lines[ 0 ] =~ m/^From / ) ) { - my $date = strftime "%a %b %d %T %Y", localtime; unshift @lines, "From unknown $date"; } map { s/^(>*From )/>$1/ } @lines[ 1 .. $#lines ]; @@ -524,7 +570,11 @@ print "

" . "$debbugs::gProject $debbugs::gBug report logs - " . $title . "

\n"; print "$descriptivehead\n"; -printf "\n", bugurl($ref, "mbox"); +printf qq(

View this report as an mbox folder,). + qq(status mbox, maintainer mbox

\n), + html_escape(bug_url($ref, mbox=>'yes')), + html_escape(bug_url($ref, mbox=>'yes',mboxstatus=>'yes')), + html_escape(bug_url($ref, mbox=>'yes',mboxmaint=>'yes')); print "
"; print "$log"; print "
"; -- 2.39.2