#!/usr/bin/perl

# (c) Fluffy Clouds Ltd
# http://www.fluffy.co.uk/
# author: Ben Summers

# Fluffy Search Home page at http://www.fluffy.co.uk/fs/
# email: fluffysearch@fluffy.co.uk

# Launch your web graphics... fast!  http://www.ignite-it.co.uk/

require 'search.config';
&parse_form;
print "Content-Type: text/html\n\n";
$my_disc_dir = "$docroot_disc$form{'d'}";
$my_disc_dir =~ s~/[^/]*?\Z~~;
if($frames_framename ne '' && !exists $form{'infr'})
{ $set_file = "$my_disc_dir/$frames_frameset";
while($set_file =~ s~/[^/]+?/../~/~) {}
$frm_name = $frames_framename;
$my_dir = "$docroot_web$form{'d'}";
$my_dir =~ s~/[^/]*?\Z~~;
$my_dir .= "/$frames_frameset";
while($my_file =~ s~/[^/]+?/../~/~) {}
$my_dir =~ s~/[^/]*?\Z~~;
@exceptions = split /\n/, $frames_exceptions;
$my_sr_dir = $form{'d'};
$my_sr_dir =~ s~/[^/]*?\Z~~;
for(@exceptions)
{ my($in_dir,$frm,$frm_name) = split /\s+/;
if($my_sr_dir eq $in_dir)
{ $set_file = "$docroot_disc/$frm";
$frm_name = $frm_name;
$my_dir = "$docroot_web/$frm";
$my_dir =~ s~/[^/]*?\Z~~;
} } if(-e $set_file && open(FS,$set_file))
{ read FS,$set,-s $set_file;
close FS;
if($set =~ m/<frameset\b/i)
{ $set =~ s^(<frame\b.+?>)^
my $fm = $1;
$fm =~ m/\bname\s*?=\s*?"?(\w+?)\b/;
if(lc $1 eq lc $frm_name)
{ $page_link = "$page_script?$ENV{'QUERY_STRING'}&infr";
$fm =~ s/src\s*?="?.+?("|\s)/src="$page_link" /i;
} else
{ $fm =~ s%src\s*?="?(.+?)("|\s)%
rellink('src',$1) . ' '
%ie;
} $fm;
^geis;
print $set;
exit(0);
} } } { $search_words = $form{'words'};
if($form{'wt'} eq 'be') {$search_wb = 'x'; $search_ew = '';}
else {$search_wb = ''; $search_ew = 'x';}
if($form{'bl'} eq 'an') {$search_bAND = 'x'; $search_bOR = ''; $search_bPHR = '';}
elsif($form{'bl'} eq 'ph') {$search_bAND = ''; $search_bOR = ''; $search_bPHR = 'x';}
else {$search_bAND = ''; $search_bOR = 'x'; $search_bPHR = '';}
$wl = lc $search_words;
$wl =~ tr/a-z0-9/ /c;
$wl =~ s/(\A\s+)|(\s+\Z)//g;
@words = split /\s+/, $wl;
} $page_filename = "$docroot_disc$form{'d'}";
if(!-e $page_filename)
{ print "error: page not found on disc, check config.\n";
} else
{ if(open FL, $page_filename)
{ read FL,$html,-s $page_filename;
close FL;
$my_dir = "$docroot_web$form{'d'}";
$my_dir =~ s~/[^/]*?\Z~~;
if($shtmlroot_disc ne '' && $form{'d'} =~ m/\.shtml\Z/i)
{ $html =~ s@<!--\s*?#include\s+?(virtual|file)\s*?=\s*?"\s*?(.+?)\s*?"\s*?-->@
my $rep = $2;
if($rep =~ m~\A/~) {$rep = "$shtmlroot_disc$rep"}
else {$rep = "$my_disc_dir/$rep"}
while($rep =~ s~/[^/]+?/../~/~) {}
if(-e $rep && open(RL,$rep))
{ my $t;
read RL,$t,-s $rep;
close RL;
$t } else {''};
@gesi;
} $html =~ s/(src|href)=("(.+?)"|\w+?)/rellink($1,$2)/gei;
@patterns = ();
if($search_bPHR ne '' && $#words > 0)
{ if($search_wb ne '')
{ push @patterns, '\b' . join('\w*?\s+?', @words);
} else
{ push @patterns, '\b' . join('\s+?', @words) . '\b';
} } else
{ for(@words)
{ $pat = "\\b$_\\b";
if($search_wb ne '')
{ $pat = "\\b$_.*?\\b";
} push @patterns, $pat;
} } $html =~ s~(<title>.+?</title>)~!PROTECTTITLE!~gis;
$old_title = $1;
foreach $pat (@patterns)
{ $html =~ s'\>(.*?)\<'
$t = $1;
$t =~ s/($pat)/$high_start$1$high_end/si;
">$t<";
'gesi;
} $html =~ s~!PROTECTTITLE!~$old_title~gis;
print $html;
} else
{ print "error: could not open page, check permissions.\n";
} } exit(0);
sub rellink
{ my ($ty, $fn) = @_;
$fn =~ s/(\A"|"\Z)//g;
if(!($fn =~ m/\w+\:/) && !($fn =~ m~\A/~))
{ $fn = "$my_dir/$fn";
while($fn =~ s~/[^/]+?/../~/~) {}
} qq~$ty="$fn"~
} sub parse_form
{ %form = ();
my $buffer;
if($ENV{'REQUEST_METHOD'} eq 'POST')
{ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else
{ $buffer = $ENV{'QUERY_STRING'};
} @pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{ ($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$name} = $value;
} }  