1998-11-02 20:04:30 +00:00
--- cgi-bin/webglimpse.orig Mon Jul 27 22:59:49 1998
1999-11-17 14:24:02 +00:00
+++ cgi-bin/webglimpse Wed Nov 17 16:51:58 1999
1998-11-02 20:04:30 +00:00
@@ -39,6 +39,9 @@
# **** **** **** **** CONFIGURABLE VARIABLES **** **** **** ****
# We need some of these to find our libraries, so wrap them in a BEGIN block
+use POSIX qw(locale_h);
+use locale;
+
BEGIN{
$WEBGLIMPSE_HOME = "/usr/local/webglimpse";
1998-11-03 07:11:28 +00:00
@@ -117,16 +120,21 @@
1998-11-02 20:04:30 +00:00
# Added optional module to support result caching
$QS_cache = '';
+$charset = '';
+$put_header = 0;
+
# **** **** **** **** Done settings **** **** **** ****
-BEGIN {
+sub http_header {
+
+return if ($put_header);
+$put_header = 1;
+
# make the output as we can
$| = 1;
# might as well start the message now
-print "Content-type: text/html\n\n";
1998-11-03 07:11:28 +00:00
-
-print "<!-- TESTING -->\n";
1998-11-02 20:04:30 +00:00
+print "Content-type: text/html$charset\n\n";
1998-11-03 07:11:28 +00:00
}
1998-11-02 20:04:30 +00:00
1999-11-17 14:24:02 +00:00
@@ -187,10 +195,12 @@
$indexdir = $path_info;
+$indexdir =~ s|\0||g;
# Check that indexdir has no single quote characters; it will be used on a command line
$indexdir =~ s/[\']//g;
+$indexdir =~ s/\\/\\\\/g;
# Added check for ".." as per CERT 11/7/97 --GB
if ($indexdir =~ /\.\./) {
@@ -216,10 +226,20 @@
1998-11-02 20:04:30 +00:00
$nhhops = 0;
$traverse_type = 0;
$urlpath = '';
+$vhost = '';
+$usemaxmem = '';
+$locale = '';
@urllist = ();
($title, $urlpath, $traverse_type, $explicit_only, $numhops,
- $nhhops, $local_limit, $remote_limit, $addboxes, @urllist) = ReadConfig($indexdir);
+ $nhhops, $local_limit, $remote_limit, $addboxes, $vhost, $usemaxmem, $locale, $charset, @urllist) = ReadConfig($indexdir);
+
1998-11-03 18:44:04 +00:00
+$ENV{LC_CTYPE}=$locale if ($locale ne '');
1998-11-02 20:04:30 +00:00
+setlocale(LC_CTYPE, "");
+
+$charset = "; charset=$charset" if ($charset ne '');
+
+&http_header;
# Ensure that Glimpse is available on this machine
-x $GLIMPSE_LOC || &err_noglimpse($GLIMPSE_LOC) ;
1999-11-17 14:24:02 +00:00
@@ -232,6 +252,9 @@
$QS_query =~ s|\+| |g;
$QS_query =~ s|%(\w\w)|sprintf("%c", hex($1))|ge;
+$QS_query =~ s|\0||g;
+$QS_query =~ s|^\-+||;
+$QS_query =~ s|\\|\\\\|g;
$pquery = $QS_query;
$QS_query =~ s|\'|\'\"\'\"\'|g;
@@ -247,8 +270,11 @@
$OPT_age = '';
$OPT_age = "-Y $QS_age" if $QS_age =~ /^[0-9]+$/;
# print "OPT_age = $OPT_age<br>\n";
+$QS_filter =~ s/\0//g;
+$QS_filter =~ s/\\/\\\\/g;
$QS_filter =~ s/\./\\./g;
$QS_filter =~ s/\'//g;
+$QS_filter =~ s/^\-+//;
$OPT_filter = '';
$OPT_filter="-F '$QS_filter'" if $QS_filter;
@@ -382,7 +408,7 @@
# Security note: using $indexdir on the command line could be dangerous if a directory really exists whose name contains shell control characters. 10/17/97 --GB
#$cmd = "$GLIMPSE_LOC -j -z -y $OPT_file $OPT_linenums $OPT_age $OPT_case $OPT_whole $OPT_errors -H . " . Added -U -W --> bgopal oct/6/96
$cmd = "$GLIMPSE_LOC -U -W -j -z -y $OPT_file $OPT_linenums $OPT_age $OPT_case $OPT_whole $OPT_errors -H $indexdir " .
- "$OPT_filter '$QS_query' 2>&1 |";
+ "$OPT_filter '$QS_query' |";
# Fool perl -T into accepting $cmd for execution. (as per Peter Bigot) --GB 10/17/97
# We assume that we have sufficiently checked the parameters to be safe at this point.
@@ -510,12 +536,12 @@
1998-11-03 10:34:42 +00:00
$charcount = 0;
if ($fcount>=$maxfiles) {
- print $mOutput->limitMaxFiles($maxfiles);
+ $mOutput->limitMaxFiles($maxfiles);
$file = "";
1999-11-17 14:24:02 +00:00
-# Keep the real # of lines retrieved! The "at least" message can be in the output module.
-# $fcount = "at least $fcount";
-# $lcount = "at least $lcount";
+
+ $fcount++;
+
last line;
}
print $mOutput->{end_file_marker} if ( $prevfile ne "" );
@@ -620,9 +646,9 @@
# If we jumped out because of max files, we already printed the necessary ending codes
# otherwise, do it now.
-($fcount < $maxfiles) && print $mOutput->makeEndHits($file);
+($fcount <= $maxfiles) && print $mOutput->makeEndHits($file);
-if (($fcount >= $maxfiles) && $USE_CACHE && $mCache && $HAVE_CUSTOM_OUTPUT) {
+if (($fcount > $maxfiles) && $USE_CACHE && $mCache && $HAVE_CUSTOM_OUTPUT) {
print $mOutput->makeNextHits($indexdir, $cachefile, $QS_query, $maxfiles, $maxlines, $maxchars);
}
@@ -667,7 +693,7 @@
1998-11-02 20:04:30 +00:00
sub err_noneighborhood {
local($_) = @_;
-
+ &http_header;
# neighborhood does not exist
print <<EOM;
<hr>
1999-11-17 14:24:02 +00:00
@@ -683,6 +709,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_noquery {
+ &http_header;
# The script was called without a query.
# Provide an ISINDEX type response for browsers
# without form support.
1999-11-17 14:24:02 +00:00
@@ -732,6 +759,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_noglimpse {
local($_) = @_;
+ &http_header;
#
# Glimpse was not found
# Report a useful message
1999-11-17 14:24:02 +00:00
@@ -756,6 +784,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_badglimpse {
my(@glines) = @_;
+ &http_header;
#
# Glimpse had an error
# Report a useful message
1999-11-17 14:24:02 +00:00
@@ -786,6 +815,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_noindex {
local ($indexdir) = @_;
+ &http_header;
# Glimpse index was not found
# Give recommendations for indexing
print "<TITLE>Glimpse Index not found</TITLE>\n";
1999-11-17 14:24:02 +00:00
@@ -801,6 +831,7 @@
1998-11-02 20:04:30 +00:00
}
##########################################################################
sub err_insecurepath {
+ &http_header;
# Path user requested contains ".." characters
print "<TITLE>Path not accepted</TITLE>\n";
print "</HEAD>\n";
1999-11-17 14:24:02 +00:00
@@ -814,6 +845,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_conf {
+ &http_header;
# Glimpse archive Configuration File was not found
print "<TITLE>Glimpse Archive Configuration File not found</TITLE>\n";
print "</HEAD>\n";
1999-11-17 14:24:02 +00:00
@@ -827,6 +859,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_badquery {
+ &http_header;
print "<TITLE>Query is too broad</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
1999-11-17 14:24:02 +00:00
@@ -840,6 +873,7 @@
1998-11-02 20:04:30 +00:00
##########################################################################
sub err_locked {
+ &http_header;
print "<TITLE>Indexing in progress</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";