#!/usr/bin/perl # $Id: query-pr.cgi,v 1.5 1998-01-22 02:31:11 fenner Exp $ $ENV{'PATH'} = "/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin"; %mons = ('Jan', '01', 'Feb', '02', 'Mar', '03', 'Apr', '04', 'May', '05', 'Jun', '06', 'Jul', '07', 'Aug', '08', 'Sep', '09', 'Oct', '10', 'Nov', '11', 'Dec', '12'); require "cgi-lib.pl"; require "cgi-style.pl"; require "getopts.pl"; &Getopts('p:'); if ($opt_p) { $input{'pr'} = $opt_p; } else { if (! &ReadParse(*input)) { print &html_header("PR Query Interface"); print "

Please enter the PR number you wish to query:

\n"; ($scriptname = $ENV{'SCRIPT_NAME'}) =~ s|^/?|/|; $scriptname =~ s|/$||; ($summary = $scriptname) =~ s/query-pr/query-pr-summary/; print "
\n"; print "
\n"; print "

See also the PR summary

\n"; print &html_footer; exit 0; } } $pr = $input{'pr'}; if ($pr < 1 || $pr > 99999) { print &html_header("FreeBSD Problem Report"); print "

Invalid problem report number: $pr

\n"; print &html_footer; exit 0; } unless (open(Q, "query-pr --restricted -F $pr 2>&1 |")) { print &html_header("Server error"); print "

Unable to open PR database.

\n"; print &html_footer; die "Unable to query PR's"; } $inhdr = 1; $multiline = 0; $from = ""; while() { chop; $html_fixup = 1; if (/^query-pr: /) { print &html_header("FreeBSD problem report"); print "

No PR found matching $pr

\n"; if ($_ ne "query-pr: no PRs matched") { print "

query-pr said:\n"; print "

$_\n";
	    print ;
	    print "
\n"; } print &html_footer; exit; } if (/^From:\s*(.*)$/) { $from = $1; ($email = $from) =~ s/.*<(.*)>.*/$1/; $email =~ s/\s*\(.*\)\s*//; $email .= '@freebsd.org' unless ($email =~ /@/); } if (/^>Responsible:/) { $_ = &getline($_); s/\(.*\)//; # remove personal name s/\s+//g; $_ = $_ . '@freebsd.org' if !/@/; $_ = '>Responsible:' . $_ . ''; $html_fixup = 0; } s/^>Last-Modified:\s*$/>Last-Modified: never/; if (/^>Number:/) { $number = &getline($_); $inhdr = 0; } elsif (/^>Category:/) { $cat = &getline($_); } elsif (/^>Synopsis:/) { $syn = &getline($_); $syn =~ s/[\t]+/ /g; $syn = &fixline($syn); print &html_header("Problem Report $cat/$number"); print "$syn

\n

\n"; } else { next if $inhdr; if (/^>(\S+):\s*(.*)/) { print $trailer . "\n" unless ($blank); $trailer = "
$1
\n"; if ($html_fixup) { $trailer .= &fixline($2); } else { $trailer .= $2; } if ($1 eq "Originator" && $from ne "") { # add email address $trailer .= " " . &fixline($from) . ""; } $blank = !($2); $multiline = 0; } else { unless ($multiline) { next if /^\s*$/; print $trailer . "\n\n"; } $multiline = 1; $blank = 0; print $html_fixup ? &fixline($_) : $_ , "\n"; $trailer = ""; } } } close(Q); print "$trailer\n" unless ($blank); print "
"; $syn =~ s/[\?&%"]/"%" . sprintf("%02X", unpack(C, $&))/eg; $email =~ s/[\?&%]/"%" . sprintf("%02X", unpack(C, $&))/eg; print "Submit Followup\n"; print &html_footer; exit 0; sub getline { local($_) = @_; ($tag,$remainder) = split(/[ \t]+/, $_, 2); return $remainder; } sub fixline { local($line) = @_[0]; $line =~ s/&/&/g; $line =~ s//>/g; $line =~ s|(http://\S+)|$1|g; $line; }