From 8c30bb82b66f26ccf7e261e2c42711251d0d6ccd Mon Sep 17 00:00:00 2001
From: cbarratt
Date: Mon, 7 Jun 2004 00:45:28 +0000
Subject: [PATCH] * Added Dutch translation
* Applied changes in BackupPC-2.1.0beta2pl1.diff
* Applied a few minor patches from Pete Wenzel
---
ChangeLog | 31 +
bin/BackupPC_zcat | 13 +-
bin/BackupPC_zipCreate | 10 +-
conf/config.pl | 9 +-
doc-src/BackupPC.pod | 2 +
lib/BackupPC/CGI/Archive.pm | 49 +-
lib/BackupPC/CGI/Restore.pm | 10 +-
lib/BackupPC/CGI/View.pm | 2 +-
lib/BackupPC/FileZIO.pm | 2 +-
lib/BackupPC/Lang/en.pm | 10 +-
lib/BackupPC/Lang/nl.pm | 1320 ++++++++++++++++++++++++++++++
lib/BackupPC/Lib.pm | 24 +-
lib/BackupPC/Xfer/RsyncDigest.pm | 8 +-
makePatch | 97 +++
14 files changed, 1538 insertions(+), 49 deletions(-)
create mode 100644 lib/BackupPC/Lang/nl.pm
create mode 100755 makePatch
diff --git a/ChangeLog b/ChangeLog
index cb4d6c6..41e5296 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,6 +21,37 @@
# Version __VERSION__, __RELEASEDATE__
#------------------------------------------------------------------------
+* Added Dutch translation from Lieven Bridts, with tweaks from
+ Guus Houtzager.
+
+* Added PC-specific config file read in CGI/Archive.pm. Patch
+ from Pete Wenzel.
+
+* Added non-zero exit code to BackupPC_zcat when uncompress fails.
+ Patch from Pete Wenzel.
+
+* Cosmetic changes to PC Summary and Log file language strings from
+ Pete Wenzel.
+
+#------------------------------------------------------------------------
+# Version 2.1.0beta2pl1, 30 May 2004
+#------------------------------------------------------------------------
+
+* Fixed bug in rsync checksum caching code in BackupPC::Xfer::RsyncDigest.
+
+* BackupPC_zipCreate now ensures the earliest mtime is 1/1/1980,
+ since zip file formats don't support earlier dates. Reported
+ by Dan Niles.
+
+* CGI restore via zip and tar now makes sure stderr is ignored
+ when BackupPC_tarCreate and BackupPC_zipCreate are run.
+ Previously any stderr output would get mixed in the archive,
+ corrupting it. Reported by Dan Niles.
+
+#------------------------------------------------------------------------
+# Version 2.1.0beta2, 23 May 2004
+#------------------------------------------------------------------------
+
* $Conf{BackupFilesOnly} and $Conf{BackupFilesExclude} now apply
to every share, rather than just the first, in the case where
they are arrays and there are multiple shares. Suggested
diff --git a/bin/BackupPC_zcat b/bin/BackupPC_zcat
index caf5d99..32ceb37 100755
--- a/bin/BackupPC_zcat
+++ b/bin/BackupPC_zcat
@@ -48,28 +48,33 @@ use BackupPC::FileZIO;
sub zcat
{
my($fh, $fileName) = @_;
- my($data, $r);
+ my($data, $r, $ret);
while ( ($r = $fh->read(\$data, 65536)) > 0 ) {
print($data);
}
if ( $r < 0 ) {
print(STDERR "$0: can't uncompress $fileName\n");
+ $ret = 1;
}
$fh->close();
+ return $ret;
}
+my $ret = 0;
if ( @ARGV ) {
while ( @ARGV ) {
if ( defined(my $fh = BackupPC::FileZIO->open($ARGV[0], 0, 1)) ) {
- zcat($fh, $ARGV[0]);
+ $ret ||= zcat($fh, $ARGV[0]);
} else {
print(STDERR "$0: can't open $ARGV[0]\n");
- exit(1);
+ $ret = 1;
+ last;
}
shift @ARGV;
}
} else {
my $fh = BackupPC::FileZIO->open(*STDIN, 0, 1);
- zcat($fh, "stdin");
+ $ret ||= zcat($fh, "stdin");
}
+exit($ret);
diff --git a/bin/BackupPC_zipCreate b/bin/BackupPC_zipCreate
index 973995e..e795592 100755
--- a/bin/BackupPC_zipCreate
+++ b/bin/BackupPC_zipCreate
@@ -271,8 +271,14 @@ sub ZipWriteFile
}
return if ( !$zipmember );
- # Set the attributes and permissions
- $zipmember->setLastModFileDateTimeFromUnix($hdr->{mtime});
+ #
+ # Set the attributes and permissions. The standard zip file
+ # header cannot handle dates prior to 1/1/1980, or 315561600
+ # unix seconds, so we round up the mtime.
+ #
+ my $mtime = $hdr->{mtime};
+ $mtime = 315561600 if ( $mtime < 315561600 );
+ $zipmember->setLastModFileDateTimeFromUnix($mtime);
$zipmember->unixFileAttributes($hdr->{mode});
# Zip files don't accept uid and gid, so we put them in the comment field.
$zipmember->fileComment("uid=".$hdr->{uid}." gid=".$hdr->{gid})
diff --git a/conf/config.pl b/conf/config.pl
index 47d7ac7..64ecd67 100644
--- a/conf/config.pl
+++ b/conf/config.pl
@@ -581,7 +581,7 @@ $Conf{ArchiveInfoKeepCnt} = 10;
# to give a list of directories or files to backup for each share
# (the share name is the key). If this is set to just a string or
# array, and $Conf{SmbShareName} contains multiple share names, then
-# the setting is assumed to apply to only the first share name.
+# the setting is assumed to apply all shares.
#
# Examples:
# $Conf{BackupFilesOnly} = '/myFiles';
@@ -606,7 +606,7 @@ $Conf{BackupFilesOnly} = undef;
# to give a list of directories or files to exclude for each share
# (the share name is the key). If this is set to just a string or
# array, and $Conf{SmbShareName} contains multiple share names, then
-# the setting is assumed to apply to only the first share name.
+# the setting is assumed to apply to all shares.
#
# The exact behavior is determined by the underlying transport program,
# smbclient or tar. For smbclient the exlclude file list is passed into
@@ -1135,6 +1135,9 @@ $Conf{ArchivePar} = 0;
# Only for file archives. Splits the output into
# the specified size * 1,000,000.
# e.g. to split into 650,000,000 bytes, specify 650 below.
+#
+# If the value is 0, or if $Conf{ArchiveDest} is an existing file or
+# device (e.g. a streaming tape drive), this feature is disabled.
#
$Conf{ArchiveSplit} = 650;
@@ -1598,7 +1601,7 @@ $Conf{CgiURL} = undef;
#
# Language to use. See lib/BackupPC/Lang for the list of supported
# languages, which include English (en), French (fr), Spanish (es),
-# German (de), and Italian (it).
+# German (de), Italian (it) and Dutch (nl).
#
# Currently the Language setting applies to the CGI interface and email
# messages sent to users. Log files and other text are still in English.
diff --git a/doc-src/BackupPC.pod b/doc-src/BackupPC.pod
index f4d0e4a..9ebfa71 100644
--- a/doc-src/BackupPC.pod
+++ b/doc-src/BackupPC.pod
@@ -3371,6 +3371,8 @@ Manfred continues to support de.pm updates for each new version.
Lorenzo Cappelletti provided the Italian translation, it.pm for v2.1.0.
+Lieven Bridts provided the Dutch translation, nl.pm, for v2.1.0.
+
Many people have reported bugs, made useful suggestions and helped
with testing; see the ChangeLog and the mail lists.
diff --git a/lib/BackupPC/CGI/Archive.pm b/lib/BackupPC/CGI/Archive.pm
index e66babe..b235f9b 100644
--- a/lib/BackupPC/CGI/Archive.pm
+++ b/lib/BackupPC/CGI/Archive.pm
@@ -98,16 +98,23 @@ EOF
} else {
my(@HostList, @BackupList, $HostListStr, $hiddenStr, $pathHdr,
$badFileCnt, $reply, $str);
+
+ #
+ # Pick up the archive host's config file
+ #
+ $bpc->ConfigRead($archHost);
+ %Conf = $bpc->Conf();
+
my $args = {
- SplitPath => $bpc->{Conf}{SplitPath},
- ParPath => $bpc->{Conf}{ParPath},
- CatPath => $bpc->{Conf}{CatPath},
- GzipPath => $bpc->{Conf}{GzipPath},
- Bzip2Path => $bpc->{Conf}{Bzip2Path},
- ArchiveDest => $bpc->{Conf}{ArchiveDest},
- ArchiveComp => $bpc->{Conf}{ArchiveComp},
- ArchivePar => $bpc->{Conf}{ArchivePar},
- ArchiveSplit => $bpc->{Conf}{ArchiveSplit},
+ SplitPath => $Conf{SplitPath},
+ ParPath => $Conf{ParPath},
+ CatPath => $Conf{CatPath},
+ GzipPath => $Conf{GzipPath},
+ Bzip2Path => $Conf{Bzip2Path},
+ ArchiveDest => $Conf{ArchiveDest},
+ ArchiveComp => $Conf{ArchiveComp},
+ ArchivePar => $Conf{ArchivePar},
+ ArchiveSplit => $Conf{ArchiveSplit},
topDir => $bpc->{TopDir},
};
@@ -136,42 +143,42 @@ EOF
}
my ($ArchiveDest, $ArchiveCompNone, $ArchiveCompGzip,
$ArchiveCompBzip2, $ArchivePar, $ArchiveSplit);
- $ArchiveDest = $bpc->{Conf}{ArchiveDest};
- if ( $bpc->{Conf}{ArchiveComp} eq "none" ) {
+ $ArchiveDest = $Conf{ArchiveDest};
+ if ( $Conf{ArchiveComp} eq "none" ) {
$ArchiveCompNone = "checked";
} else {
$ArchiveCompNone = "";
}
- if ( $bpc->{Conf}{ArchiveComp} eq "gzip" ) {
+ if ( $Conf{ArchiveComp} eq "gzip" ) {
$ArchiveCompGzip = "checked";
} else {
$ArchiveCompGzip = "";
}
- if ( $bpc->{Conf}{ArchiveComp} eq "bzip2" ) {
+ if ( $Conf{ArchiveComp} eq "bzip2" ) {
$ArchiveCompBzip2 = "checked";
} else {
$ArchiveCompBzip2 = "";
}
- $ArchivePar = $bpc->{Conf}{ArchivePar};
- $ArchiveSplit = $bpc->{Conf}{ArchiveSplit};
+ $ArchivePar = $Conf{ArchivePar};
+ $ArchiveSplit = $Conf{ArchiveSplit};
if ( $In{type} == 1 ) {
#
# Tell the user what options they have
#
my $paramStr = "";
- if ( $bpc->{Conf}{ArchiveClientCmd} =~ /\$archiveloc\b/ ) {
+ if ( $Conf{ArchiveClientCmd} =~ /\$archiveloc\b/ ) {
$paramStr .= eval("qq{$Lang->{BackupPC_Archive2_location}}");
}
- if ( $bpc->{Conf}{ArchiveClientCmd} =~ /\$compression\b/ ) {
+ if ( $Conf{ArchiveClientCmd} =~ /\$compression\b/ ) {
$paramStr .= eval("qq{$Lang->{BackupPC_Archive2_compression}}");
}
- if ( $bpc->{Conf}{ArchiveClientCmd} =~ /\$parfile\b/
- && -x $bpc->{Conf}{ParPath} ) {
+ if ( $Conf{ArchiveClientCmd} =~ /\$parfile\b/
+ && -x $Conf{ParPath} ) {
$paramStr .= eval("qq{$Lang->{BackupPC_Archive2_parity}}");
}
- if ( $bpc->{Conf}{ArchiveClientCmd} =~ /\$splitsize\b/
- && -x $bpc->{Conf}{SplitPath} ) {
+ if ( $Conf{ArchiveClientCmd} =~ /\$splitsize\b/
+ && -x $Conf{SplitPath} ) {
$paramStr .= eval("qq{$Lang->{BackupPC_Archive2_split}}");
}
my $content = eval("qq{$Lang->{BackupPC_Archive2}}");
diff --git a/lib/BackupPC/CGI/Restore.pm b/lib/BackupPC/CGI/Restore.pm
index c627712..70c428b 100644
--- a/lib/BackupPC/CGI/Restore.pm
+++ b/lib/BackupPC/CGI/Restore.pm
@@ -181,14 +181,15 @@ EOF
# This is necessary to ensure the output gets to the correct place
# under mod_perl.
#
- $bpc->cmdSystemOrEval(["$BinDir/BackupPC_tarCreate",
+ $bpc->cmdSystemOrEvalLong(["$BinDir/BackupPC_tarCreate",
"-h", $host,
"-n", $num,
"-s", $share,
@pathOpts,
@fileList
],
- sub { print(@_); }
+ sub { print(@_); },
+ 1, # ignore stderr
);
} elsif ( $In{type} == 2 ) {
#
@@ -218,7 +219,7 @@ EOF
# This is necessary to ensure the output gets to the correct place
# under mod_perl.
#
- $bpc->cmdSystemOrEval(["$BinDir/BackupPC_zipCreate",
+ $bpc->cmdSystemOrEvalLong(["$BinDir/BackupPC_zipCreate",
"-h", $host,
"-n", $num,
"-c", $In{compressLevel},
@@ -226,7 +227,8 @@ EOF
@pathOpts,
@fileList
],
- sub { print(@_); }
+ sub { print(@_); },
+ 1, # ignore stderr
);
} elsif ( $In{type} == 3 ) {
#
diff --git a/lib/BackupPC/CGI/View.pm b/lib/BackupPC/CGI/View.pm
index 378e31e..a17e240 100644
--- a/lib/BackupPC/CGI/View.pm
+++ b/lib/BackupPC/CGI/View.pm
@@ -216,7 +216,7 @@ sub action
return $c;
};
#
- # Documentation a different header and no pre or post text,
+ # Documentation has a different header and no pre or post text,
# so just handle it here
#
Header($Lang->{BackupPC__Documentation}, "", 0, $contentSub);
diff --git a/lib/BackupPC/FileZIO.pm b/lib/BackupPC/FileZIO.pm
index 2b6e70f..44a9aaf 100644
--- a/lib/BackupPC/FileZIO.pm
+++ b/lib/BackupPC/FileZIO.pm
@@ -177,7 +177,7 @@ sub read
# the compressed file. Also seek the file so
# it is positioned at the 0xb3.
#
- seek($self->{fh}, -length($self->{dataIn}), 1);
+ sysseek($self->{fh}, -length($self->{dataIn}), 1);
$self->{eof} = 1;
$self->{dataIn} = "";
##print("Got 0xb3 block: considering eof\n");
diff --git a/lib/BackupPC/Lang/en.pm b/lib/BackupPC/Lang/en.pm
index 1276dd0..e040cbf 100644
--- a/lib/BackupPC/Lang/en.pm
+++ b/lib/BackupPC/Lang/en.pm
@@ -117,7 +117,7 @@ $Lang{BackupPC_Server_Status} = <
EOF
# --------------------------------
$Lang{Contents_of_log_file} = <\$file, modified \$mtimeStr \$comment
+Contents of file \$file, modified \$mtimeStr \$comment
EOF
# --------------------------------
@@ -1005,7 +1005,7 @@ $Lang{Archive_requested} = "Archive requested by \$User from \$ENV{REMOTE_ADDR}"
# -------------------------------------------------
$Lang{Status} = "Status";
-$Lang{PC_Summary} = "PC Summary";
+$Lang{PC_Summary} = "Host Summary";
$Lang{LOG_file} = "LOG file";
$Lang{LOG_files} = "LOG files";
$Lang{Old_LOGs} = "Old LOGs";
diff --git a/lib/BackupPC/Lang/nl.pm b/lib/BackupPC/Lang/nl.pm
new file mode 100644
index 0000000..3506433
--- /dev/null
+++ b/lib/BackupPC/Lang/nl.pm
@@ -0,0 +1,1320 @@
+#!/bin/perl
+
+#my %lang;
+#use strict;
+#File: nl.pm version 1.0.2
+# --------------------------------
+
+$Lang{Start_Archive} = "Start Archivering";
+$Lang{Stop_Dequeue_Archive} = "Stop/Annuleer Archivering";
+$Lang{Start_Full_Backup} = "Start volledige backup";
+$Lang{Start_Incr_Backup} = "Start stapsgewijze backup";
+$Lang{Stop_Dequeue_Backup} = "Stop/Annuleer backup";
+$Lang{Restore} = "Terugplaatsen";
+
+$Lang{Type_full} = "volledig";
+$Lang{Type_incr} = "incrementeel";
+
+# -----
+
+$Lang{Only_privileged_users_can_view_admin_options} = "Alleen gebruikers met bijzondere rechten kunnen admin.-opties bekijken.";
+$Lang{H_Admin_Options} = "BackupPC Server: Admin Opties";
+$Lang{Admin_Options} = "Admin Opties";
+$Lang{Admin_Options_Page} = <
+\${h2("Controle van de server")}
+
+
+EOF
+$Lang{Unable_to_connect_to_BackupPC_server} = "Verbinding met de BackupPC server niet mogelijk",
+ "Dit CGI script (\$MyURL) kan geen verbinding maken met de BackupPC-server"
+ . " op \$Conf{ServerHost} poort \$Conf{ServerPort}."
+ . " De foutmelding was: \$err.",
+ "Mogelijk draait de BackupPC server niet of is er een "
+ . " configuratiefout. Gelieve dit te melden aan uw systeembeheerder.";
+$Lang{Admin_Start_Server} = <
+De BackupPC-server op \$Conf{ServerHost} poort \$Conf{ServerPort}
+werkt momenteel niet (misschien hebt u hem juist gestopt, of nog niet gestart).
+Wilt u de server nu starten?
+
+
+
+EOF
+
+# -----
+
+$Lang{H_BackupPC_Server_Status} = "Overzicht BackupPC Server";
+
+$Lang{BackupPC_Server_Status_General_Info}= <
+
De PID (procesidentificatie) van de server is \$Info{pid}, op machine \$Conf{ServerHost},
+ versie \$Info{Version}, gestart op \$serverStartTime.
+
Dit overzicht werd gemaakt op \$now.
+
De configuratie werd het laatst ingelezen op \$configLoadTime.
+
Volgende backupsessie start op \$nextWakeupTime.
+
Andere informatie:
+
+
\$numBgQueue wachtende backupaanvragen sedert laatste geplande wakeup,
+
\$numUserQueue wachtende backupaanvragen van gebruikers,
+
\$numCmdQueue wachtende aanvragen op commando,
+ \$poolInfo
+
De backupschijf werd het laatst aangevuld tot \$Info{DUlastValue}%
+ op (\$DUlastTime), het maximum van vandaag is \$Info{DUDailyMax}% (\$DUmaxTime)
+ en het maximum van gisteren was \$Info{DUDailyMaxPrev}%.
+
+Klik op het backupnummer om de inhoud te bekijken of om bestanden terug te plaatsen.
+
+
+
backup nr.
+
Type
+
Aangevuld
+
Startdatum
+
Duurtijd in min.
+
Lftd. in dagen
+
Plaats op de server
+
+\$str
+
+
+
+\$restoreStr
+
+
+\${h2("Overzicht van fouten tijdens overdracht")}
+
+
+
backup nr.
+
Type
+
Bekijken
+
Aantal fouten
+
Aantal foutieve bestanden
+
Aantal foutieve \'shares\'
+
Aantal tar-fouten
+
+\$errStr
+
+
+
+\${h2("Overzicht bestandsgrootte en hergebruik")}
+
+Bestaande bestanden zijn bestanden die reeds aanwezig waren op de backupschijf.
+Nieuwe bestanden zijn bestanden die aan de schijf zijn toegevoegd.
+Lege bestanden en SMB-fouten worden niet geteld in de aantallen \'hergebruik\' en \'nieuw\'.
+
+
+
+
Totalen
+
Bestaande bestanden
+
Nieuwe bestanden
+
+
+
backup nr.
+
Type
+
Aantal best.
+
Grootte in MB
+
MB/sec
+
Aantal best.
+
Grootte in MB
+
Aantal best.
+
Grootte in MB
+
+\$sizeStr
+
+
+
+\${h2("Overzicht compressie")}
+
+Compressie van bestanden die reeds op schijf stonden en van nieuw
+gecomprimeerde bestanden.
+
+EOF
+
+# ------------------------------
+$Lang{DirHistory_backup_for__host} = "BackupPC: Geschiedenis van een map van backup van \$host";
+
+#
+# These two strings are used to build the links for directories and
+# file versions. Files are appended with a version number.
+#
+$Lang{DirHistory_dirLink} = "map";
+$Lang{DirHistory_fileLink} = "v";
+
+$Lang{DirHistory_for__host} = <
+Deze geschiedenis toont elke unieke versie van de bestanden over
+alle backups heen:
+
+
Klik op een backupnummer om terug te keren naar het overzicht van de backup,
+
Klik op een map-link (\$Lang->{DirHistory_dirLink}) om door
+ die map te bladeren,
+
Klik op de versie-link van een bestand (\$Lang->{DirHistory_fileLink}0,
+ \$Lang->{DirHistory_fileLink}1, ...) om dat bestand te downloaden,
+
Bestanden met dezelfde inhoud maar in verschillende backups hebben
+ hetzelfde versienummer,
+
Bestanden of mappen die in een bepaalde backup niet aanwezig zijn hebben
+ een lege cel.
+
Bestanden met hetzelfde versienummer kunnen wel verschillende attributen
+ (eigenaar,lees- of schrijfrechten) hebben.Selecteer het backupnummer om
+ de attributen van het bestand te bekijken.
+
+
+\${h2("Geschiedenis van \${EscHTML(\$dirDisplay)}")}
+
+
+
+
backup nummer
\$backupNumStr
+
backup moment
\$backupTimeStr
+\$fileStr
+
+EOF
+# ------------------------------
+$Lang{Restore___num_details_for__host} = "BackupPC: Details van herstel nr. #\$num van machine \$host";
+
+$Lang{Restore___num_details_for__host2} = <
+
+EOF
+
+# -----------------------------------
+$Lang{Email_Summary} = "BackupPC: Overzicht E-mail";
+
+# -----------------------------------
+# !! ERROR messages !!
+# -----------------------------------
+$Lang{BackupPC__Lib__new_failed__check_apache_error_log} = "BackupPC::Lib->new mislukt: controleer de apache error_log\n";
+$Lang{Wrong_user__my_userid_is___} =
+ "Foutieve gebruiker: mijn userid is \$>, in plaats van \$uid"
+ . "(\$Conf{BackupPCUser})\n";
+# $Lang{Only_privileged_users_can_view_PC_summaries} = "Enkel gebruikers met bijzondere rechten kunnen PC-overzichten bekijken.";
+$Lang{Only_privileged_users_can_stop_or_start_backups} =
+ "Enkel gebruikers met bijzondere rechten kunnen backups stoppen of starten van machine"
+ . " \${EscHTML(\$host)}.";
+$Lang{Invalid_number__num} = "Ongeldig of onjuist nummer \$num";
+$Lang{Unable_to_open__file__configuration_problem} = "Ik kan \$file niet openen: misschien problemen met de configuratie?";
+$Lang{Only_privileged_users_can_view_log_or_config_files} = "Enkel gebruikers met bijzondere rechten kunnen log- of configuratiebestanden bekijken.";
+$Lang{Only_privileged_users_can_view_log_files} = "Enkel gebruikers met bijzondere rechten kunnen logbestanden bekijken.";
+$Lang{Only_privileged_users_can_view_email_summaries} = "Enkel gebruikers met bijzondere rechten kunnen het e-mailoverzicht bekijken.";
+$Lang{Only_privileged_users_can_browse_backup_files} = "Enkel gebruikers met bijzondere rechten kunnen de backup "
+ . "van machine \${EscHTML(\$In{host})} bekijken.";
+$Lang{Empty_host_name} = "Geen of lege machinenaam.";
+$Lang{Directory___EscHTML} = "Map \${EscHTML(\"\$TopDir/pc/\$host/\$num\")}"
+ . " is leeg";
+$Lang{Can_t_browse_bad_directory_name2} = "Kan niet bladeren door foutieve mapnaam"
+ . " \${EscHTML(\$relDir)}";
+$Lang{Only_privileged_users_can_restore_backup_files} = "Enkel gebruikers met bijzondere rechten kunnen backupbestanden"
+ . " van machine \${EscHTML(\$In{host})} terugplaatsen.";
+$Lang{Bad_host_name} = "Foutieve of ongeldige machinenaam \${EscHTML(\$host)}";
+$Lang{You_haven_t_selected_any_files__please_go_Back_to} = "U hebt geen enkel bestand geselecteerd. Gelieve terug te gaan en"
+ . " selecteer een of meerdere bestanden.";
+$Lang{You_haven_t_selected_any_hosts} = "U hebt geen machine geselecteerd. Gelieve terug te gaan om"
+ . " een machine te selecteren.";
+$Lang{Nice_try__but_you_can_t_put} = "Goed geprobeerd, maar u kan geen \'..\' in de bestandsnamen plaatsen";
+$Lang{Host__doesn_t_exist} = "Machine \${EscHTML(\$In{hostDest})} bestaat niet.";
+$Lang{You_don_t_have_permission_to_restore_onto_host} = "U beschikt niet over de juiste rechten om bestanden terug te plaatsen naar machine "
+ . " \${EscHTML(\$In{hostDest})}";
+$Lang{Can_t_open_create} = "Ik kan "
+ . "\${EscHTML(\"\$TopDir/pc/\$hostDest/\$reqFileName\")} niet openen of aanmaken";
+$Lang{Only_privileged_users_can_restore_backup_files2} = "Alleen gebruikers met bijzondere rechten kunnen bestanden terugplaatsen"
+ . " naar machine \${EscHTML(\$host)}.";
+$Lang{Empty_host_name} = "Lege machinenaam";
+$Lang{Unknown_host_or_user} = "Onbekende machine of gebruiker \${EscHTML(\$host)}";
+$Lang{Only_privileged_users_can_view_information_about} = "Enkel gebruikers met bijzondere rechten kunnen informatie over"
+ . " machine \${EscHTML(\$host)} bekijken." ;
+$Lang{Only_privileged_users_can_view_archive_information} = "Enkel gebruikers met bijzondere rechten kunnen archiveringsinformatie bekijken.";
+$Lang{Only_privileged_users_can_view_restore_information} = "Enkel gebruikers met bijzondere rechten kunnen herstelinformatie bekijken.";
+$Lang{Restore_number__num_for_host__does_not_exist} = "Terugplaatsing nr.\$num van machine \${EscHTML(\$host)}"
+ . " bestaat niet.";
+$Lang{Archive_number__num_for_host__does_not_exist} = "Archiveringsnr. \$num van machine \${EscHTML(\$host)}"
+ . " bestaat niet.";
+$Lang{Can_t_find_IP_address_for} = "Ik kan het IP-nummer van \${EscHTML(\$host)} niet vinden.";
+$Lang{host_is_a_DHCP_host} = <
+In afwachting dat ik machine \$host op een welbepaald DHCP-adres terugvind, kan u
+deze aanvraag enkel doen vanaf die machine zelf.
+EOF
+
+# ------------------------------------
+# !! Server Mesg !!
+# ------------------------------------
+
+$Lang{Backup_requested_on_DHCP__host} = "backup aangevraagd van DHCP \$host (\$In{hostIP}) door"
+ . " \$User vanaf \$ENV{REMOTE_ADDR}";
+$Lang{Backup_requested_on__host_by__User} = "backup aangevraagd van \$host door \$User";
+$Lang{Backup_stopped_dequeued_on__host_by__User} = "backup geannuleerd van \$host door \$User";
+$Lang{Restore_requested_to_host__hostDest__backup___num} = "Terugplaatsing aangevraagd naar machine \$hostDest, backup nr.\$num,"
+ . " door \$User vanaf \$ENV{REMOTE_ADDR}";
+$Lang{Archive_requested} = "Archivering aangevraagd door \$User vanaf \$ENV{REMOTE_ADDR}";
+
+# -------------------------------------------------
+# ------- Stuff that was forgotten ----------------
+# -------------------------------------------------
+
+$Lang{Status} = "Status";
+$Lang{PC_Summary} = "PC overzicht";
+$Lang{LOG_file} = "LOG-bestand";
+$Lang{LOG_files} = "LOG-bestanden";
+$Lang{Old_LOGs} = "Oude LOGs";
+$Lang{Email_summary} = "E-mailoverzicht";
+$Lang{Config_file} = "Configuratiebest.";
+$Lang{Hosts_file} = "Hosts-bestand";
+$Lang{Current_queues} = "Huidige wachtrij";
+$Lang{Documentation} = "Documentatie";
+
+#$Lang{Host_or_User_name} = "Machine of gebruikersnaam:";
+$Lang{Go} = "Start";
+$Lang{Hosts} = "Machines";
+$Lang{Select_a_host} = "Selecteer een machine...";
+
+$Lang{There_have_been_no_archives} = "
Er waren (nog) geen archiveringen
\n";
+$Lang{This_PC_has_never_been_backed_up} = "
Deze PC werd (nog) nooit gebackupt !!
\n";
+$Lang{This_PC_is_used_by} = "
Deze PC wordt gebruikt door \${UserLink(\$user)}";
+
+$Lang{Extracting_only_Errors} = "(Enkel de foutmeldingen)";
+$Lang{XferLOG} = "OverdrachtsLOG";
+$Lang{Errors} = "Foutmeldingen";
+
+# ------------
+$Lang{Last_email_sent_to__was_at___subject} = <Meest recente e-mail die gezonden werd naar \${UserLink(\$user)} was op \$mailTime, onderwerp: "\$subj".
+EOF
+# ------------
+$Lang{The_command_cmd_is_currently_running_for_started} = <De opdracht \$cmd loopt momenteel voor machine \$host sedert \$startTime.
+EOF
+
+# -----------
+$Lang{Host_host_is_queued_on_the_background_queue_will_be_backed_up_soon} = <Machine \$host staat klaar in de wachtrij \'achtergrond\' (backup zal weldra starten).
+EOF
+
+# ----------
+$Lang{Host_host_is_queued_on_the_user_queue__will_be_backed_up_soon} = <Machine \$host staat in de gebruikers-wachtrij (backup zal weldra starten).
+EOF
+
+# ---------
+$Lang{A_command_for_host_is_on_the_command_queue_will_run_soon} = <Een opdracht voor machine \$host staat in de opdrachtenwachtrij (opdracht zal weldra starten).
+EOF
+
+# --------
+$Lang{Last_status_is_state_StatusHost_state_reason_as_of_startTime} = <Meest recente status is \"\$Lang->{\$StatusHost{state}}\"\$reason sedert \$startTime.
+EOF
+
+# --------
+$Lang{Last_error_is____EscHTML_StatusHost_error} = <Meest recente foutmelding was \"\${EscHTML(\$StatusHost{error})}\".
+EOF
+
+# ------
+$Lang{Pings_to_host_have_failed_StatusHost_deadCnt__consecutive_times} = <Pings naar machine \$host zijn \$StatusHost{deadCnt} opeenvolgende keren mislukt.
+EOF
+
+# -----
+$Lang{Prior_to_that__pings} = "Daarvoor, pings";
+
+# -----
+$Lang{priorStr_to_host_have_succeeded_StatusHostaliveCnt_consecutive_times} = <\$priorStr naar machine \$host zijn \$StatusHost{aliveCnt} opeenvolgende keren geslaagd.
+
+EOF
+
+$Lang{Because__host_has_been_on_the_network_at_least__Conf_BlackoutGoodCnt_consecutive_times___} = <Omdat machine \$host op het netwerk was gedurende minstens \$Conf{BlackoutGoodCnt}
+opeenvolgende keren, zal hij niet gebackupt worden van \$blackoutStr
+EOF
+
+$Lang{__time0_to__time1_on__days} = "\$t0 tot \$t1 op \$days.";
+
+$Lang{Backups_are_deferred_for_hours_hours_change_this_number} = <backups zijn \$hours uren uitgesteld
+(Wijzig dit aantal).
+EOF
+
+$Lang{tryIP} = " en \$StatusHost{dhcpHostIP}";
+
+# $Lang{Host_Inhost} = "Machine \$In{host}";
+
+$Lang{checkAll} = <
+ Selecteer alles
+
+
+
+EOF
+
+$Lang{checkAllHosts} = <
+ Selecteer alles
+
+
+
+EOF
+
+$Lang{fileHeader} = <
Naam
+
Type
+
Mode
+
Nr.
+
Grootte
+
Wijziging
+
+EOF
+
+$Lang{Home} = "Home";
+$Lang{Browse} = "Bekijke backups";
+$Lang{Last_bad_XferLOG} = "Laaste overdr.LOG met fouten";
+$Lang{Last_bad_XferLOG_errors_only} = "Laaste overdr.LOG (enkel foutmeldingen)";
+
+$Lang{This_display_is_merged_with_backup} = < Dit overzicht is samengevoegd met backup #\$numF.
+EOF
+
+$Lang{Visit_this_directory_in_backup} = < Selecteer de backup die u wil bekijken:
+EOF
+
+$Lang{Restore_Summary} = <
+Klik op het terugplaatsingsnummer voor meer details.
+
+
Terugplaatsing nr.
+
Resultaat
+
Startdatum
+
Duur(min.)
+
Aantal best.
+
MB
+
Aantal tar-fouten
+
Aantal Overdr.fouten
+
+\$restoreStr
+
+
+EOF
+
+$Lang{Archive_Summary} = <
+Klik op het archiveringsnummer voor meer details.
+
De map/directory \${EscHTML(\$dirDisplay)} is leeg
+
+EOF
+
+#$Lang{on} = "aan";
+$Lang{off} = "uit";
+
+$Lang{backupType_full} = "volledig";
+$Lang{backupType_incremental} = "incrementeel";
+$Lang{backupType_partial} = "gedeeltelijk";
+
+$Lang{failed} = "mislukt";
+$Lang{success} = "succesvol";
+$Lang{and} = "en";
+
+# ------
+# Hosts states and reasons
+$Lang{Status_idle} = "in rust";
+$Lang{Status_backup_starting} = "backup start";
+$Lang{Status_backup_in_progress} = "backup bezig";
+$Lang{Status_restore_starting} = "terugplaatsen start";
+$Lang{Status_restore_in_progress} = "terugplaatsen bezig";
+$Lang{Status_link_pending} = "wacht op linken";
+$Lang{Status_link_running} = "linken is bezig";
+
+$Lang{Reason_backup_done} = "backup voltooid";
+$Lang{Reason_restore_done} = "terugplaatsen voltooid";
+$Lang{Reason_archive_done} = "archivering voltooid";
+$Lang{Reason_nothing_to_do} = "niets te doen";
+$Lang{Reason_backup_failed} = "backup mislukt";
+$Lang{Reason_restore_failed} = "terugplaatsen mislukt";
+$Lang{Reason_archive_failed} = "archivering mislukt";
+$Lang{Reason_no_ping} = "geen ping";
+$Lang{Reason_backup_canceled_by_user} = "backup geannuleerd door gebruiker";
+$Lang{Reason_restore_canceled_by_user} = "terugplaatsen geannuleerd door gebruiker";
+$Lang{Reason_archive_canceled_by_user} = "archivering geannuleerd door gebruiker";
+
+# ---------
+# Email messages
+
+# No backup ever
+$Lang{EMailNoBackupEverSubj} = "BackupPC: Er werd (nog) geen backup gemaakt van pc \$host";
+$Lang{EMailNoBackupEverMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Beste $userName,
+
+Uw pc ($host) is tot op heden nog nooit succesvol gebackupt door
+onze PC backup software. PC backups zouden automatisch moeten gebeuren
+als uw pc verbonden is met het netwerk.
+U kan best contact opnemen met de systeembeheerder als:
+
+ - Uw pc regelmatig en normaal verbonden was met het netwerk.
+ Mogelijk is er immers een configuratie of setupfout waardoor
+ backups niet mogelijk waren/zijn.
+
+ - U helemaal geen backup wenst van deze pc en u wil dat er
+ hierover geen e-mail meer gezonden worden
+
+In andere gevallen dient u er voor te zorgen dat uw pc zo spoedig
+mogelijk verbonden wordt met het netwerk.
+In geval van twijfel of voor hulp kan u contact opnemen met de
+systeembeheerder.
+
+Met vriendelijke groeten,
+BackupPC Genie
+http://backuppc.sourceforge.net
+EOF
+
+# No recent backup
+$Lang{EMailNoBackupRecentSubj} = "BackupPC: er zijn recentelijk geen backups (meer) gemaakt van pc \$host";
+$Lang{EMailNoBackupRecentMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Beste $userName,
+
+Er is reeds gedurende $days dagen geen backup meer gemaakt van uw pc ($host).
+Er zijn ondertussen van uw pc $numbackups gemaakt sinds $firstTime.
+De laatste backup dateert van $days geleden.
+PC backups zouden automatisch moeten gebeuren als uw pc verbonden
+is met het netwerk.
+
+Als uw pc gedurende geruime tijd (meer dan een paar uur) verbonden
+was met het netwerk gedurende de laatste $days dagen, kan u het beste
+contact opnemen van uw systeembeheerder. Vraag hem of haar om uit te
+zoeken waarom er geen backups meer genomen worden van uw pc.
+
+Anderzijds, als deze pc of notebook zich momenteel niet in het netwerk
+bevindt dan kan u hieraan weinig doen behalve van belangrijke bestanden
+handmatig een copy nemen op een ander medium (CD,diskette, tape,andere pc,...)
+U dient te weten dat *geen enkel bestand* dat u aanmaakte of wijzigde in de
+laatste $days dagen teruggeplaatst zal kunnen worden in geval de harde schijf
+van uw pc zou crashen. Hierin zijn nieuwe e-mail en bijlagen inbegrepen.
+
+
+Met vriendelijke groeten,
+BackupPC Genie
+http://backuppc.sourceforge.net
+eof
+
+# Old Outlook files
+$Lang{EMailOutlookBackupSubj} = "BackupPC: Outlookbestanden op pc \$host moeten gebackupt worden";
+$Lang{EMailOutlookBackupMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Beste $userName,
+
+De Outlookbestanden van uw pc zijn $howlong.
+
+Deze bestanden bevatten al uw e-mail, bijlagen, contactadressen en agenda.
+
+Uw pc werd reeds $numBackups keer succesvol gebackupt sinds $firstTime
+tot $lastTime dagen geleden.
+Helaas, wanneer Outlook geopend is, worden al de bijhorende bestanden
+ontoegankelijk gemaakt voor andere programma's, inclusief het programma backupPC.
+Hierdoor kon van deze bestanden geen backup gemaakt worden.
+
+Als u nu verbonden bent met het netwerk, wordt U aangeraden om een
+backup te maken van de Outlookbestanden. Dat kan op volgende manier:
+- Sluit Outlook
+- Sluit bij voorkeur ook alle andere toepassingen
+- open uw browser en ga naar deze link:
+
+ $CgiURL?host=$host
+
+- Kies dan voor "Start incrementele backup" tweemaal om zo een incrementele backup te starten.
+
+U kan klikken op de link "Terug naar $host pagina" en vervolgens op "vernieuwen"
+om de status van de backup te bekijken. Het zou slechts enkele ogenblikken mogen
+vragen vooraleer de backup volledig is.
+
+Met vriendelijke groeten,
+BackupPC Genie
+http://backuppc.sourceforge.net
+EOF
+
+$Lang{howLong_not_been_backed_up} = "(nog) niet succesvol gebackupt";
+$Lang{howLong_not_been_backed_up_for_days_days} = "reeds sedert \$days dagen niet gebackupt";
+
+#end of lang_nl.pm
+
diff --git a/lib/BackupPC/Lib.pm b/lib/BackupPC/Lib.pm
index 560a680..22a73da 100644
--- a/lib/BackupPC/Lib.pm
+++ b/lib/BackupPC/Lib.pm
@@ -59,7 +59,7 @@ sub new
TopDir => $topDir || '/data/BackupPC',
BinDir => $installDir || '/usr/local/BackupPC',
LibDir => $installDir || '/usr/local/BackupPC',
- Version => '2.1.0beta2',
+ Version => '2.1.0beta2pl1',
BackupFields => [qw(
num type startTime endTime
nFiles size nFilesExist sizeExist nFilesNew sizeNew
@@ -1137,9 +1137,9 @@ sub cmdExecOrEval
#
# Also, $? should be set when the CHILD pipe is closed.
#
-sub cmdSystemOrEval
+sub cmdSystemOrEvalLong
{
- my($bpc, $cmd, $stdoutCB, @args) = @_;
+ my($bpc, $cmd, $stdoutCB, $ignoreStderr, @args) = @_;
my($pid, $out, $allOut);
local(*CHILD);
@@ -1173,7 +1173,11 @@ sub cmdSystemOrEval
# This is the child
#
close(STDERR);
- open(STDERR, ">&STDOUT");
+ if ( $ignoreStderr ) {
+ open(STDERR, ">", "/dev/null");
+ } else {
+ open(STDERR, ">&STDOUT");
+ }
alarm(0);
$cmd = [map { m/(.*)/ } @$cmd]; # untaint
#
@@ -1200,6 +1204,18 @@ sub cmdSystemOrEval
return $out;
}
+#
+# The shorter version that sets $ignoreStderr = 0, ie: merges stdout
+# and stderr together.
+#
+sub cmdSystemOrEval
+{
+ my($bpc, $cmd, $stdoutCB, @args) = @_;
+
+ return $bpc->cmdSystemOrEvalLong($cmd, $stdoutCB, 0, @args);
+}
+
+
#
# Promotes $conf->{BackupFilesOnly}, $conf->{BackupFilesExclude}
# to hashes and $conf->{$shareName} to an array
diff --git a/lib/BackupPC/Xfer/RsyncDigest.pm b/lib/BackupPC/Xfer/RsyncDigest.pm
index fcb1bc0..7c358a0 100644
--- a/lib/BackupPC/Xfer/RsyncDigest.pm
+++ b/lib/BackupPC/Xfer/RsyncDigest.pm
@@ -150,7 +150,7 @@ sub digestAdd
$digest->add($data);
}
$fileDigest = $digest->digest2;
- my $eofPosn = tell($fh->{fh});
+ my $eofPosn = sysseek($fh->{fh}, 0, 1);
$fh->close;
my $rsyncData = $blockDigest . $fileDigest;
my $metaData = pack("VVVV", $blockSize,
@@ -199,14 +199,14 @@ sub digestAdd
# match our expected length.
#
return -111 if ( !defined(sysseek($fh2, 0, 2)) );
- if ( tell($fh2) != $eofPosn + length($data2) ) {
+ if ( sysseek($fh2, 0, 1) != $eofPosn + length($data2) ) {
if ( !truncate($fh2, $eofPosn + length($data2)) ) {
&$Log(sprintf("digestAdd: $file truncate from %d to %d failed",
- tell($fh2), $eofPosn + length($data2)));
+ sysseek($fh2, 0, 1), $eofPosn + length($data2)));
return -112;
} else {
&$Log(sprintf("digestAdd: $file truncated from %d to %d",
- tell($fh2), $eofPosn + length($data2)));
+ sysseek($fh2, 0, 1), $eofPosn + length($data2)));
}
}
}
diff --git a/makePatch b/makePatch
new file mode 100755
index 0000000..ab5913c
--- /dev/null
+++ b/makePatch
@@ -0,0 +1,97 @@
+#!/bin/perl
+#
+# Script that generates a patch file for BackupPC.
+#
+
+use strict;
+
+use File::Find;
+use File::Path;
+
+my $BaseVersion = "2.1.0beta2";
+my $PatchLevel = "pl1";
+my $PatchVersion = "$BaseVersion$PatchLevel";
+
+my $Base = "/home/craig/admin/packages/BackupPC-$BaseVersion";
+my $TmpDir = "patch.tmp";
+my $OutFile = "BackupPC-$PatchVersion.diff";
+
+find({wanted => \&CopyFile, no_chdir => 1}, $Base);
+
+unlink($OutFile);
+
+open(OUT, ">", $OutFile) || die("can't open OutFile\n");
+
+my $now = localtime;
+
+print OUT < ) {
+ next if ( /^Only/ || /^diff / );
+ s/^--- \Q$Base\//--- /;
+ s/^\+\+\+ \Q$TmpDir\//+++ /;
+ print OUT;
+ }
+}
+rmtree($TmpDir, 0);
+
+sub CopyFile
+{
+ (my $file = $File::Find::name) =~ s{\Q$Base}{};
+ (my $dir = $file) =~ s{(.*)/.*}{$1};
+ $file =~ s{^/}{};
+
+ #print("Got dir = $TmpDir/$dir, file = $file\n");
+ return if ( !-f $file );
+ mkpath("$TmpDir/$dir", 0, 0755) if ( !-d "$TmpDir/$dir" );
+ open(IN, "<", $file)
+ || die("Can't open $file for input\n");
+ open(OUT, ">", "$TmpDir/$file")
+ || die("Can't open $TmpDir/$file for output\n");
+ while ( ) {
+ if ( /^use lib ".*BackupPC\/lib";/
+ || /^use lib "\/home\/pcbackup\/install\/lib";/ ) {
+ print OUT "use lib \"__INSTALLDIR__/lib\";\n";
+ } elsif ( $file =~ /Lib.pm/ && /(.*TopDir *=> .*)'.*',/ ) {
+ print OUT "$1'__TOPDIR__',\n";
+ } elsif ( $file =~ /Lib.pm/ && /(.*BinDir *=> .*)'.*',/ ) {
+ print OUT "$1'__INSTALLDIR__',\n";
+ } elsif ( $file =~ /Lib.pm/ && /(.*LibDir *=> .*)'.*',/ ) {
+ print OUT "$1'__INSTALLDIR__',\n";
+ } elsif ( $file =~ /Lib.pm/ && /(.*Version *=> .*)'.*',/ ) {
+ print OUT "$1'$PatchVersion',\n";
+ } elsif ( $file =~ /BackupPC_Admin/ && /(my *\$installDir *= *)'.*'/
+) {
+ print OUT "$1'__INSTALLDIR__/lib';\n";
+ } else {
+ print(OUT);
+ }
+ }
+ close(IN);
+ close(OUT);
+}
--
2.20.1