#!/sw/bin/perl ## ## Script to automatically insert hyperlinks to user pages ## into a web page via a registration form ## ## Copyright (C) 1996 by Steffen Beyer ## ## ## Version history: ## ## Version Date Name What's new ## ------- -------- -------------------- ----------------------------------- ## 1.0.0 20.11.96 Steffen Beyer First release ## 1.1.0 21.11.96 Steffen Beyer Check for uniqueness, parametrized ## $self = $0; $self =~ s!^.*/!!; ## ## Configuration: ## $name[1] = 'autor'; $name[2] = 'url'; $name[3] = 'link'; $name[4] = 'rubrik'; for ($i = 1; $i <= $#name; $i++) { $valid_name{$name[$i]} = $i; $value[$i] = ''; } $item[1] = 'user'; $item[2] = 'work'; $item[3] = 'grps'; $item[4] = 'proj'; $item[5] = 'sect'; $item[6] = 'sdm'; $item[7] = 'misc'; for ($i = 1; $i <= $#item; $i++) { $valid_item{$item[$i]} = $i; } $text{$item[1]} = 'Das müsst Ihr unbedingt sehen!'; $text{$item[2]} = 'Fachliches'; $text{$item[3]} = 'Arbeitskreise und Gruppen'; $text{$item[4]} = 'Projekte und Projekt-Steckbriefe'; $text{$item[5]} = 'Bereiche, Geschäftsbereiche und -stellen'; $text{$item[6]} = 'sd&m allgemein'; $text{$item[7]} = 'Sonstiges'; ## ## Global variables: ## $exception = ''; chop($date = `/bin/date +'%d.%m.%y %H:%M:%S'`); ## ## Subroutines: ## sub get_input { my(@pairs,$pair,$var,$val); @pairs = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@pairs) { ($var, $val) = split(/=/, $pair); # $val =~ s/%E4/ae/g; # $val =~ s/%C4/Ae/g; # $val =~ s/%F6/oe/g; # $val =~ s/%D6/Oe/g; # $val =~ s/%FC/ue/g; # $val =~ s/%DC/Ue/g; # $val =~ s/%DF/ss/g; $val =~ s/\+/ /g; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $val =~ s/\s+/ /g; $val =~ s/^\s+$//; unless ($valid_name{$var}) { $exception = "Die Übergabe-Parameter enthalten einen unbekannten Variablennamen!"; return 0; } if (($valid_name{$var} == 4) && (! $valid_item{$val})) { $exception = "Die Übergabe-Parameter enthalten eine unbekannte Rubrik!"; return 0; } $value[$valid_name{$var}] = $val; # avoid "eval" with unsafe $val! } return 1; } sub print_form { print <<"VERBATIM"; Content-type: text/html; charset="iso-8859-1" Registriere hier selbst Deine Web-Seite für die sd&m-Pinwand!


Registriere hier selbst Deine Web-Seite für die sd&m-Pinwand!


Dein voller Name: (erscheint später als "Autor")
Die URL für den Hyperlink auf Deine Seite: (z.B. "/u/hugo/wow.html")
Der Text für den Hyperlink auf Deine Seite: (maximal 40 Zeichen lang)
Die Rubrik, unter der Deine Seite erscheinen soll:


Bitte überprüft selbst alle Eure Angaben vor dem Abschicken auf Richtigkeit,
da das Skript nicht in der Lage ist, Eure Eingaben zu überprüfen!

(Insbesondere die Gültigkeit der von Euch angegebenen URL!)



VERBATIM } sub print_error { print <<"VERBATIM"; Content-type: text/html; charset="iso-8859-1" sd&m-Pinwand-Registrierung: Fehler


sd&m-Pinwand-Registrierung: Fehler


$exception


VERBATIM } sub print_success { print <<"VERBATIM"; Content-type: text/html; charset="iso-8859-1" sd&m-Pinwand-Registrierung


sd&m-Pinwand-Registrierung


Deine Seite

"$value[3]"

wurde erfolgreich in der Rubrik

"$text{$value[4]}"

eingehängt:


$value[3] ($value[1]) $date


VERBATIM } sub insert_page { my($match,$file); $match = '^\s*'; $file = "../txt/$value[4].txt"; unless (-f $file) { $exception = "Interner Fehler: Die Datei '$file' existiert nicht!"; return 0; } unless (open(READ, "<$file")) { $exception = "Interner Fehler: Kann die Datei '$file' nicht zum Lesen öffnen: $!"; return 0; } while() { if (/$match/io) { close(READ); $exception = qq,Die URL

$value[2]

ist in der Rubrik

"$text{$value[4]}"

bereits vorhanden!,; return 0; } } unless (close(READ)) { $exception = "Interner Fehler: Kann die Datei '$file' nicht ordnungsgemäß schließen!"; return 0; } if (-e "$file.bak") { $exception = "Interner Fehler: Die Datei '$file.bak' existiert bereits!"; return 0; } unless (rename($file, "$file.bak")) { $exception = "Interner Fehler: Kann die Datei '$file' nicht in '$file.bak' umbenennen: $!"; return 0; } unless (open(WRITE, ">$file")) { $exception = "Interner Fehler: Kann die Datei '$file' nicht zum Schreiben öffnen: $!"; return 0; } print WRITE <<"VERBATIM";

$value[3] ($value[1]) $date VERBATIM unless (open(READ, "<$file.bak")) { close(WRITE); $exception = "Interner Fehler: Kann die Datei '$file.bak' nicht zum Lesen öffnen: $!"; return 0; } while () { print WRITE; } unless (close(READ)) { close(WRITE); $exception = "Interner Fehler: Kann die Datei '$file.bak' nicht ordnungsgemäß schließen!"; return 0; } unless (close(WRITE)) { $exception = "Interner Fehler: Kann die Datei '$file' nicht ordnungsgemäß schließen!"; return 0; } if (unlink("$file.bak") != 1) { $exception = "Interner Fehler: Kann die Datei '$file.bak' nicht löschen!"; return 0; } return 1; } ## ## Main: ## if (&get_input) { if ($value[1] && $value[2] && $value[3]) { if (&insert_page) { &print_success; } else { &print_error; } } else { &print_form; } } else { &print_error; } __END__