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>