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>