dumps. Only one partial is kept, and it is removed as soon
as a successful full (or a new partial) is done.
- (Note: still needs some work to cleanup any partial files when the
- dump is interrupted or fails).
-
* Added support for resuming a full dump for rsync. The partial
full is kept, and to resume an incremental is done against the
partial, and a full is done for the rest.
- (Note: not tested! Also needs a new File::RsyncP that I haven't
- yet released.)
-
* Added support for Rsync checksum caching. Rsync checksum are
appended to the compressed pool files. This means that block
and file checksums do not need to be recomputed on the server
- when using rsync.
+ when using rsync. Requires a patch to rsync to support fixed
+ checksum seeds. This patch is included in the cygwin-rsyncd
+ release on http://backuppc.sourceforge.net.
* Major addition of Archive feature from Josh Marshall. Special
clients can be configured to be archive targets (eg: tape drives,
files.
* Addition of administration options from Paul Lukins. Initial
- page allows server to be started/stopped/reloaded.
+ page allows server to be started/stopped/reloaded. This still
+ needs some i18n work. Currently the server start/stop is
+ commented out.
* Split BackupPC_Admin into a set of modules, one for each major action.
Each action is now a seperate module in lib/BackupPC/CGI.
#
# The valid values are:
#
-# - 'smb': backup and restore via smbclient and the SMB protocol.
-# Best choice for WinXX.
+# - 'smb': backup and restore via smbclient and the SMB protocol.
+# Easiest choice for WinXX.
#
-# - 'rsync': backup and restore via rsync (via rsh or ssh).
-# Best choice for linux/unix. Can also work on WinXX.
+# - 'rsync': backup and restore via rsync (via rsh or ssh).
+# Best choice for linux/unix. Good choice also for WinXX.
#
-# - 'rsyncd': backup and restre via rsync daemon on the client.
-# Best choice for linux/unix if you have rsyncd running on
-# the client. Can also work on WinXX.
+# - 'rsyncd': backup and restre via rsync daemon on the client.
+# Best choice for linux/unix if you have rsyncd running on
+# the client. Good choice also for WinXX.
#
# - 'tar': backup and restore via tar, tar over ssh, rsh or nfs.
# Good choice for linux/unix.
#
+# - 'archive': host is a special archive host. Backups are not done.
+# An archive host is used to archive other host's backups
+# to permanent media, such as tape, CDR or DVD.
+#
+#
$Conf{XferMethod} = 'smb';
#
Note also that the $Conf{ClientNameAlias} feature does not work for
clients with DHCP set to 1.
-
+
=item User name
This should be the unix login/email name of the user who "owns" or uses
The relevant configuration settings are $Conf{RsyncClientPath},
$Conf{RsyncClientCmd}, $Conf{RsyncClientRestoreCmd}, $Conf{RsyncShareName},
-$Conf{RsyncArgs}, $Conf{RsyncRestoreArgs} and $Conf{RsyncLogLevel}.
+$Conf{RsyncArgs}, and $Conf{RsyncRestoreArgs}.
=item rsyncd
The relevant configuration settings are $Conf{RsyncdClientPort},
$Conf{RsyncdUserName}, $Conf{RsyncdPasswd}, $Conf{RsyncdAuthRequired},
-$Conf{RsyncShareName}, $Conf{RsyncArgs}, $Conf{RsyncRestoreArgs}
-and $Conf{RsyncLogLevel}. In the case of rsyncd, $Conf{RsyncShareName}
-is the name of an rsync module (ie: the thing in square brackets in
-rsyncd's conf file -- see rsyncd.conf), not a file system path.
+$Conf{RsyncShareName}, $Conf{RsyncArgs}, and $Conf{RsyncRestoreArgs}.
+$Conf{RsyncShareName} is the name of an rsync module (ie: the thing
+in square brackets in rsyncd's conf file -- see rsyncd.conf), not a
+file system path.
Be aware that rsyncd will remove the leading '/' from path names in
symbolic links if you specify "use chroot = no" in the rsynd.conf file.
set to 'archive'. This allows for multiple configurations at sites where
there might be a combination of tape and cd/dvd backups being made.
+BackupPC provides a menu that allows one or more hosts to be archived.
+The most recent backup of each host is archived using BackupPC_tarCreate,
+and the output is optionally compressed and split into fixed-sized
+files (eg: 650MB).
+
+The archive for each host is done by default using
+__INSTALLDIR__/BackupPC_archiveHost. This script can be copied
+and customized as needed.
+
=head2 Configuring an Archive Host
To create an Archive Host, add it to the hosts file just as any other host
$Conf{XferMethod} = 'archive';
To further customise the archive's parameters you can adding the changed
-parameters in the host's config.pl file. The parameters are explained in the config.pl
-file.
+parameters in the host's config.pl file. The parameters are explained in
+the config.pl file. Parameters may be fixed or the user can be allowed
+to change them (eg: output device).
-The example archive programs included with BackupPC are for a CD and
-Tape archive. The programs are called BackupPC_archivecd and
-BackupPC_archivetape. These are specified by the ArchiveClientCmd configuration
-parameter.
+The per-host archive command is $Conf{ArchiveClientCmd}. By default
+this invokes __INSTALLDIR__/BackupPC_archiveHost, which you can
+copy and customize as necessary.
=head2 Starting an Archive
=head1 Copyright
-Copyright (C) 2001-2003 Craig Barratt
+Copyright (C) 2001-2004 Craig Barratt
=head1 Credits
#
#========================================================================
#
-# Version 2.1.0_CVS, released 8 Feb 2004.
+# Version 2.1.0_CVS, released 13 Mar 2004.
#
# See http://backuppc.sourceforge.net.
#
sub Header
{
- my($title, $content, $noBrowse) = @_;
+ my($title, $content, $noBrowse, $contentSub, $contentPost) = @_;
my @adminLinks = (
{ link => "", name => $Lang->{Status},
priv => 1},
NavLink("?action=view&type=config&host=${EscURI($host)}",
$Lang->{Config_file}, " class=\"navbar\"");
}
- print <<EOF;
-</div>
-<div id="Content">
-$content
-<br><br><br>
-</div>
-<div class="NavMenu" style="height:100%" id="NavMenu">
-EOF
- } else {
- print <<EOF;
-<div id="Content">
-$content
+ print "</div>\n";
+ }
+ print("<div id=\"Content\">\n$content\n");
+ if ( defined($contentSub) && ref($contentSub) eq "CODE" ) {
+ while ( (my $s = &$contentSub()) ne "" ) {
+ print($s);
+ }
+ }
+ print($contentPost) if ( defined($contentPost) );
+ print <<EOF;
<br><br><br>
</div>
<div class="NavMenu" id="NavMenu" style="height:100%">
EOF
- }
my $hostSelectbox = "<option value=\"#\">$Lang->{Select_a_host}</option>";
my @hosts = GetUserHosts($In{host}, $Conf{CgiNavBarAdminAllHosts});
if ( defined($Hosts) && %$Hosts > 0 && @hosts ) {
#
#========================================================================
#
-# Version 2.1.0_CVS, released 8 Feb 2004.
+# Version 2.1.0_CVS, released 13 Mar 2004.
#
# See http://backuppc.sourceforge.net.
#
my($file, $comment);
my $ext = $num ne "" ? ".$num" : "";
- ErrorExit(eval("qq{$Lang->{Invalid_number__num}}")) if ( $num ne "" && $num !~ /^\d+$/ );
+ ErrorExit(eval("qq{$Lang->{Invalid_number__num}}"))
+ if ( $num ne "" && $num !~ /^\d+$/ );
if ( $type eq "XferLOG" ) {
$file = "$TopDir/pc/$host/SmbLOG$ext";
$file = "$TopDir/pc/$host/XferLOG$ext" if ( !-f $file && !-f "$file.z");
&& !-f $file );
} elsif ( $type eq "docs" ) {
$file = "$BinDir/../doc/BackupPC.html";
- if ( open(LOG, $file) ) {
- binmode(LOG);
- my $content;
- $content .= $_ while ( <LOG> );
- close(LOG);
- Header($Lang->{BackupPC__Documentation}, $content);
- Trailer();
- } else {
- ErrorExit(eval("qq{$Lang->{Unable_to_open__file__configuration_problem}}"));
- }
- return;
} elsif ( $type eq "config" ) {
$file = "$TopDir/conf/config.pl";
} elsif ( $type eq "hosts" ) {
$file = "$TopDir/conf/hosts";
+ $linkHosts = 1;
} elsif ( $host ne "" ) {
$file = "$TopDir/pc/$host/LOG$ext";
+ $linkHosts = 1;
} else {
$file = "$TopDir/log/LOG$ext";
$linkHosts = 1;
$file .= ".z";
$compress = 1;
}
- my $content;
- $content .= eval ("qq{$Lang->{Log_File__file__comment}}");
+ my($contentPre, $contentSub, $contentPost);
+ $contentPre .= eval("qq{$Lang->{Log_File__file__comment}}");
if ( defined($fh = BackupPC::FileZIO->open($file, 0, $compress)) ) {
my $mtimeStr = $bpc->timeStamp((stat($file))[9], 1);
- $content .= ( eval ("qq{$Lang->{Contents_of_log_file}}"));
+ $contentPre .= eval("qq{$Lang->{Contents_of_log_file}}");
- $content .= "<pre>";
+ $contentPre .= "<pre>";
if ( $type eq "XferErr" || $type eq "XferErrbad"
|| $type eq "RestoreErr"
|| $type eq "ArchiveErr" ) {
- my $skipped;
- while ( 1 ) {
- $_ = $fh->readLine();
- if ( $_ eq "" ) {
- $content .= (eval ("qq{$Lang->{skipped__skipped_lines}}"))
- if ( $skipped );
- last;
- }
- if ( /smb: \\>/
- || /^\s*(\d+) \(\s*\d+\.\d kb\/s\) (.*)$/
- || /^tar: dumped \d+ files/
- || /^\s*added interface/i
- || /^\s*restore tar file /i
- || /^\s*restore directory /i
- || /^\s*tarmode is now/i
- || /^\s*Total bytes written/i
- || /^\s*Domain=/i
- || /^\s*Getting files newer than/i
- || /^\s*Output is \/dev\/null/
- || /^\s*\([\d.,]* kb\/s\) \(average [\d\.]* kb\/s\)$/
- || /^\s+directory \\/
- || /^\s*Timezone is/
- || /^\s*creating lame (up|low)case table/i
- || /^\.\//
- || /^ /
- ) {
- $skipped++;
- next;
+ $contentSub = sub {
+ #
+ # Because the content might be large, we use
+ # a sub to return the data in 64K chunks.
+ #
+ my($skipped, $c, $s);
+ while ( length($c) < 65536 ) {
+ $s = $fh->readLine();
+ if ( $s eq "" ) {
+ $c .= eval("qq{$Lang->{skipped__skipped_lines}}")
+ if ( $skipped );
+ last;
+ }
+ $s =~ s/[\n\r]+//g;
+ if ( $s =~ /smb: \\>/
+ || $s =~ /^\s*(\d+) \(\s*\d+\.\d kb\/s\) (.*)$/
+ || $s =~ /^tar: dumped \d+ files/
+ || $s =~ /^\s*added interface/i
+ || $s =~ /^\s*restore tar file /i
+ || $s =~ /^\s*restore directory /i
+ || $s =~ /^\s*tarmode is now/i
+ || $s =~ /^\s*Total bytes written/i
+ || $s =~ /^\s*Domain=/i
+ || $s =~ /^\s*Getting files newer than/i
+ || $s =~ /^\s*Output is \/dev\/null/
+ || $s =~ /^\s*\([\d.,]* kb\/s\) \(average [\d\.]* kb\/s\)$/
+ || $s =~ /^\s+directory \\/
+ || $s =~ /^\s*Timezone is/
+ || $s =~ /^\s*creating lame (up|low)case table/i
+ || $s =~ /^\.\//
+ || $s =~ /^ / ) {
+ $skipped++;
+ next;
+ }
+ $c .= eval("qq{$Lang->{skipped__skipped_lines}}")
+ if ( $skipped );
+ $skipped = 0;
+ $c .= ${EscHTML($s)} . "\n";
}
- $content .= (eval("qq{$Lang->{skipped__skipped_lines}}"))
- if ( $skipped );
- $skipped = 0;
- $content .= ${EscHTML($_)};
- }
+ return $c;
+ };
} elsif ( $linkHosts ) {
- while ( 1 ) {
- $_ = $fh->readLine();
- last if ( $_ eq "" );
- my $s = ${EscHTML($_)};
- $s =~ s/\b([\w-]+)\b/defined($Hosts->{$1})
- ? ${HostLink($1)} : $1/eg;
- $content .= $s;
- }
+ #
+ # Because the content might be large, we use
+ # a sub to return the data in 64K chunks.
+ #
+ $contentSub = sub {
+ my($c, $s);
+ while ( length($c) < 65536 ) {
+ $s = $fh->readLine();
+ last if ( $s eq "" );
+ $s =~ s/[\n\r]+//g;
+ $s = ${EscHTML($s)};
+ $s =~ s/\b([\w-]+)\b/defined($Hosts->{$1})
+ ? ${HostLink($1)} : $1/eg;
+ $c .= $s . "\n";
+ }
+ return $c;
+ };
} elsif ( $type eq "config" ) {
- while ( 1 ) {
- $_ = $fh->readLine();
- last if ( $_ eq "" );
- # remove any passwords and user names
- s/(SmbSharePasswd.*=.*['"]).*(['"])/$1$2/ig;
- s/(SmbShareUserName.*=.*['"]).*(['"])/$1$2/ig;
- s/(RsyncdPasswd.*=.*['"]).*(['"])/$1$2/ig;
- s/(ServerMesgSecret.*=.*['"]).*(['"])/$1$2/ig;
- $content .= ${EscHTML($_)};
- }
+ #
+ # Because the content might be large, we use
+ # a sub to return the data in 64K chunks.
+ #
+ $contentSub = sub {
+ my($c, $s);
+ while ( length($c) < 65536 ) {
+ $s = $fh->readLine();
+ last if ( $s eq "" );
+ $s =~ s/[\n\r]+//g;
+ # remove any passwords and user names
+ $s =~ s/(SmbSharePasswd.*=.*['"]).*(['"])/$1$2/ig;
+ $s =~ s/(SmbShareUserName.*=.*['"]).*(['"])/$1$2/ig;
+ $s =~ s/(RsyncdPasswd.*=.*['"]).*(['"])/$1$2/ig;
+ $s =~ s/(ServerMesgSecret.*=.*['"]).*(['"])/$1$2/ig;
+ $s = ${EscHTML($s)};
+ $s =~ s[(\$Conf\{.*?\})][
+ my $c = $1;
+ my $s = lc($c);
+ $s =~ s{(\W)}{sprintf("%%%02x", ord($1) )}gxe;
+ "<a href=\"?action=view&type=docs#item_$s\">$c</a>"
+ ]eg;
+ $c .= $s . "\n";
+ }
+ return $c;
+ };
+ } elsif ( $type eq "docs" ) {
+ #
+ # Because the content might be large, we use
+ # a sub to return the data in 64K chunks.
+ #
+ $contentSub = sub {
+ my($c, $s);
+ while ( length($c) < 65536 ) {
+ $s = $fh->readLine();
+ last if ( $s eq "" );
+ $c .= $s;
+ }
+ return $c;
+ };
+ #
+ # Documentation a different header and no pre or post text,
+ # so just handle it here
+ #
+ Header($Lang->{BackupPC__Documentation}, "", 0, $contentSub);
+ Trailer();
+ return;
} else {
- while ( 1 ) {
- $_ = $fh->readLine();
- last if ( $_ eq "" );
- $content .= ${EscHTML($_)};
- }
+ #
+ # Because the content might be large, we use
+ # a sub to return the data in 64K chunks.
+ #
+ $contentSub = sub {
+ my($c, $s);
+ while ( length($c) < 65536 ) {
+ $s = $fh->readLine();
+ last if ( $s eq "" );
+ $s =~ s/[\n\r]+//g;
+ $s = ${EscHTML($s)};
+ $c .= $s . "\n";
+ }
+ return $c;
+ };
}
- $fh->close();
} else {
- $content .= ( eval("qq{$Lang->{_pre___Can_t_open_log_file__file}}"));
+ if ( $type eq "docs" ) {
+ ErrorExit(eval("qq{$Lang->{Unable_to_open__file__configuration_problem}}"));
+ }
+ $contentPre .= eval("qq{$Lang->{_pre___Can_t_open_log_file__file}}");
}
- $content .= <<EOF;
-</pre>
-EOF
+ $contentPost .= "</pre>\n" if ( $type ne "docs" );
Header(eval("qq{$Lang->{Backup_PC__Log_File__file}}"),
- $content, !-f "$TopDir/pc/$host/backups" );
+ $contentPre, !-f "$TopDir/pc/$host/backups",
+ $contentSub, $contentPost);
Trailer();
+ $fh->close() if ( defined($fh) );
}
1;
#
#========================================================================
#
-# Version 2.1.0_CVS, released 8 Feb 2004.
+# Version 2.1.0_CVS, released 13 Mar 2004.
#
# See http://backuppc.sourceforge.net.
#
my($self) = @_;
my $str;
- while ( defined($self->{readLineBuf}) && !@{$self->{readLineBuf}} ) {
+ $self->{readLineBuf} = [] if ( !defined($self->{readLineBuf}) );
+ while ( !@{$self->{readLineBuf}} ) {
$self->read(\$str, $CompMaxRead);
if ( $str eq "" ) {
$str = $self->{readLineFrag};
$Lang{Admin_Options_Page} = <<EOF;
\${h1(qq{$Lang{Admin_Options}})}
<br>
-\${h1("Server Steuerung")}
+\${h2("Server Steuerung")}
<form action="\$MyURL" method="get">
<table>
- <tr><td>Server stoppen:<td><input type="submit" name="action" value="Stop">
+ <!--<tr><td>Server stoppen:<td><input type="submit" name="action" value="Stop">-->
<tr><td>Server Konfiguration neu laden:<td><input type="submit" name="action" value="Reload">
</table>
</form>
-\${h1("Server Konfiguration")}
+<!--
+\${h2("Server Konfiguration")}
<ul>
<li><i>Andere Optionen sind hier möglich ... z.B.,</i>
<li>Server Konfiguration editieren
</ul>
+-->
EOF
$Lang{Unable_to_connect_to_BackupPC_server} = "Kann keine Verbindung zu BackupPC server herstellen",
"Dieses CGI script (\$MyURL) kann keine Verbindung zu BackupPC"
window.open(URL,'','width=500,height=400');
}
</script>
- <a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Suche nach verfügbaren Freigaben (NICHT IMPLEMENTIERT)</a></td>
+ <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Suche nach verfügbaren Freigaben (NICHT IMPLEMENTIERT)</a>--></td>
</tr><tr>
<td>Restore auf Freigabe</td>
<td><input type="text" size="40" value="\${EscHTML(\$share)}"
$Lang{Admin_Options_Page} = <<EOF;
\${h1(qq{$Lang{Admin_Options}})}
<br>
-\${h1("Server Control")}
+\${h2("Server Control")}
<form action="\$MyURL" method="get">
<table>
- <tr><td>Stop the server:<td><input type="submit" name="action" value="Stop">
+ <!--<tr><td>Stop the server:<td><input type="submit" name="action" value="Stop">-->
<tr><td>Reload the server configuration:<td><input type="submit" name="action" value="Reload">
</table>
</form>
-\${h1("Server Configuration")}
+<!--
+\${h2("Server Configuration")}
<ul>
<li><i>Other options can go here... e.g.,</i>
<li>Edit server configuration
</ul>
+-->
EOF
$Lang{Unable_to_connect_to_BackupPC_server} = "Unable to connect to BackupPC server",
"This CGI script (\$MyURL) is unable to connect to the BackupPC"
window.open(URL,'','width=500,height=400');
}
</script>
- <a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a></td>
+ <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td>
</tr><tr>
<td>Restore the files to share</td>
<td><input type="text" size="40" value="\${EscHTML(\$share)}"
ENG
\${h1(qq{$Lang{Admin_Options}})}
<br>
-\${h1("Server Control")}
+\${h2("Server Control")}
<form action="\$MyURL" method="get">
<table>
- <tr><td>Stop the server:<td><input type="submit" name="action" value="Stop">
+<!--<tr><td>Stop the server:<td><input type="submit" name="action" value="Stop">-->
<tr><td>Reload the server configuration:<td><input type="submit" name="action" value="Reload">
</table>
</form>
-\${h1("Server Configuration")}
+<!--
+\${h2("Server Configuration")}
<ul>
<li><i>Other options can go here... e.g.,</i>
<li>Edit server configuration
</ul>
+-->
EOF
$Lang{Unable_to_connect_to_BackupPC_server} = "Imposible conectar al servidor BackupPC",
"Este script CGI (\$MyURL) no puede conectar al servidor BackupPC"
window.open(URL,'','width=500,height=400');
}
</script>
- <a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a></td>
+ <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td>
</tr><tr>
<td>Restaurar los archivos a la unidad</td>
<td><input type="text" size="40" value="\${EscHTML(\$share)}"
$Lang{Admin_Options_Page} = <<EOF;
\${h1(qq{$Lang{Admin_Options}})}
<br>
-\${h1("Contrôle du serveur")}
+\${h2("Contrôle du serveur")}
<form action="\$MyURL" method="get">
<table>
- <tr><td>Arrêter le serveur:<td><input type="submit" name="action" value="Arrêter">
- <tr><td>Recharger la configuration:<td><input type="submit" name="action" value="Recharger">
+<!--<tr><td>Arrêter le serveur:<td><input type="submit" name="action" value="Arrêter">-->
+ <tr><td>Recharger la configuration:<td><input type="submit" name="action" value="Reload">
</table>
</form>
-\${h1("Configuration")}
+<!--
+\${h2("Server Configuration")}
<ul>
<li><i>Other options can go here... e.g.,</i>
<li>Edit server configuration
</ul>
+-->
EOF
$Lang{Unable_to_connect_to_BackupPC_server} = "Impossible de se connecter au serveur BackupPC",
"Ce script CGI (\$MyURL) est incapable de se connecter au serverur BackupPC"
window.open(URL,'','width=500,height=400');
}
</script>
- <a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Chercher les partitions disponibles (NON IMPLANTE)</a></td>
+ <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Chercher les partitions disponibles (NON IMPLANTE)</a>--></td>
</tr><tr>
<td>Restaurer les fichiers vers le partage</td>
<td><input type="text" size="40" value="\${EscHTML(\$share)}"
$Lang{checkAllHosts} = <<EOF;
<tr><td class="fviewborder">
-<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');"> Select all
+<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');"> Tout sélectionner
</td><td colspan="2" align="center" class="fviewborder">
<input type="submit" name="Submit" value="Archive selected hosts">
</td></tr>
-#!/usr/bin/perl
+#!/bin/perl
#
-# $Id: it.pm,v 1.3 2004/03/15 03:12:43 cbarratt Exp $
+# $Id: it.pm,v 1.4 2004/03/21 01:46:46 cbarratt Exp $
#
# Italian i18n file
#
$Lang{Admin_Options_Page} = <<EOF;
\${h1(qq{$Lang{Admin_Options}})}
<br>
-\${h1("Controllo server")}
+\${h2("Controllo server")}
<form action="\$MyURL" method="get">
<table>
- <tr><td>Arresta il server:<td><input type="submit" name="action" value="Stop">
+<!--<tr><td>Arresta il server:<td><input type="submit" name="action" value="Stop">-->
<tr><td>Ricarica la configurazione del server:<td><input type="submit" name="action" value="Reload">
</table>
</form>
-\${h1("Configurazione server")}
+<!--
+\${h2("Configurazione server")}
<ul>
<li><i>Other options can go here... e.g.,</i>
<li>Modifica configurazione server
</ul>
+-->
EOF
$Lang{Unable_to_connect_to_BackupPC_server} = "Impossibile connettersi al server BackupPC",
"Questo script CGI (\$MyURL) non è in grado di connettersi al server"
window.open(URL,'','width=500,height=400');
}
</script>
- <a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a></td>
+ <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td>
</tr><tr>
<td>Ripristino dei file sulla condivisione</td>
<td><input type="text" size="40" value="\${EscHTML(\$share)}"
#$Lang{Host_or_User_name} = "<small>Host o nome utente:</small>";
$Lang{Go} = "Vai";
$Lang{Hosts} = "Host";
-$Lang{Select_a_host} = "ENGLISH Select a host...";
+$Lang{Select_a_host} = "Selezionare un host...";
$Lang{There_have_been_no_archives} = "<h2> Non ci sono state archiviazioni </h2>\n";
$Lang{This_PC_has_never_been_backed_up} = "<h2> Non è mai stato eseguito un backup per questo PC!!! </h2>\n";
#
#========================================================================
#
-# Version 2.1.0_CVS, released 8 Feb 2004.
+# Version 2.1.0_CVS, released 13 Mar 2004.
#
# See http://backuppc.sourceforge.net.
#
#
if ( !unlink($root) ) {
if ( -d $root ) {
- my $d = DirHandle->new($root)
- or print(STDERR "Can't read $pwd/$root: $!");
- @files = $d->read;
- $d->close;
- @files = grep $_!~/^\.{1,2}$/, @files;
- $bpc->RmTreeQuiet("$pwd/$root", \@files);
- chdir($pwd);
- rmdir($root) || rmdir($root);
+ my $d = DirHandle->new($root);
+ if ( !defined($d) ) {
+ print(STDERR "Can't read $pwd/$root: $!\n");
+ } else {
+ @files = $d->read;
+ $d->close;
+ @files = grep $_!~/^\.{1,2}$/, @files;
+ $bpc->RmTreeQuiet("$pwd/$root", \@files);
+ chdir($pwd);
+ rmdir($root) || rmdir($root);
+ }
} else {
unlink($root) || unlink($root);
}
$errCnt += CheckConfigParams("conf/config.pl", $ConfVars, 0);
+$errCnt += CheckConfigParams("doc-src/BackupPC.pod", $ConfVars, 1);
+
#
# These config parameters are not used in the code, so ignore them.
#
s/^# *Version \d+\.\d+[\.\w]*, released \d+ \w+ \d{4}\.?/# Version __VERSION__, released __RELEASEDATE__./;
s/__VERSION__/$Version/g;
s/__RELEASEDATE__/$ReleaseDate/g;
- if ( $file =~ /BackupPC\.html$/ && !/A NAME="item_%24Conf/ ) {
- s/\$Conf{([^}]*)}/
+ if ( $file =~ /BackupPC\.html$/ ) {
+ #
+ # fixup for perl 5.6.x
+ #
+ if ( !/A NAME="item_%24Conf/i ) {
+ s/\$Conf{([^}]*)}/
defined($ConfName{$1})
- ? "<A HREF=\"#$ConfName{$1}\">\$Conf{$1}<\/A>"
+ ? "\L<A HREF=\"#$ConfName{$1}\">\E\$Conf{$1}<\/A>"
: "\$Conf{$1}"/eg;
+ }
+ s/<(A NAME="item_%24Conf%7B.*?%7D).*?">/\L<$1">/ig;
+ s/^<DD>/<DD><P>/;
+ #
+ # fixup for perl 5.8.x
+ #
+ if ( /^<\/dt>/ ) {
+ $_ .= <FILE>;
+ s/^(<\/dt>\n<dd>)/$1<p>/s;
+ }
+ s/^<li><\/li>/<li>/;
}
if ( /__CONFIGPOD__/ ) {
print OUT $ConfPod;
s/([^;])\s*$/$1 .../;
}
push(@conf, $_);
- my $text = $_;
+ my $text = "\$Conf{$var}";
$text =~ s/\s+/_/sg;
$text =~ s{(\W)}{sprintf("%%%02X", ord($1) )}gxe;
$text = substr($text, 0, 50);