X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=cgi%2Fbugreport.cgi;h=5fe8db54e18e84350e762858b277d5a142ec8519;hb=2ee73259657d024a84208bc1f056606b668d2f74;hp=831d1718a4fe018c832ee8f3b3465d5998cc79c8;hpb=2d41a161d35f9dfd4522a8506da6d14e7faa6a46;p=debbugs.git diff --git a/cgi/bugreport.cgi b/cgi/bugreport.cgi index 831d171..5fe8db5 100755 --- a/cgi/bugreport.cgi +++ b/cgi/bugreport.cgi @@ -31,6 +31,7 @@ my $boring = ($param{'boring'} || 'no') eq 'yes'; my $terse = ($param{'terse'} || 'no') eq 'yes'; my $reverse = ($param{'reverse'} || 'no') eq 'yes'; my $mbox = ($param{'mbox'} || 'no') eq 'yes'; +my $mime = ($param{'mime'} || 'yes') eq 'yes'; # Not used by this script directly, but fetch these so that pkgurl() and # friends can propagate them correctly. @@ -52,6 +53,77 @@ if ($ENV{REQUEST_METHOD} eq 'HEAD' and not defined($att) and not $mbox) { exit 0; } +sub display_entity ($$$$\$\@); +sub display_entity ($$$$\$\@) { + my $entity = shift; + my $ref = shift; + my $top = shift; + my $xmessage = shift; + my $this = shift; + my $attachments = shift; + + my $head = $entity->head; + my $disposition = $head->mime_attr('content-disposition'); + $disposition = 'inline' if not defined $disposition or $disposition eq ''; + my $type = $entity->effective_type; + my $filename = $entity->head->recommended_filename; + $filename = '' unless defined $filename; + + if ($top) { + $$this .= htmlsanit($entity->stringify_header) unless ($terse); + $$this .= "\n"; + } + + unless (($top and $type =~ m[^text(?:/plain)?(?:;|$)]) or + ($type =~ m[^multipart/])) { + push @$attachments, $entity; + my @dlargs = ($ref, "msg=$xmessage", "att=$#$attachments"); + push @dlargs, "filename=$filename" if $filename ne ''; + my $printname = $filename; + $printname = 'Message part ' . ($#$attachments + 1) if $filename eq ''; + $$this .= '[$printname } . + "($type, $disposition)]\n\n"; + + if ($msg and defined($att) and $att eq $#$attachments) { + my $head = $entity->head; + chomp(my $type = $entity->effective_type); + my $body = $entity->stringify_body; + print "Content-Type: $type"; + print "; name=$filename" if $filename ne ''; + print "\n\n"; + my $decoder = new MIME::Decoder($head->mime_encoding); + $decoder->decode(new IO::Scalar(\$body), \*STDOUT); + exit(0); + } + } + + return if not $top and $disposition eq 'attachment' and not defined($att); + return unless ($type =~ m[^text/?] and $type !~ m[^text/html(?:;|$)]) or + $type =~ m[^application/pgp(?:;|$)] or + $entity->parts; + + if ($entity->is_multipart) { + my @parts = $entity->parts; + foreach my $part (@parts) { + display_entity($part, $ref, 0, $xmessage, + $$this, @$attachments); + $$this .= "\n"; + } + } elsif ($entity->parts) { + # We must be dealing with a nested message. + $$this .= "
\n"; + my @parts = $entity->parts; + foreach my $part (@parts) { + display_entity($part, $ref, 1, $xmessage, + $$this, @$attachments); + $$this .= "\n"; + } + $$this .= "\n"; + } else { + $$this .= htmlsanit($entity->bodyhandle->as_string) unless ($terse); + } +} + my %maintainer = %{getmaintainers()}; my %pkgsrc = %{getpkgsrc()}; @@ -93,7 +165,7 @@ my @tpacks = splitpackages($tpack); if ($status{severity} eq 'normal') { $showseverity = ''; -#} elsif (grep($status{severity} eq $_, @strongseverities)) { +#} elsif (isstrongseverity($status{severity})) { # $showseverity = "Severity: $status{severity};\n"; } else { $showseverity = "Severity: $status{severity};\n"; @@ -126,7 +198,22 @@ if (@merged) { push @descstates, $descmerged; } -if (length($status{done})) { +if (@{$status{found_versions}}) { + my $foundtext = 'Found in '; + $foundtext .= (@{$status{found_versions}} == 1) ? 'version ' : 'versions '; + $foundtext .= join ', ', map htmlsanit($_), @{$status{found_versions}}; + push @descstates, $foundtext; +} + +if (@{$status{fixed_versions}}) { + my $fixedtext = 'Fixed in '; + $fixedtext .= (@{$status{fixed_versions}} == 1) ? 'version ' : 'versions '; + $fixedtext .= join ', ', map htmlsanit($_), @{$status{fixed_versions}}; + if (length($status{done})) { + $fixedtext .= ' by ' . htmlsanit($status{done}); + } + push @descstates, $fixedtext; +} elsif (length($status{done})) { push @descstates, "Done: ".htmlsanit($status{done}); } elsif (length($status{forwarded})) { push @descstates, "Forwarded to ".maybelink($status{forwarded}); @@ -139,15 +226,17 @@ foreach my $pkg (@tpacks) { my $tmaint = defined($maintainer{$pkg}) ? $maintainer{$pkg} : '(unknown)'; my $tsrc = defined($pkgsrc{$pkg}) ? $pkgsrc{$pkg} : '(unknown)'; - $descriptivehead .= "Maintainer for $pkg is\n". - ''.htmlsanit($tmaint).''; + $descriptivehead .= + htmlmaintlinks(sub { $_[0] == 1 ? "Maintainer for $pkg is\n" + : "Maintainers for $pkg are\n" }, + $tmaint); $descriptivehead .= ";\nSource for $pkg is\n". '$tsrc" if ($tsrc ne "(unknown)"); $descriptivehead .= ".\n
Bug is archived. No further changes may be made.
"; } @@ -209,60 +298,20 @@ while(my $line =\n$this\n"; @@ -271,8 +320,6 @@ while(my $line =
" : "
View this report as an mbox folder.
\n", mboxurl($ref);