A.7. homepage/mirror.cgi

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 - &Uuml;bertragung gestartet'), 
		$q->h1('Homepage-Spiegelung - &Uuml;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");
}

A.7.1. homepage/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&ouml;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&auml;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&uuml;ck zur <a href="/">Startseite</a>
<hr>
<h1>Logdateien</h1>
<p>Hier finden sie die Logdateien der &Uuml;bertragungen. Die Datei erscheint 
in der Liste, sobald die &Uuml;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>

A.7.2. Hilfsprogramm mirror-hp.sh

Dateiname: /usr/local/sbin/mirror-hp.sh.


#!/bin/bash

# erst verbindungsaufbau erzwingen...
ping -c 1 www.belwue.de > /dev/null 2>&1

# spiegelung starten
su -c '/usr/bin/weex Belwue' - homepage