#!/usr/bin/perl # Name des Scripts: autoindex.pl # Autor: Rolf Rost, endgültige Fassung: 20.3.1999 # autoindex.pl liest eine Dir und stellt gefundene HTML Dateien mit # Title als Link dar, ausserdem wird das Datum der Dateien gezeigt # Script wird aufgerufen wie folgt: # /cgi-bin/autoindex.pl?kennwort # Das Kennwort wird offen eingegeben, ist also kein Geheimnis. # Dem Kennwort ist hier im Script eine eindeutige Directory zugeordnet # Somit können nur erlaubte Directorys gebrowst werden # Die Übergabe der zugelassenen Directory erfolgt über einen Hash # Hosting: Dieses Script muss auf demselben lokalem Server gehostet sein # wo auch die Dokumente liegen, weil diese geöffnet werden. # >---Configuration---> # Laufwerksbuchstaben können auf einem NT Server auch entfallen, wenn # sich die Verzeichnisse auf Laufwerk c: befinden. # Es empfiehlt sich jedoch, # die Laufwerksbuchstaben hier mit anzugeben nur wegens der Übersicht. # Serverroot, am Ende kein Slash # Beispiel: $sr = "c:/links.pl"; $sr = "c:/links.pl"; # Servername, am Ende kein Slash # Beispiel: $sn = "http://links.pl"; $sn = "http://links.pl"; # Sicherheits-Hash-Table, hier stehen nur zugelassene Verzeichnisse! # Beispiel, wie die erlaubten Verzeichnisse einzutragen sind # %zugel=( # "kennwort","/verzeichnis/erlaubt", # "kaw","c:/verzeichnis/erlaubt/aucherlaubt", # ); %zugel=( "lnk","c:/links.pl", "tst","c:/links.pl/test", ); # <---Ende der Configuration---< # Ab hier nichts mehr verändern... nur im Notfall ;-) # Parameter auslesen $d=$ENV{QUERY_STRING}; # Nur zugelassene Verzeichnisse zuweisen per Hash $d=$zugel{$d}; if(!$d){&fehler;} # wenns Kennwort nicht stimmt, fliegst raus hier! # Serverdirectory zusammensetzen $vorn=substr($d,length($sr)+1); if($d eq $sr){ $sd="$sn$vorn"; } else{ $sd="$sn/$vorn"; } # Kategorie ermitteln $kat = substr($d,rindex($d,"/")+1); # Ab hier wird das HTML Dokument zum Browser geschickt print "Content-type: text/html\n\n"; print "Index des Verzeichnisses '$kat'\n \n"; print "

Alle Dokumente des Verzeichnisses: $kat


"; opendir(DIR,$d); # Nach einem Script von Wolfgang Wiese @x=sort grep ((!/^\./ and /\.htm/i),readdir(DIR)); close (DIR); # Ab hier werden die Links dargestellt for ($i=0;$i<@x;$i++) { $dd = "$d/$x[$i]"; print "",&liestitel," ",&formatTime((stat "$d/$x[$i]")[9]),"
\n"; } print ""; # Ende der HTML-Ausgabe, es folgen nun die Subfunktionen: # Vielen Dank an Chris Neuss der diese tolle Funktion schrieb: sub liestitel{ open(DC,"<$dd"); while(){ s/ \;/ /ig; s/\s+/ /g; # fold whitespaces into a single blank s/([^\n])([^\n])/>\n$1/g; # .. and after every '>' foreach (split(/\n/,$_)){ # opening title tag if(m::i){ $intitle="y"; $title=""; } # closing title tag if(m::i){ $intitle=""; } # if inside title if ($intitle){ tr/a-zA-Z\xc0-\xff0-9\-/ /cs; $title.="$_"; } } } close (DC); $tit = substr($title,7); return ($tit); } sub formatTime{ my ($min,$hour,$day,$mon,$year) = (localtime $_[0])[1..5]; $mon++; $year %= 100; return "$day.$mon.$year $hour:".sprintf("%02d",$min); } sub fehler{ print "Content-type:text/html\n\n"; print "

Das Script wurde mit einem falschen Parameter aufgerufen!

Bitte setzen Sie sich mit Ihrem Systemadministrator in Verbindung."; die; }