#!/usr/bin/perl ############################################################################ # Inhaltsverzeichnis ARE Erstellung: 24.02.98 # (c)1997 Update : 22.04.98 ############################################################################ ############################################################################ # Variablen, ggf. anpassen ############################################################################ @referers = ('http://www.skagen.cl/are/','http://skagen.cl/are/'); $basedir = '/public_html/are/'; $baseurl = 'http://www.skagen.cl/are/'; $title = "ARE"; $title_url = 'http://skagen.cl/are/'; ############################################################################ # Host checken ############################################################################ &check_url; ############################################################################ # Daten von Formular parsen ############################################################################ &parse_form; ############################################################################ # Dateien ermitteln ############################################################################ @files = ('*.html'); ############################################################################ # Dateien lesen ############################################################################ &get_files; ############################################################################ # Suche starten ############################################################################ &search; ############################################################################ # HTML-Seite ausgeben ############################################################################ &return_html; exit(0); ############################################################################ # Parsen der uebergebenen Daten aus Formular ############################################################################ sub parse_form { $buffer = 'boolean=OR&case=Insensitive&terms=META'; #read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @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; } } ############################################################################ # Dateien einlesen ############################################################################ sub get_files { chdir($basedir); foreach $file (@files) { $ls = `ls $file`; @ls = split(/\s+/,$ls); foreach $temp_file (@ls) { if (-d $file) { $filename = "$file$temp_file"; push(@FILES,$filename); } elsif (-T $temp_file) { push(@FILES,$temp_file); } } } } ############################################################################ # Suche nach Vorgaben ############################################################################ sub search { @terms = split(/\s+/, $FORM{'terms'}); foreach $FILE (@FILES) { open(FILE,"$FILE"); @LINES = <FILE>; close(FILE); $string = join(' ',@LINES); $string =~ s/\n//g; if ($FORM{'boolean'} eq 'AND') { foreach $term (@terms) { if ($FORM{'case'} eq 'Insensitive') { if (!($string =~ /$term/i)) { $include{$FILE} = 'no'; last; } else { $include{$FILE} = 'yes'; } } elsif ($FORM{'case'} eq 'Sensitive') { if (!($string =~ /$term/)) { $include{$FILE} = 'no'; last; } else { $include{$FILE} = 'yes'; } } } } elsif ($FORM{'boolean'} eq 'OR') { foreach $term (@terms) { if ($FORM{'case'} eq 'Insensitive') { if ($string =~ /$term/i) { $include{$FILE} = 'yes'; last; } else { $include{$FILE} = 'no'; } } elsif ($FORM{'case'} eq 'Sensitive') { if ($string =~ /$term/) { $include{$FILE} = 'yes'; last; } else { $include{$FILE} = 'no'; } } } } if ($string =~ /<title>(.*)<\/title>/i) { $titles{$FILE} = "$1"; } } } ############################################################################ # HTML-Seite mit Daten ausgeben ############################################################################ sub return_html { $gef = 0; print "Content-Type: text/html\n\n"; $ausg1 = 'Sie finden hier eine alphabetische Auflistung aller '; $ausg1 .= 'Seiten. '; $ausg1 .= 'Dieses ist ein automatisch erstelltes Inhaltsverzeichnis. Ein '; $ausg1 .= 'erneutes Laden dieser Seite (Reload) ist daher nicht notwendig! '; $ausg .= "<UL>"; $links = ""; foreach $key (sort keys %include) { if($titles{$key}) { $gef++; @liste[$gef] = substr($titles{$key},0,10)." <A HREF=\"$baseurl$key\">$titles{$key}</A>"; } } $i = 0; foreach $auslesen (sort @liste) { if (! (substr($auslesen,0,1) eq $alphabet) ) { $ausg .= '</UL><B>'; $links .= ' | <A HREF="#'.substr($auslesen,0,1); $links .= '"><B>'.substr($auslesen,0,1); $links .= '</B></A> '; $ausg .= '<A NAME="'.substr($auslesen,0,1); $ausg .='"><H4>'.substr($auslesen,0,1).'</H4></A>'; $ausg .= '</B>'; # $ausg .= '<A HREF="JavaScript:history.back()">Zurück zur vorhergehenden Seite</A>'; $ausg .= '<UL>'; $alphabet = substr($auslesen,0,1); } $ausg .= substr($auslesen,10).'<BR>'; } $ausg .= '</UL><BR>'; $ausg1 .= 'Es wurden '.$gef.' Seiten gefunden.<BR>'; $ausg .= '<A HREF="JavaScript:history.back()">Zurück zur vorhergehenden Seite</A>'; # $ausg .= '<HR></FONT>'; print $ausg1; print "<HR>".$links."<BR><HR>"; print $ausg; } ############################################################################ # Pruefung auf Host der Anfrage ############################################################################ sub check_url { $check_referer = '0'; if ($ENV{'HTTP_REFERER'}) { foreach $referer (@referers) { if ($ENV{'HTTP_REFERER'} =~ /$referer/i) { $check_referer = '1'; last; } } } else { $check_referer = '1'; } if ($check_referer != '1') { print "Content-type: ","text/html\n\n"; print "<HTML><HEAD><TITLE>FEHLER</TITLE></HEAD><BODY>"; print "<h2>Keine Zugangsberechtigung zur Suchfunktion!</h2><BR><BR><BR>"; print "Dieser Service kann nur von skagen.cl/are aufgerufen werden - sorry...<BR>"; print "</BODY></HTML>"; exit(0); } }