#!/usr/bin/perl -T

$PFX = "/u2/website/manpages/pub_http_internet";
@OSCHOICES = ("ubuntu", "debian", "mac");

$args = $ENV{'QUERY_STRING'};
@params = split(/[=&]/, $args);
for ($i=0; $i<=$#params; ++$i)
{
    $params[$i] =~ tr/+/ /;
    $params[$i] =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/eg;
}
%params = @params;

$request = "";
$request = $params{'q'} if ($params{'q'});

# untaint the $request, which can be up to 30 word-like characters
if ($request =~ /(\w{1,30})/) {$request = $1; }
# untaint the PATH
$ENV{'PATH'} = "/bin:/usr/bin";

#print "HTTP/1.0 200 OK\n";
print "Content-type: text/html\n\n";

print "<html>\n<body>\n<h1>Unix/Linux Manual Pages</h1>\n";

print "<ul>\n";
foreach (@OSCHOICES)
{
    print "<li><a href=\"$_/\">$_ man pages</a></li>\n";
}
print "</ul>\n";

print "<form method=\"GET\" action=\"\">\n";
print "<input type=\"text\" name=\"q\" value=\"".$request."\" />\n";
print "<input type=\"submit\" value=\"Search\" />\n";
print "</form>\n";

if ($request ne "")
{
    foreach (@OSCHOICES)
    {
	print "<h2>Search results in $_ man pages:</h2>\n";
	print "<pre>";
	$apropos_output = `/usr/bin/apropos -r \"$request\" -M $PFX/$_/usr/share/man:$PFX/$_/usr/X11R6/man`;
	$os = $_;
	foreach (split(/\n/, $apropos_output))
	{
	    if ($_ =~ m,^(\S+) \((\S+)\) \[(\S+)\],)
	    {
		$_ =~ s,^(\S+) \((\S+)\) \[(\S+)\],<a href="$os/?q=${3}">${1} (${2}) [${3}]</a>,g;
            }
            else
            {
                $_ =~ s,^(\S+) \((\S+)\),<a href="$os/?q=${1}.${2}">${1} (${2})</a>,g;
            }
            print $_ . "\n";
        }
        print "</pre>\n";
    }
}

print "</body>\n</html>\n";
exit(0);
