Das Programm dient dazu, die Homepage zu spiegeln, d.h. auf den Belwue-Server zu kopieren.
Dateiname: /usr/local/httpd/htdocs/admin/homepage/mirror.cgi.
Die Zugriffsrechte für das Verzeichnis /usr/local/httpd/htdocs/admin/homepage/ sehen so aus, damit die Log-Dateien darin erstellt werden können:
drwxrwx--- 2 root www-data 9312 Jul 15 12:05 homepage
mirror.cgi:
#!/usr/bin/perl -w # This is an experimental version ... use strict; use CGI; use CGI::Carp; use POSIX 'setsid'; # use Time::localtime; my ($logfile,$index); my $q = new CGI; if (not $q->param('ftp-pw')) { print $q->header, $q->start_html('Fehler: Zu wenig Daten'), $q->h1('Fehler: Zu wenig Daten'), '<p>Tja... wenigstens das Passwort sollte ich haben ... :-(', '<p>Zurück zur <a href="/">Startseite</a>', $q->end_html; exit; } my $pw = $q->param('ftp-pw'); my ($min, $hour, $day, $month, $year) = (localtime())[1..5]; $year += 1900; # we want to be Y2K-compliant, don't we ... $month++; my $i = 1; $i++ while -e ($logfile = sprintf 'log-%04u.%02u.%02u-%u.txt', $year,$month,$day,$i); $index = sprintf '<a href="%s">%02u.%02u.%04u %02u.%02u Uhr</a>', $logfile,$day,$month,$year,$hour,$min; # um das ganze etwas interessanter zu machen ... my $pid; if (not defined ($pid = fork)) { print $q->header, $q->start_html('Interner Fehler (Cannot fork)'), $q->h1('Interner Fehler (Cannot fork)'), '<p>Tja... da weiss ich auch nicht weiter ... :-(', $q->end_html; exit; } if ($pid) { # parent print $q->header, $q->start_html('Homepage-Spiegelung - Übertragung gestartet'), $q->h1('Homepage-Spiegelung - Übertragung gestartet'), '<p>Tja... noch etwas warten, dann ist es soweit ... :-)', $q->end_html; exit; # print CHILD $pw, "\n"; # close CHILD; # or ... # hope we don't have to wait on the child ... } else { # child open STDIN, '/dev/null'; open STDOUT, ">>$logfile"; setsid; open STDERR, '>&STDOUT'; open CMD, '| /usr/bin/sudo /usr/local/sbin/mirror-hp.sh' or die "Cannot open pipe"; print CMD $pw,"\n" or die "Cannot write to pipe"; close CMD; system("perl -i -pe 's:<ul>:<ul>\\n<li>$index</li>:i;' index.html"); }
Dateiname: /usr/local/httpd/htdocs/admin/homepage/index.html.
Diese Datei hat folgende Zugriffsrechte, damit sie vom cgi-script verändert werden kann:
-rw-rw---- 1 www-data www-data 15714 Jul 15 12:05 index.html
index.html:
<html> <head> <title>Homepage-Spiegelung</title> </head> <body> <h1>Homepage-Spiegelung</h1> <p>Hier können sie die Homepage-Spiegelung von <tt>I:\intranet</tt> auf <a href="http://www.gm.rt.schule-bw.de">http://www.gm.rt.schule-bw.de</a> starten. Dazu geben sie bitte unten das Passwort für den FTP-Server ein. Die Spiegelung läuft im Hintergrund. <form action="mirror.cgi" method="post"> <p>Passwort: <input type="password" name="ftp-pw" size="8"> <input type="submit" value="Spiegelung starten"> </form> <p>Zurück zur <a href="/">Startseite</a> <hr> <h1>Logdateien</h1> <p>Hier finden sie die Logdateien der Übertragungen. Die Datei erscheint in der Liste, sobald die Übertragung abgeschlossen wurde. <p> <ul> <li><a href="log-2004.07.15-1.txt">15.07.2004 11.51 Uhr</a></li> <li><a href="log-2004.07.15-3.txt">15.07.2004 11.56 Uhr</a></li> </ul> </body> </html>