#!/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/)^ 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@@ 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~(.+?)~!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; } }