Changes for 2.1.3: v2_1_3
authorcbarratt <cbarratt>
Mon, 22 Jan 2007 07:50:00 +0000 (07:50 +0000)
committercbarratt <cbarratt>
Mon, 22 Jan 2007 07:50:00 +0000 (07:50 +0000)
* Fixes to lib/BackupPC/Xfer/Tar.pm for tar 1.16: allow 1
  (ie: 256) as a successful exit status and match "Total
  bytes read" message for restores.  First reported by
  Torsten Sadowski and debugged by Ralf Gross and Holger
  Parplies.

* Fix to bin/BackupPC to correctly re-queue multiple restore
  requests directed at the same host.

* Added pt_br.pm language file provided by Reginaldo Ferreira.

* In conf/config.pl, changed --devices to -D in $Conf{RsyncArgs}
  and $Conf{RsyncRestoreArgs} to fix "fileListReceive failed" and
  "Can't open .../f%2f for empty output" errors with rsync 2.6.7+.
  Fix proposed by Justin Pessa and Vincent Ho, and confirmed by
  Dan Niles.

* Added patch from Michael (mna.news) to ignore "file is unchanged"
  message from tar 1.15.x during incremental backups.

* Fixed creation of .rsrc directories in bin/BackupPC_tarExtract
  when used with xtar on MacOS.  Reported by Samuel Bancal and
  Matthew Radey, who helped with debugging.

* Fixed bug in BackupPC_tarExtract for files >8GB in size whose
  lengths are multiples of 256.  Reported by Jamie Myers and
  Marko Tukiainen, who both helped debugging the problem.

* Fixed bug in lib/BackupPC/Xfer/RsyncFileIO.pm that caused
  incorrected deleted attributes to be set in directories
  where one of the files had an rsync phase 1 retry during
  an incremental.  Reported by Tony Nelson.

53 files changed:
ChangeLog
bin/BackupPC
bin/BackupPC_archive
bin/BackupPC_archiveHost
bin/BackupPC_compressPool
bin/BackupPC_dump
bin/BackupPC_link
bin/BackupPC_nightly
bin/BackupPC_restore
bin/BackupPC_sendEmail
bin/BackupPC_serverMesg
bin/BackupPC_tarCreate
bin/BackupPC_tarExtract
bin/BackupPC_trashClean
bin/BackupPC_zcat
bin/BackupPC_zipCreate
cgi-bin/BackupPC_Admin
conf/config.pl
lib/BackupPC/Attrib.pm
lib/BackupPC/CGI/AdminOptions.pm
lib/BackupPC/CGI/Archive.pm
lib/BackupPC/CGI/ArchiveInfo.pm
lib/BackupPC/CGI/Browse.pm
lib/BackupPC/CGI/DirHistory.pm
lib/BackupPC/CGI/EmailSummary.pm
lib/BackupPC/CGI/GeneralInfo.pm
lib/BackupPC/CGI/HostInfo.pm
lib/BackupPC/CGI/LOGlist.pm
lib/BackupPC/CGI/Lib.pm
lib/BackupPC/CGI/Queue.pm
lib/BackupPC/CGI/ReloadServer.pm
lib/BackupPC/CGI/Restore.pm
lib/BackupPC/CGI/RestoreFile.pm
lib/BackupPC/CGI/RestoreInfo.pm
lib/BackupPC/CGI/StartServer.pm
lib/BackupPC/CGI/StartStopBackup.pm
lib/BackupPC/CGI/StopServer.pm
lib/BackupPC/CGI/Summary.pm
lib/BackupPC/CGI/View.pm
lib/BackupPC/FileZIO.pm
lib/BackupPC/Lang/pt_br.pm [new file with mode: 0644]
lib/BackupPC/Lib.pm
lib/BackupPC/PoolWrite.pm
lib/BackupPC/View.pm
lib/BackupPC/Xfer/Archive.pm
lib/BackupPC/Xfer/Rsync.pm
lib/BackupPC/Xfer/RsyncDigest.pm
lib/BackupPC/Xfer/RsyncFileIO.pm
lib/BackupPC/Xfer/Smb.pm
lib/BackupPC/Xfer/Tar.pm
lib/BackupPC/Zip/FileMember.pm
makeDist
makePatch

index ad28088..e96c786 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 # Version __VERSION__, __RELEASEDATE__
 #------------------------------------------------------------------------
 
+* Fixes to lib/BackupPC/Xfer/Tar.pm for tar 1.16: allow 1
+  (ie: 256) as a successful exit status and match "Total
+  bytes read" message for restores.  First reported by
+  Torsten Sadowski and debugged by Ralf Gross and Holger
+  Parplies.
+
+* Fix to bin/BackupPC to correctly re-queue multiple restore
+  requests directed at the same host.
+
+* Added pt_br.pm language file provided by Reginaldo Ferreira.
+
+* In conf/config.pl, changed --devices to -D in $Conf{RsyncArgs}
+  and $Conf{RsyncRestoreArgs} to fix "fileListReceive failed" and
+  "Can't open .../f%2f for empty output" errors with rsync 2.6.7+.
+  Fix proposed by Justin Pessa and Vincent Ho, and confirmed by
+  Dan Niles.
+
+* Added patch from Michael (mna.news) to ignore "file is unchanged"
+  message from tar 1.15.x during incremental backups.
+
+* Fixed creation of .rsrc directories in bin/BackupPC_tarExtract
+  when used with xtar on MacOS.  Reported by Samuel Bancal and
+  Matthew Radey, who helped with debugging.
+
+* Fixed bug in BackupPC_tarExtract for files >8GB in size whose
+  lengths are multiples of 256.  Reported by Jamie Myers and
+  Marko Tukiainen, who both helped debugging the problem.
+
+* Fixed bug in lib/BackupPC/Xfer/RsyncFileIO.pm that caused
+  incorrected deleted attributes to be set in directories
+  where one of the files had an rsync phase 1 retry during
+  an incremental.  Reported by Tony Nelson.
+
+#------------------------------------------------------------------------
+# Version 2.1.2, 5 Sep 2005
+#------------------------------------------------------------------------
+
 * Fixed simple but serious bug in bin/BackupPC_tarCreate that prevented
   hardlinks being saved correctly.  Debugged by Michael (mna.news)
   with several other people.
index cd69f03..b031e65 100755 (executable)
@@ -47,7 +47,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -559,9 +559,11 @@ sub Main_TryToRun_CmdQueue
 sub Main_TryToRun_Bg_or_User_Queue
 {
     my($req, $host);
+    my(@deferUserQueue, @deferBgQueue);
+
     while ( $RunNightlyWhenIdle == 0 ) {
         local(*FH);
-        my(@args, @deferUserQueue, @deferBgQueue, $progName, $type);
+        my(@args, $progName, $type);
         my $nJobs = keys(%Jobs);
         #
         # CmdJob and trashClean don't count towards MaxBackups / MaxUserBackups
index 2fedf68..a750041 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index c499e44..8fde146 100755 (executable)
@@ -38,7 +38,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index a8caa4f..acf3604 100755 (executable)
@@ -49,7 +49,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 592fb59..1e1521b 100755 (executable)
@@ -70,7 +70,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 20fc627..658e4dd 100755 (executable)
@@ -39,7 +39,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index f7df54c..88df06c 100755 (executable)
@@ -52,7 +52,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 565563f..5f7d03c 100755 (executable)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 9a4ab7c..2e81ed4 100755 (executable)
@@ -31,7 +31,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index a83ce30..c518ffc 100755 (executable)
@@ -43,7 +43,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 34f61fa..8c9b620 100755 (executable)
@@ -51,7 +51,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index eb33006..c442f9e 100755 (executable)
@@ -27,7 +27,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -58,7 +58,7 @@ if ( $ARGV[0] !~ /^([\w\.\s-]+)$/ ) {
     exit(1);
 }
 my $client = $1;
-if ( $ARGV[1] !~ /^([\w\s\.\/\$-]+)$/ ) {
+if ( $ARGV[1] !~ /^([\w\s.\/$(){}[\]-]+)$/ ) {
     print("$0: bad share name '$ARGV[1]'\n");
     exit(1);
 }
@@ -101,7 +101,7 @@ $SIG{TTIN} = \&catch_signal;
 #                 Copyright 1998 Stephen Zander. All rights reserved.
 #
 my $tar_unpack_header
-    = 'Z100 A8 A8 A8 A12 A12 A8 A1 Z100 A6 A2 Z32 Z32 A8 A8 A155 x12';
+    = 'Z100 A8 A8 A8 a12 A12 A8 A1 Z100 A6 A2 Z32 Z32 A8 A8 A155 x12';
 my $tar_header_length = 512;
 
 my $BufSize  = 1048576;     # 1MB or 2^20
@@ -251,7 +251,7 @@ sub TarReadFileInfo
         $name     = $longName if ( defined($longName) );
         $linkname = $longLink if ( defined($longLink) );
         $name     =~ s{^\./+}{};
-        $name     =~ s{/+$}{};
+        $name     =~ s{/+\.?$}{};
         $name     =~ s{//+}{/}g;
         return {
             name       => $name,
@@ -313,7 +313,7 @@ sub TarReadFile
         #
         my($nRead);
         #print("Reading $f->{name}, $f->{size} bytes, type $f->{type}\n");
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -351,7 +351,7 @@ sub TarReadFile
        # a plain file.
         #
         $f->{size} = length($f->{linkname});
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -369,7 +369,7 @@ sub TarReadFile
         # contents.
         #
         $f->{size} = length($f->{linkname});
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -393,7 +393,7 @@ sub TarReadFile
         } else {
             $data = "$f->{devmajor},$f->{devminor}";
         }
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          length($data), $Compress);
@@ -487,17 +487,21 @@ sub logFileAction
 #
 sub pathCreate
 {
-    my($dir, $fullPath, $file, $f) = @_;
+    my($dir, $fullPath, $f) = @_;
 
     #
     # Get parent directory of each of $dir and $fullPath
     #
-    $dir      =~ s{/[^/]*$}{};
+    # print("pathCreate: dir = $dir, fullPath = $fullPath\n");
+    $dir      =~ s{/([^/]*)$}{};
+    my $file  = $bpc->fileNameUnmangle($1);
     $fullPath =~ s{/[^/]*$}{};
-    return if ( -d $fullPath );
+    return if ( -d $fullPath || $file eq "" );
+    unlink($fullPath) if ( -e $fullPath );
     mkpath($fullPath, 0, 0777);
     $Attrib{$dir} = BackupPC::Attrib->new({ compress => $Compress })
                                 if ( !defined($Attrib{$dir}) );
+    # print("pathCreate: adding file = $file to dir = $dir\n");
     $Attrib{$dir}->set($file, {
                             type  => BPC_FTYPE_DIR,
                             mode  => 0755,
index 2380fb6..085a4c3 100755 (executable)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 141e2a6..943379c 100755 (executable)
@@ -32,7 +32,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 88a5742..fb89310 100755 (executable)
@@ -51,7 +51,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index e1df31e..8dbcadf 100755 (executable)
@@ -39,7 +39,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index aafaa8c..c4e33a5 100644 (file)
@@ -1052,7 +1052,7 @@ $Conf{RsyncArgs} = [
             '--perms',
             '--owner',
             '--group',
-            '--devices',
+            '-D',
             '--links',
             '--times',
             '--block-size=2048',
@@ -1086,7 +1086,7 @@ $Conf{RsyncRestoreArgs} = [
            '--perms',
            '--owner',
            '--group',
-           '--devices',
+           '-D',
            '--links',
            '--times',
            '--block-size=2048',
index a5bbd6f..7002677 100644 (file)
@@ -30,7 +30,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 756d0e5..163ef3c 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 0ecd751..da1cf35 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 6db9153..98d2a0a 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 942df16..5b3aff1 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 0614bcb..afb9c52 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index dd7d9f5..768b8d6 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index dbcfa02..b203ca5 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 4edd3d9..e28bb72 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 6aa7355..88791e4 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 3345d99..b22a657 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index e0826ea..b65e345 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 89e3959..6d115d9 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 1beb089..a2941c2 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 9e347f8..a9ac661 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 5d315de..c09d3b5 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 225b3e8..ead153e 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index b1031ef..86202e4 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 22b8e8f..d4d1088 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index dfafa06..b4fc8d9 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index ce09259..eabac58 100644 (file)
@@ -28,7 +28,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -168,7 +168,7 @@ sub action
                    last if ( $s eq "" );
                    $s =~ s/[\n\r]+//g;
                    $s = ${EscHTML($s)};
-                   $s =~ s/\b([\w-]+)\b/defined($Hosts->{$1})
+                   $s =~ s/\b([\w.-]+)\b/defined($Hosts->{$1})
                                            ? ${HostLink($1)} : $1/eg;
                    $c .= $s . "\n";
                }
@@ -194,7 +194,7 @@ sub action
                    $s =~ s[(\$Conf\{.*?\})][
                        my $c = $1;
                        my $s = lc($c);
-                       $s =~ s{(\W)}{sprintf("%%%02x", ord($1) )}gxe;
+                       $s =~ s{(\W)}{_}g;
                        "<a href=\"?action=view&type=docs#item_$s\"><tt>$c</tt></a>"
                    ]eg;
                    $c .= $s . "\n";
index 9218faa..3f37924 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
diff --git a/lib/BackupPC/Lang/pt_br.pm b/lib/BackupPC/Lang/pt_br.pm
new file mode 100644 (file)
index 0000000..8dc58e5
--- /dev/null
@@ -0,0 +1,1312 @@
+#!/usr/bin/perl
+#
+# By Reginaldo Ferreira <reginaldo@lepper.com.br> (23.07.2004 for V2.1.10)
+#
+
+#my %lang;
+
+#use strict;
+
+# --------------------------------
+
+$Lang{Start_Archive} = "Iniciar backup";
+$Lang{Stop_Dequeue_Archive} = "Parar/anular backup";
+$Lang{Start_Full_Backup} = "Iniciar Backup Completa";
+$Lang{Start_Incr_Backup} = "Iniciar Backup Incremental";
+$Lang{Stop_Dequeue_Backup} = "Parar/Anular Backup";
+$Lang{Restore} = "Restaurar";
+
+$Lang{Type_full} = "completo";
+$Lang{Type_incr} = "incremental";
+
+# -----
+
+$Lang{Only_privileged_users_can_view_admin_options} = "Somente superusuarios podem ver as opções de administração.";
+$Lang{H_Admin_Options} = "Servidor BackupPC: Opções de administração";
+$Lang{Admin_Options} = "Opções de administração";
+$Lang{Admin_Options_Page} = <<EOF;
+\${h1(qq{$Lang{Admin_Options}})}
+<br>
+\${h2("Controle do Servidor")}
+<form action="\$MyURL" method="get">
+<table class="tableStnd">
+<!--<tr><td>Parar o servidor:<td><input type="submit" name="action" value="Stop">-->
+  <tr><td>Atualizar configurações do servidor:<td><input type="submit" name="action" value="Reload">
+</table>
+</form>
+<!--
+\${h2("Server Configuration")}
+<ul> 
+  <li><i>Espaço para outras opções... e.j.,</i>
+  <li>Editar configurações do servidor
+</ul>
+-->
+EOF
+$Lang{Unable_to_connect_to_BackupPC_server} = "Impossível conectar ao servidor BackupPC",
+            "Este script CGI (\$MyURL) não pode conectar-se ao servidor BackupPC"
+          . " em \$Conf{ServerHost} porta \$Conf{ServerPort}.  O erro"
+          . " foi: \$err.",
+            "Talvez o servidor BackupPC não está ativo ou existe um "
+          . " erro de configuração. Por favor informe seu administrador de sistemas.";
+$Lang{Admin_Start_Server} = <<EOF;
+\${h1(qq{$Lang{Unable_to_connect_to_BackupPC_server}})}
+<form action="\$MyURL" method="get">
+O servidor BackupPC em <tt>\$Conf{ServerHost}</tt> port <tt>\$Conf{ServerPort}</tt>
+não está iniciando (pode ter parado ou não ainda não iniciado).<br>
+Deseja inicia-lo agora?
+<input type="hidden" name="action" value="startServer">
+<input type="submit" value="Start Server" name="ignore">
+</form>
+EOF
+
+# -----
+
+$Lang{H_BackupPC_Server_Status} = "Estado do Servidor BackupPC";
+
+$Lang{BackupPC_Server_Status_General_Info}= <<EOF;
+\${h2(\"Informações Gerais do servidor\")}
+
+<ul>
+<li> O PID do servidor é \$Info{pid}, no host \$Conf{ServerHost},
+     versão \$Info{Version}, iniciado em \$serverStartTime.
+<li> Esta informação de estado foi gerada em \$now.
+<li> A última configuração foi carregada às \$configLoadTime
+<li> A fila de PCs se ativará novamente em \$nextWakeupTime.
+<li> Informações adicionais:
+    <ul>
+        <li>\$numBgQueue solicitações de backup pendentes desde a última ativação programada,
+        <li>\$numUserQueue solicitações de backup de usuarios,
+        <li>\$numCmdQueue solicitações de comandos pendentes,
+        \$poolInfo
+        <li>O sistema de arquivos estava recentemente em \$Info{DUlastValue}%
+            (\$DUlastTime), o máximo de hoje é \$Info{DUDailyMax}% (\$DUmaxTime)
+            e o máximo de ontem foi \$Info{DUDailyMaxPrev}%.
+    </ul>
+</ul>
+EOF
+
+$Lang{BackupPC_Server_Status} = <<EOF;
+\${h1(qq{$Lang{H_BackupPC_Server_Status}})}
+
+<p>
+\$generalInfo
+
+\${h2("Trabalhos em Execução")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3">
+<tr class="tableheader"><td> Host </td>
+    <td> Tipo </td>
+    <td> Usuario </td>
+    <td> Hora de Inicio </td>
+    <td> Comando </td>
+    <td align="center"> PID </td>
+    <td align="center"> Transfer. PID </td>
+    </tr>
+\$jobStr
+</table>
+<p>
+
+\${h2("Falhas que Precisam de Atenção")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3">
+<tr class="tableheader"><td align="center"> Host </td>
+    <td align="center"> Tipo </td>
+    <td align="center"> Usuario </td>
+    <td align="center"> Ultima Tentativa </td>
+    <td align="center"> Detalhes </td>
+    <td align="center"> Hora do erro </td>
+    <td> Último erro (ping não incluido) </td></tr>
+\$statusStr
+</table>
+EOF
+
+# --------------------------------
+$Lang{BackupPC__Server_Summary} = "BackupPC: Resumo do Servidor";
+$Lang{BackupPC__Archive} = "BackupPC: Archive";
+$Lang{BackupPC_Summary}=<<EOF;
+
+\${h1(qq{$Lang{BackupPC__Server_Summary}})}
+<p>
+Este status foi generado em \$now.
+</p>
+
+\${h2("Hosts com Backups Completos")}
+<p>
+Existem \$hostCntGood hosts com backup, de um total de :
+<ul>
+<li> \$fullTot backups com tamanho total de \${fullSizeTot} GB
+     (antes de agrupar e comprimir),
+<li> \$incrTot backups incrementais com tamanho total de \${incrSizeTot} GB
+     (antes de agrupar e comprimir).
+</ul>
+</p>
+<table class="tableStnd" border cellpadding="3" cellspacing="1">
+<tr class="tableheader"><td> Host </td>
+    <td align="center"> Usuario </td>
+    <td align="center"> #Completo </td>
+    <td align="center"> Completo Antig./Dias </td>
+    <td align="center"> Completo Tamanho/GB </td>
+    <td align="center"> Velocidade MB/sec </td>
+    <td align="center"> #Incrementais </td>
+    <td align="center"> Incrementais Antig/Dias </td>
+    <td align="center"> Estado </td>
+    <td align="center"> Última Tentativa </td></tr>
+\$strGood
+</table>
+<br><br>
+\${h2("Hosts Sem Backups")}
+<p>
+Existem \$hostCntNone hosts sem backups.
+<p>
+<table class="tableStnd" border cellpadding="3" cellspacing="1">
+<tr class="tableheader"><td> Host </td>
+    <td align="center"> Usuario </td>
+    <td align="center"> #Completo </td>
+    <td align="center"> Completo Antig./Dias </td>
+    <td align="center"> Completo Tamanho/GB </td>
+    <td align="center"> Velocidade MB/sec </td>
+    <td align="center"> #Incrementais </td>
+    <td align="center"> Incrementais Antig/Dias </td>
+    <td align="center"> Estado </td>
+    <td align="center"> Última tentativa </td></tr>
+\$strNone
+</table>
+EOF
+
+$Lang{BackupPC_Archive} = <<EOF;
+\${h1(qq{$Lang{BackupPC__Archive}})}
+<script language="javascript" type="text/javascript">
+<!--
+
+    function checkAll(location)
+    {
+      for (var i=0;i<document.form1.elements.length;i++)
+      {
+        var e = document.form1.elements[i];
+        if ((e.checked || !e.checked) && e.name != \'all\') {
+            if (eval("document.form1."+location+".checked")) {
+                e.checked = true;
+            } else {
+                e.checked = false;
+            }
+        }
+      }
+    }
+
+    function toggleThis(checkbox)
+    {
+       var cb = eval("document.form1."+checkbox);
+       cb.checked = !cb.checked;
+    }
+
+//-->
+</script>
+
+Hay \$hostCntGood hosts que possuem backup com tamanho total de \${fullSizeTot}GB
+<p>
+<form name="form1" method="post" action="\$MyURL">
+<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
+<input type="hidden" name="type" value="1">
+<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
+<input type="hidden" name="action" value="Archive">
+<table class="tableStnd" border cellpadding="3" cellspacing="1">
+<tr class="tableheader"><td align=center> Host</td>
+    <td align="center"> Usuário </td>
+    <td align="center"> Tamanho Backup </td>
+\$strGood
+\$checkAllHosts
+</table>
+</form>
+<p>
+
+EOF
+
+$Lang{BackupPC_Archive2} = <<EOF;
+\${h1(qq{$Lang{BackupPC__Archive}})}
+Sobre o Backup dos seguintes Hosts
+<ul>
+\$HostListStr
+</ul>
+<form action="\$MyURL" method="post">
+\$hiddenStr
+<input type="hidden" name="action" value="Archive">
+<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
+<input type="hidden" name="type" value="2">
+<input type="hidden" value="0" name="archive_type">
+<table class="tableStnd" border cellspacing="1" cellpadding="3">
+\$paramStr
+<tr>
+    <td colspan=2><input type="submit" value="Iniciar Archive" name=""></td>
+</tr>
+</form>
+</table>
+EOF
+
+$Lang{BackupPC_Archive2_location} = <<EOF;
+<tr>
+    <td>Archive Localização/Dispositivo</td>
+    <td><input type="text" value="\$ArchiveDest" name="archive_device"></td>
+</tr>
+EOF
+
+$Lang{BackupPC_Archive2_compression} = <<EOF;
+<tr>
+    <td>Compression</td>
+    <td>
+    <input type="radio" value="0" name="compression" \$ArchiveCompNone>None<br>
+    <input type="radio" value="1" name="compression" \$ArchiveCompGzip>gzip<br>
+    <input type="radio" value="2" name="compression" \$ArchiveCompBzip2>bzip2
+    </td>
+</tr>
+EOF
+
+$Lang{BackupPC_Archive2_parity} = <<EOF;
+<tr>
+    <td>Porcentagem de dados de paridade (0 = desabilitado, 5 = normal)</td>
+    <td><input type="numeric" value="\$ArchivePar" name="par"></td>
+</tr>
+EOF
+
+$Lang{BackupPC_Archive2_split} = <<EOF;
+<tr>
+    <td>Dividir resultado em</td>
+    <td><input type="numeric" value="\$ArchiveSplit" name="splitsize">Megabytes</td>
+</tr>
+EOF
+
+# -----------------------------------
+$Lang{Pool_Stat} = <<EOF;
+        <li>O pool de \${poolSize}GB compreende \$info->{"\${name}FileCnt"} arquivos
+            e \$info->{"\${name}DirCnt"} diretórios (as of \$poolTime),
+        <li>O processamento do pool é de \$info->{"\${name}FileCntRep"} arquivos
+            repetidos cuja cadeia maior é \$info->{"\${name}FileRepMax"},
+        <li>O processo de limpeza noturna eliminou \$info->{"\${name}FileCntRm"} arquivos de
+             \${poolRmSize}GB (around \$poolTime),
+EOF
+
+# --------------------------------
+$Lang{BackupPC__Backup_Requested_on__host} = "BackupPC: Solicitação de Backup por \$host";
+# --------------------------------
+$Lang{REPLY_FROM_SERVER} = <<EOF;
+\${h1(\$str)}
+<p>
+A resposta do servidor foi: \$reply
+<p>
+Voltar a <a href="\$MyURL?host=\$host">\$host home page</a>.
+EOF
+# --------------------------------
+$Lang{BackupPC__Start_Backup_Confirm_on__host} = "BackupPC: Confirme inicio do backup em \$host";
+# --------------------------------
+$Lang{Are_you_sure_start} = <<EOF;
+\${h1("Tem certeza?")}
+<p>
+Iniciando Backup \$type em \$host.
+
+<form action="\$MyURL" method="get">
+<input type="hidden" name="host" value="\$host">
+<input type="hidden" name="hostIP" value="\$ipAddr">
+<input type="hidden" name="doit" value="1">
+Tem certeza desta ação?
+<input type="submit" value="\$In{action}" name="action">
+<input type="submit" value="No" name="">
+</form>
+EOF
+# --------------------------------
+$Lang{BackupPC__Stop_Backup_Confirm_on__host} = "BackupPC: Confirmação de Parada do Backup \$host";
+# --------------------------------
+$Lang{Are_you_sure_stop} = <<EOF;
+
+\${h1("Tem certeza?")}
+
+<p>
+Você está certo de parar/sair da fila de backup em \$host;
+
+<form action="\$MyURL" method="get">
+<input type="hidden" name="host" value="\$host">
+<input type="hidden" name="doit" value="1">
+Assim mesmo, por favor não impessa outro backup durante
+<input type="text" name="backoff" size="10" value="\$backoff"> horas.
+<p>
+Tem certeza de que quer fazer isto?
+<input type="submit" value="\$In{action}" name="action">
+<input type="submit" value="No" name="">
+</form>
+
+EOF
+# --------------------------------
+$Lang{Only_privileged_users_can_view_queues_} = "Somente administradores podem ver as filas.";
+# --------------------------------
+$Lang{Only_privileged_users_can_archive} = "Somente administradores podem arquivar.";
+# --------------------------------
+$Lang{BackupPC__Queue_Summary} = "BackupPC: Resumo da Fila de Backup";
+# --------------------------------
+$Lang{Backup_Queue_Summary} = <<EOF;
+\${h1("Resumo da Fila de Backup")}
+<br><br>
+\${h2("Resumo da Fila de Usuários")}
+<p>
+As seguintes solicitações de usuários estão atualmente em fila:
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td> Host </td>
+    <td> Hora Sol. </td>
+    <td> Usuário </td></tr>
+\$strUser
+</table>
+<br><br>
+
+\${h2("Resumo da Fila em Segundo Plano")}
+<p>
+As seguintes solicitações em segundo plano estão atualmente em fila:
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td> Host </td>
+    <td> Hora Sol. </td>
+    <td> Usuário </td></tr>
+\$strBg
+</table>
+<br><br>
+\${h2("Resumo da Fila de Comandos")}
+<p>
+Os seguintes comandos estão atualmente em fila:
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td> Host </td>
+    <td> Hora Sol. </td>
+    <td> Usuário </td>
+    <td> Comando </td></tr>
+\$strCmd
+</table>
+EOF
+
+# --------------------------------
+$Lang{Backup_PC__Log_File__file} = "BackupPC: LOG de Registro \$file";
+$Lang{Log_File__file__comment} = <<EOF;
+\${h1("Log File \$file \$comment")}
+<p>
+EOF
+# --------------------------------
+$Lang{Contents_of_log_file} = <<EOF;
+Conteúdo do log de registro <tt>\$file</tt>, modificado \$mtimeStr \$comment
+EOF
+
+# --------------------------------
+$Lang{skipped__skipped_lines} = "[ saltadas \$skipped linhas ]\n";
+# --------------------------------
+$Lang{_pre___Can_t_open_log_file__file} = "<pre>\nNão pode-se abrir o LOG de registro \$file\n";
+
+# --------------------------------
+$Lang{BackupPC__Log_File_History} = "BackupPC: Histórico dos Logs de Registro";
+$Lang{Log_File_History__hdr} = <<EOF;
+\${h1("Histórico do Log de Registro \$hdr")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td align="center"> File </td>
+    <td align="center"> Tamanho </td>
+    <td align="center"> Hora Modificação </td></tr>
+\$str
+</table>
+EOF
+
+# -------------------------------
+$Lang{Recent_Email_Summary} = <<EOF;
+\${h1("Resumo de Emails Recentes (Ordem cronológica invertida)")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td align="center"> Destinatário </td>
+    <td align="center"> Host </td>
+    <td align="center"> Hora </td>
+    <td align="center"> Assunto </td></tr>
+\$str
+</table>
+EOF
+
+# ------------------------------
+$Lang{Browse_backup__num_for__host} = "BackupPC: Explorar Backup \$num de \$host";
+
+# ------------------------------
+$Lang{Restore_Options_for__host} = "BackupPC: Opções de restauração para \$host";
+$Lang{Restore_Options_for__host2} = <<EOF;
+\${h1("Opções de restauração para \$host")}
+<p>
+Foi selecionado os seguintes arquivos/diretórios
+da unidade \$share, cópia número #\$num:
+<ul>
+\$fileListStr
+</ul>
+</p><p>
+Existem três opções para restaurar estes arquivos/diretórios.
+Por favor, selecione uma das seguintes opções.
+</p>
+\${h2("Opção 1: Restauração Direta")}
+<p>
+EOF
+
+$Lang{Restore_Options_for__host_Option1} = <<EOF;
+É possível iniciar um processo que restaurará estes arquivos diretamente em
+\$host.
+</p><p>
+<b>Atenção!:</b> Qualquer arquivo existente com o mesmo nome que o que está
+selecionado será sobrescrito!
+</p>
+<form action="\$MyURL" method="post" name="direct">
+<input type="hidden" name="host" value="\${EscHTML(\$host)}">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="type" value="3">
+\$hiddenStr
+<input type="hidden" value="\$In{action}" name="action">
+<table border="0">
+<tr>
+    <td>Restaurar os arquivos no host</td>
+    <td><!--<input type="text" size="40" value="\${EscHTML(\$host)}"
+         name="hostDest">-->
+         <select name="hostDest" onChange="document.direct.shareDest.value=''">
+         \$hostDestSel
+         </select>
+         <script language="Javascript">
+         function myOpen(URL) {
+                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>
+</tr><tr>
+    <td>Restaurar os arquivos na unidade</td>
+    <td><input type="text" size="40" value="\${EscHTML(\$share)}"
+        name="shareDest"></td>
+</tr><tr>
+    <td>Restaurar os arquivos abaixo no diretório<br>(relativo a unidade)</td>
+    <td valign="top"><input type="text" size="40" maxlength="256"
+       value="\${EscHTML(\$pathHdr)}" name="pathHdr"></td>
+</tr><tr>
+    <td><input type="submit" value="Iniciar Restauração" name=""></td>
+</table>
+</form>
+EOF
+
+$Lang{Restore_Options_for__host_Option1_disabled} = <<EOF;
+Se a restauração direta foi desabilitada para o host \${EscHTML(\$hostDest)}.
+Por favor selecione uma das outras opções de restauração.
+EOF
+
+# ------------------------------
+$Lang{Option_2__Download_Zip_archive} = <<EOF;
+<p>
+\${h2("Opção 2: Criar arquivo Zip")}
+<p>
+Pode-se criar um arquivo comprimido (.zip) contendo todos os arquivos e diretórios que
+foram selecionados.  Depois pode-se utilizar uma aplicação local, como WinZip,
+para ver ou extrair os arquivos.
+</p><p>
+<b>Atenção!:</b> Dependendo de quais arquivos/pastas tenham sido selecionados,
+este arquivo pode ser muito grande. Poderia demorar muitos minutos para
+criar e transferir o arquivo. Também necessitará suficiente espaçio em disco
+local para armazená-lo.
+</p>
+<form action="\$MyURL" method="post">
+<input type="hidden" name="host" value="\${EscHTML(\$host)}">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="type" value="2">
+\$hiddenStr
+<input type="hidden" value="\$In{action}" name="action">
+<input type="checkbox" value="1" name="relative" checked> Fazer arquivo relativo
+a \${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
+(caso contrário o arquivo conterá os caminhos completos).
+<br>
+Compressão (0=desativada, 1=rápida,...,9=máxima)
+<input type="text" size="6" value="5" name="compressLevel">
+<br>
+<input type="submit" value="Download Zip File" name="">
+</form>
+EOF
+
+# ------------------------------
+
+$Lang{Option_2__Download_Zip_archive2} = <<EOF;
+<p>
+\${h2("Opção 2: Criar arquivo Zip")}
+<p>
+O programa Archive::Zip não está instalado, de modo que nã poderá criar um
+arquivo comprimido zip.
+Por favor, solicite ao seu administrador de sistemas que instale Archive::Zip de
+<a href="http://www.cpan.org">www.cpan.org</a>.
+</p>
+EOF
+
+
+# ------------------------------
+$Lang{Option_3__Download_Zip_archive} = <<EOF;
+\${h2("Opción 3: Criar archivo Tar")}
+<p>
+Pode-se criar um arquivo comprimido (.Tar) contendo todos os arquivos e
+diretórios que foram selecionados. Após pode-se utilizar uma aplicação
+local, como Tar ou WinZip, para ver ou extrair os arquivos gerados.
+</p><p>
+<b>Atenção!:</b> Dependendo de quais arquivos/pastas foram selecionados,
+este arquivo pode ser muito grande. Poderia levar muitos minutos para
+criar e transferir o arquivo. Também necessitará suficiente espaço no disco
+local para armazená-lo.
+</p>
+<form action="\$MyURL" method="post">
+<input type="hidden" name="host" value="\${EscHTML(\$host)}">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="type" value="1">
+\$hiddenStr
+<input type="hidden" value="\$In{action}" name="action">
+<input type="checkbox" value="1" name="relative" checked> Criar um arquivo
+relativo a \${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
+(caso contrário o arquivo conterá os caminhos completos).
+<br>
+<input type="submit" value="Download Tar File" name="">
+</form>
+EOF
+
+
+# ------------------------------
+$Lang{Restore_Confirm_on__host} = "BackupPC: Confirme restauração em \$host";
+
+$Lang{Are_you_sure} = <<EOF;
+\${h1("Tem certeza?")}
+<p>
+Está prestes a començar uma restauração diretamente na máquina \$In{hostDest}.
+Os seguintes arquivos serão restaurados na unidade \$In{shareDest}, a partir
+do Backup número \$num:
+<p>
+<table border>
+<tr><td>Arquivo/Dir Original </td><td>Será restaurado em</td></tr>
+\$fileListStr
+</table>
+
+<form action="\$MyURL" method="post">
+<input type="hidden" name="host" value="\${EscHTML(\$host)}">
+<input type="hidden" name="hostDest" value="\${EscHTML(\$In{hostDest})}">
+<input type="hidden" name="shareDest" value="\${EscHTML(\$In{shareDest})}">
+<input type="hidden" name="pathHdr" value="\${EscHTML(\$In{pathHdr})}">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="type" value="4">
+\$hiddenStr
+Tem certeza?
+<input type="submit" value="\$In{action}" name="action">
+<input type="submit" value="No" name="">
+</form>
+EOF
+
+
+# --------------------------
+$Lang{Restore_Requested_on__hostDest} = "BackupPC: Restauração solicitada em \$hostDest";
+$Lang{Reply_from_server_was___reply} = <<EOF;
+\${h1(\$str)}
+<p>
+A resposta do servidor foi: \$reply
+<p>
+voltar a <a href="\$MyURL?host=\$hostDest">\$hostDest home page</a>.
+EOF
+
+$Lang{BackupPC_Archive_Reply_from_server} = <<EOF;
+\${h1(\$str)}
+<p>
+A resposta do servidor foi: \$reply
+EOF
+
+# -------------------------
+$Lang{Host__host_Backup_Summary} = "BackupPC: Host \$host Resumo do Backup";
+
+$Lang{Host__host_Backup_Summary2} = <<EOF;
+\${h1("Host \$host Resumo do Backup")}
+<p>
+\$warnStr
+<ul>
+\$statusStr
+</ul>
+</p>
+\${h2("Ações do Usuário")}
+<p>
+<form action="\$MyURL" method="get">
+<input type="hidden" name="host" value="\$host">
+\$startIncrStr
+<input type="submit" value="$Lang{Start_Full_Backup}" name="action">
+<input type="submit" value="$Lang{Stop_Dequeue_Backup}" name="action">
+</form>
+</p>
+\${h2("Resumo do Backup")}
+<p>
+Clique no número do Backup para revisar e restaurar arquivos.
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3">
+<tr class="tableheader"><td align="center"> Cópia Nº </td>
+    <td align="center"> Tipo </td>
+    <td align="center"> Completo </td>
+    <td align="center"> Data Início </td>
+    <td align="center"> Duração/min </td>
+    <td align="center"> Idade/dias </td>
+    <td align="center"> Rota da Cópia no Servidor </td>
+</tr>
+\$str
+</table>
+<p>
+
+\$restoreStr
+</p>
+<br><br>
+\${h2("Resumo dos Erros de Transferência")}
+<br><br>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td align="center"> Copia Nº </td>
+    <td align="center"> Tipo </td>
+    <td align="center"> Ver </td>
+    <td align="center"> Nº Xfer errs </td>
+    <td align="center"> Nº erros arquivos </td>
+    <td align="center"> Nº erros unidades </td>
+    <td align="center"> Nº erros tar </td>
+</tr>
+\$errStr
+</table>
+<br><br>
+
+\${h2("Resumo do Total/Tamanho dos Arquivos Reutilizados")}
+<p>
+Os arquivos existentes são aqueles que já estão no lote; os novos são
+aqueles que serão adicionados ao lote.
+Os arquivos vazios e os erros de SMB não contam nos valores de reutilizados
+nem nos de novos.
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td colspan="2" bgcolor="#ffffff"></td>
+    <td align="center" colspan="3"> Totais </td>
+    <td align="center" colspan="2"> Arquivos Existentes </td>
+    <td align="center" colspan="2"> Arquivos Novos </td>
+</tr>
+<tr class="tableheader">
+    <td align="center"> Cópia Nº </td>
+    <td align="center"> Tipo </td>
+    <td align="center"> Nº Arquivos </td>
+    <td align="center"> Tamanho/MB </td>
+    <td align="center"> MB/seg </td>
+    <td align="center"> Nº Arquivos </td>
+    <td align="center"> Tamanho/MB </td>
+    <td align="center"> Nº Arquivos </td>
+    <td align="center"> Tamanho/MB </td>
+</tr>
+\$sizeStr
+</table>
+<br><br>
+
+\${h2("Resumo da Compressão")}
+<p>
+Performance de compresão para os arquivos já existentes no lote e nos
+arquivos novos comprimidos.
+</p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td colspan="3" bgcolor="#ffffff"></td>
+    <td align="center" colspan="3"> Arquivos Existentes </td>
+    <td align="center" colspan="3"> Arquivos Novos </td>
+</tr>
+<tr class="tableheader"><td align="center"> Cópia Nº </td>
+    <td align="center"> Tipo </td>
+    <td align="center"> Nível Compr </td>
+    <td align="center"> Tamanho/MB </td>
+    <td align="center"> Compr/MB </td>
+    <td align="center"> Compr </td>
+    <td align="center"> Tamanho/MB </td>
+    <td align="center"> Compr/MB </td>
+    <td align="center"> Compr </td>
+</tr>
+\$compStr
+</table>
+<br><br>
+EOF
+
+$Lang{Host__host_Archive_Summary} = "BackupPC: Host \$host Archive Summary";
+$Lang{Host__host_Archive_Summary2} = <<EOF;
+\${h1("Host Archive Summary \$host")}
+<p>
+\$warnStr
+<ul>
+\$statusStr
+</ul>
+
+\${h2("Ações do usuário")}
+<p>
+<form action="\$MyURL" method="get">
+<input type="hidden" name="archivehost" value="\$host">
+<input type="hidden" name="host" value="\$host">
+<input type="submit" value="$Lang{Start_Archive}" name="action">
+<input type="submit" value="$Lang{Stop_Dequeue_Archive}" name="action">
+</form>
+
+\$ArchiveStr
+
+EOF
+
+# -------------------------
+$Lang{Error} = "BackupPC: Erro";
+$Lang{Error____head} = <<EOF;
+\${h1("Erro: \$head")}
+<p>\$mesg</p>
+EOF
+
+# -------------------------
+$Lang{NavSectionTitle_} = "Servidor";
+
+# -------------------------
+$Lang{Backup_browse_for__host} = <<EOF;
+\${h1("Revisar Backup do \$host")}
+
+<script language="javascript" type="text/javascript">
+<!--
+
+    function checkAll(location)
+    {
+      for (var i=0;i<document.form1.elements.length;i++)
+      {
+        var e = document.form1.elements[i];
+        if ((e.checked || !e.checked) && e.name != \'all\') {
+            if (eval("document.form1."+location+".checked")) {
+               e.checked = true;
+            } else {
+               e.checked = false;
+            }
+        }
+      }
+    }
+    
+    function toggleThis(checkbox)
+    {
+       var cb = eval("document.form1."+checkbox);
+       cb.checked = !cb.checked;       
+    }
+
+//-->
+</script>
+
+<form name="form0" method="post" action="\$MyURL">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="host" value="\$host">
+<input type="hidden" name="share" value="\${EscHTML(\$share)}">
+<input type="hidden" name="action" value="browse">
+<ul>
+<li> Revisando o Backup Nº\$num, que iniciou às \$backupTime
+        (faz \$backupAge dias),
+\$filledBackup
+<li> Indique o diretório: <input type="text" name="dir" size="50" maxlength="4096" value="\${EscHTML(\$dir)}"> <input type="submit" value="\$Lang->{Go}" name="Submit">
+<li> Clique em um dos diretórios abaixo para revisar seus conteúdos,
+<li> Clique em um arquivo para restaurá-lo,
+<li> Ver o Backup <a href="\$MyURL?action=dirHistory&host=\${EscURI(\$host)}&share=\$shareURI&dir=\$pathURI">history</a> do diretório atual.
+</ul>
+</form>
+
+\${h2("Conteúdo do \${EscHTML(\$dirDisplay)}")}
+<form name="form1" method="post" action="\$MyURL">
+<input type="hidden" name="num" value="\$num">
+<input type="hidden" name="host" value="\$host">
+<input type="hidden" name="share" value="\${EscHTML(\$share)}">
+<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
+<input type="hidden" name="action" value="$Lang{Restore}">
+<br>
+<table width="100%">
+<tr><td valign="top">
+    <br><table align="center" border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff">
+    \$dirStr
+    </table>
+</td><td width="3%">
+</td><td valign="top">
+    <br>
+        <table border="0" width="100%" align="left" cellpadding="3" cellspacing="1">
+        \$fileHeader
+        \$topCheckAll
+        \$fileStr
+        \$checkAll
+        </table>
+    </td></tr></table>
+<br>
+<!--
+This is now in the checkAll row
+<input type="submit" name="Submit" value="Restaurar arquivos selecionados">
+-->
+</form>
+EOF
+
+# ------------------------------
+$Lang{DirHistory_backup_for__host} = "BackupPC: Histórico do Backup do diretório em \$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}  = "dir";
+$Lang{DirHistory_fileLink} = "v";
+
+$Lang{DirHistory_for__host} = <<EOF;
+\${h1("Histórico do backup do diretório em \$host")}
+<p>
+Este quadro mostra cada versão única disponível nos diversos backups:
+<ul>
+<li> Clique no número do backup para voltar ao explorador de backups,
+<li> Clique no atalho do diretório (\$Lang->{DirHistory_dirLink}) para navegar
+     por esse diretório,
+<li> Clique no atalho da versão do arquivo (\$Lang->{DirHistory_fileLink}0,
+     \$Lang->{DirHistory_fileLink}1, ...) para baixar esse arquivo,
+<li> Os arquivos com conteúdos diferentes entre cópias distintas de backup tem o mesmo
+     número de verssão,
+<li> Os arquivos ou diretórios inexistentes em um determinado backup tem uma 
+     caixa vazia.
+<li> Os arquivos mostrados com a mesma versão podem ter diferentes atributos.
+     Selecione o número do backup para ver os atributos do arquivo.
+</ul>
+
+\${h2("Histórico de \${EscHTML(\$dirDisplay)}")}
+
+<br>
+<table cellspacing="2" cellpadding="3">
+<tr class="fviewheader"><td>Backup numero</td>\$backupNumStr</tr>
+<tr class="fviewheader"><td>Backup time</td>\$backupTimeStr</tr>
+\$fileStr
+</table>
+EOF
+
+# ------------------------------
+$Lang{Restore___num_details_for__host} = "BackupPC: Detalhes da restauração Nº\$num de \$host";
+
+$Lang{Restore___num_details_for__host2} = <<EOF;
+\${h1("Detalhes da restauração Nº\$num de \$host")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="90%">
+<tr><td class="tableheader"> Número </td><td class="border"> \$Restores[\$i]{num} </td></tr>
+<tr><td class="tableheader"> Solicitado por </td><td class="border"> \$RestoreReq{user} </td></tr>
+<tr><td class="tableheader"> Hora da Solicitação </td><td class="border"> \$reqTime </td></tr>
+<tr><td class="tableheader"> Resultado </td><td class="border"> \$Restores[\$i]{result} </td></tr>
+<tr><td class="tableheader"> Mensagem de Erro </td><td class="border"> \$Restores[\$i]{errorMsg} </td></tr>
+<tr><td class="tableheader"> Host Origem </td><td class="border"> \$RestoreReq{hostSrc} </td></tr>
+<tr><td class="tableheader"> Nº cópia origem </td><td class="border"> \$RestoreReq{num} </td></tr>
+<tr><td class="tableheader"> Unidade origem </td><td class="border"> \$RestoreReq{shareSrc} </td></tr>
+<tr><td class="tableheader"> Host destino </td><td class="border"> \$RestoreReq{hostDest} </td></tr>
+<tr><td class="tableheader"> Unidade destino </td><td class="border"> \$RestoreReq{shareDest} </td></tr>
+<tr><td class="tableheader"> Hora início </td><td class="border"> \$startTime </td></tr>
+<tr><td class="tableheader"> Duração </td><td class="border"> \$duration min </td></tr>
+<tr><td class="tableheader"> Número de arquivos </td><td class="border"> \$Restores[\$i]{nFiles} </td></tr>
+<tr><td class="tableheader"> Tamanho total </td><td class="border"> \${MB} MB </td></tr>
+<tr><td class="tableheader"> Taxa de transferência </td><td class="border"> \$MBperSec MB/sec </td></tr>
+<tr><td class="tableheader"> Erros de criação Tar </td><td class="border"> \$Restores[\$i]{tarCreateErrs} </td></tr>
+<tr><td class="tableheader"> Erros de transferência </td><td class="border"> \$Restores[\$i]{xferErrs} </td></tr>
+<tr><td class="tableheader"> Arquivo registro de transferência </td><td class="border">
+<a href="\$MyURL?action=view&type=RestoreLOG&num=\$Restores[\$i]{num}&host=\$host">View</a>,
+<a href="\$MyURL?action=view&type=RestoreErr&num=\$Restores[\$i]{num}&host=\$host">Errors</a>
+</tr></tr>
+</table>
+</p>
+\${h1("Lista de Arquivos/Diretórios")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="100%">
+<tr class="tableheader"><td>Dir/arquivo original</td><td>Restaurado a</td></tr>
+\$fileListStr
+</table>
+EOF
+
+# ------------------------------
+$Lang{Archive___num_details_for__host} = "BackupPC: Archive #\$num Detalhes de \$host";
+
+$Lang{Archive___num_details_for__host2 } = <<EOF;
+\${h1("Archive #\$num Detalhes de \$host")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr><td class="tableheader"> Número </td><td class="border"> \$Archives[\$i]{num} </td></tr>
+<tr><td class="tableheader"> Solicitado por </td><td class="border"> \$ArchiveReq{user} </td></tr>
+<tr><td class="tableheader"> Hora da solicitação </td><td class="border"> \$reqTime </td></tr>
+<tr><td class="tableheader"> Resultado </td><td class="border"> \$Archives[\$i]{result} </td></tr>
+<tr><td class="tableheader"> Mensagem de erro </td><td class="border"> \$Archives[\$i]{errorMsg} </td></tr>
+<tr><td class="tableheader"> Hora início </td><td class="border"> \$startTime </td></tr>
+<tr><td class="tableheader"> Duração </td><td class="border"> \$duration min </td></tr>
+<tr><td class="tableheader"> Arquivo registro Xfer </td><td class="border">
+<a href="\$MyURL?action=view&type=ArchiveLOG&num=\$Archives[\$i]{num}&host=\$host">View</a>,
+<a href="\$MyURL?action=view&type=ArchiveErr&num=\$Archives[\$i]{num}&host=\$host">Errors</a>
+</tr></tr>
+</table>
+<p>
+\${h1("Host list")}
+<p>
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td>Host</td><td>Backup número</td></tr>
+\$HostListStr
+</table>
+EOF
+
+# -----------------------------------
+$Lang{Email_Summary} = "BackupPC: Resumo de Emails";
+
+# -----------------------------------
+#  !! ERROR messages !!
+# -----------------------------------
+$Lang{BackupPC__Lib__new_failed__check_apache_error_log} = "BackupPC::Lib->nova falha: revise o error_log do apache\n";
+$Lang{Wrong_user__my_userid_is___} =  
+              "Usuário inválido: meu userid é \$>, no lugar de \$uid"
+            . "(\$Conf{BackupPCUser})\n";
+# $Lang{Only_privileged_users_can_view_PC_summaries} = "Somente os usuários autorizados podem ver os resumos de PCs.";
+$Lang{Only_privileged_users_can_stop_or_start_backups} = 
+                  "Somente os usuários autorizados podem iniciar ou parar as cópias"
+               . " \${EscHTML(\$host)}.";
+$Lang{Invalid_number__num} = "Número inválido \$num";
+$Lang{Unable_to_open__file__configuration_problem} = "Não pode abrir \$file: problema de configuração?";
+$Lang{Only_privileged_users_can_view_log_or_config_files} = "Somente os usuários autorizados podem ver registros ou arquivos de configuração.";
+$Lang{Only_privileged_users_can_view_log_files} = "Somente os usuários autorizados podem ver arquivos de registro.";
+$Lang{Only_privileged_users_can_view_email_summaries} = "Somente os usuários autorizados podem ver resumos de email.";
+$Lang{Only_privileged_users_can_browse_backup_files} = "Somente os usuários autorizados podem revisar os arquivos de backup"
+                . " for host \${EscHTML(\$In{host})}.";
+$Lang{Empty_host_name} = "Número de host vazio.";
+$Lang{Directory___EscHTML} = "O diretório \${EscHTML(\"\$TopDir/pc/\$host/\$num\")}"
+                   . " está vazio";
+$Lang{Can_t_browse_bad_directory_name2} = "Não pode mostrar um nome de diretório inválido"
+                   . " \${EscHTML(\$relDir)}";
+$Lang{Only_privileged_users_can_restore_backup_files} = "Somente os usuários autorizados podem restaurar backups"
+                . " para o host \${EscHTML(\$In{host})}.";
+$Lang{Bad_host_name} = "Nome de host inválido \${EscHTML(\$host)}";
+$Lang{You_haven_t_selected_any_files__please_go_Back_to} = "Não foi selecionado nenhum arquivo; por favor, volte e"
+                . " selecione alguns arquivos.";
+$Lang{You_haven_t_selected_any_hosts} = "Não foi selecionado nenhum host; por favor volte e"
+                . " selecione algum host.";
+$Lang{Nice_try__but_you_can_t_put} = "Boa tentativa, mas não pode usar \'..\' nos nomes de arquivo";
+$Lang{Host__doesn_t_exist} = "O Host \${EscHTML(\$In{hostDest})} não existe";
+$Lang{You_don_t_have_permission_to_restore_onto_host} = "Sem autorização para restaurar neste host"
+                   . " \${EscHTML(\$In{hostDest})}";
+$Lang{Can_t_open_create} = "Impossível abrir/criar "
+                    . "\${EscHTML(\"\$TopDir/pc/\$hostDest/\$reqFileName\")}";
+$Lang{Only_privileged_users_can_restore_backup_files2} = "Somente os usuários autorizados podem restaurar backups"
+                . " do host \${EscHTML(\$host)}.";
+$Lang{Empty_host_name} = "Nome de host vazio";
+$Lang{Unknown_host_or_user} = "Usuário ou host inválido \${EscHTML(\$host)}";
+$Lang{Only_privileged_users_can_view_information_about} = "Somente os usuários autorizados podem ver informações do"
+                . " host \${EscHTML(\$host)}." ;
+$Lang{Only_privileged_users_can_view_archive_information} = "Somente os administradores podem ver informações de arquivo.";
+$Lang{Only_privileged_users_can_view_restore_information} = "Somente os usuários autorizados podem ver informações de restauração.";
+$Lang{Restore_number__num_for_host__does_not_exist} = "O número de restauração \$num del host \${EscHTML(\$host)} "
+               . " não existe.";
+$Lang{Archive_number__num_for_host__does_not_exist} = "O backup \$num do host \${EscHTML(\$host)} "
+                . " não existe.";
+$Lang{Can_t_find_IP_address_for} = "Impossível encontrar o endereço do IP de \${EscHTML(\$host)}";
+$Lang{host_is_a_DHCP_host} = <<EOF;
+\$host é um host DHCP e eu não consigo seu endereço IP. Provavelmente o nome netbios de \$ENV{REMOTE_ADDR}\$tryIP, e foi verificado que essa máquina
+não é \$host.
+<p>
+Até que tenha \$host um endereço num DHCP válido, se pode
+començar este processo a partir da própria máquina cliente.
+EOF
+
+# ------------------------------------
+# !! Server Mesg !!
+# ------------------------------------
+
+$Lang{Backup_requested_on_DHCP__host} = "Solicitação de backup em DHCP \$host (\$In{hostIP}) por"
+                                     . " \$User desde \$ENV{REMOTE_ADDR}";
+$Lang{Backup_requested_on__host_by__User} = "Solicitação de backup em \$host por \$User";
+$Lang{Backup_stopped_dequeued_on__host_by__User} = "Backup parado/desprogramado em \$host por \$User";
+$Lang{Restore_requested_to_host__hostDest__backup___num} = "Restauração solicitada para o host \$hostDest, backup #\$num,"
+            . " por \$User desde \$ENV{REMOTE_ADDR}";
+$Lang{Archive_requested} = "Arquivo solicitado por \$User desde \$ENV{REMOTE_ADDR}";
+
+# -------------------------------------------------
+# ------- Stuff that was forgotten ----------------
+# -------------------------------------------------
+
+$Lang{Status} = "Estado";
+$Lang{PC_Summary} = "Resumo PC";
+$Lang{LOG_file} = "Arquivo de Log";
+$Lang{LOG_files} = "Arquivos de Log";
+$Lang{Old_LOGs} = "Logs antigos";
+$Lang{Email_summary} = "Resumo Email";
+$Lang{Config_file} = "Arquivo configuração";
+$Lang{Hosts_file} = "Arquivo Hosts";
+$Lang{Current_queues} = "Filas atuais";
+$Lang{Documentation} = "Documentação";
+
+#$Lang{Host_or_User_name} = "<small>Host ou usuário:</small>";
+$Lang{Go} = "Aceitar";
+$Lang{Hosts} = "Hosts";
+$Lang{Select_a_host} = "Selecione um host...";
+
+$Lang{There_have_been_no_archives} = "<h2> Não existem arquivos </h2>\n";
+$Lang{This_PC_has_never_been_backed_up} = "<h2> Nunca foi feito backup deste PC! </h2>\n";
+$Lang{This_PC_is_used_by} = "<li>Este PC é utilizado por \${UserLink(\$user)}";
+
+$Lang{Extracting_only_Errors} = "(Extraindo somente Erros)";
+$Lang{XferLOG} = "TransfLOG";
+$Lang{Errors}  = "Erros";
+
+# ------------
+$Lang{Last_email_sent_to__was_at___subject} = <<EOF;
+<li>Última mensagem enviada a  \${UserLink(\$user)} foi às \$mailTime, assunto "\$subj".
+EOF
+# ------------
+$Lang{The_command_cmd_is_currently_running_for_started} = <<EOF;
+<li>O comando \$cmd está executando para \$host, iniciado às \$startTime.
+EOF
+
+# -----------
+$Lang{Host_host_is_queued_on_the_background_queue_will_be_backed_up_soon} = <<EOF;
+<li>O host \$host está em fila para ser processado em segundo plano (logo o backup estará pronto!).
+EOF
+
+# ----------
+$Lang{Host_host_is_queued_on_the_user_queue__will_be_backed_up_soon} = <<EOF;
+<li>Host \$host está para ser processado na fila de usuarios (logo o backup estará pronto!).
+EOF
+
+# ---------
+$Lang{A_command_for_host_is_on_the_command_queue_will_run_soon} = <<EOF;
+<li>Uma execução para \$host estar na fila de execuções (iniciará a seguir).
+EOF
+
+# --------
+$Lang{Last_status_is_state_StatusHost_state_reason_as_of_startTime} = <<EOF;
+<li>O último estado foi \"\$Lang->{\$StatusHost{state}}\"\$reason às \$startTime.
+EOF
+
+# --------
+$Lang{Last_error_is____EscHTML_StatusHost_error} = <<EOF;
+<li>O último erro foi \"\${EscHTML(\$StatusHost{error})}\".
+EOF
+
+# ------
+$Lang{Pings_to_host_have_failed_StatusHost_deadCnt__consecutive_times} = <<EOF;
+<li>Os pings para \$host falharam \$StatusHost{deadCnt} vezes consecutivas.
+EOF
+
+# -----
+$Lang{Prior_to_that__pings} = "Antes destes, pings";
+
+# -----
+$Lang{priorStr_to_host_have_succeeded_StatusHostaliveCnt_consecutive_times} = <<EOF;
+<li>\$priorStr a \$host obtiveram êxito \$StatusHost{aliveCnt}
+        vezes consecutivas.
+EOF
+
+$Lang{Because__host_has_been_on_the_network_at_least__Conf_BlackoutGoodCnt_consecutive_times___} = <<EOF;
+<li>Dado que \$host tem estado em uso na rede pelo menos \$Conf{BlackoutGoodCnt}
+vezes consecutivas, não se realizará backup das \$blackoutStr.
+EOF
+
+$Lang{__time0_to__time1_on__days} = "\$t0 até \$t1 em \$days";
+
+$Lang{Backups_are_deferred_for_hours_hours_change_this_number} = <<EOF;
+<li>Os backups atrazaram-se durante \$hours hours
+(<a href=\"\$MyURL?action=\${EscURI(\$Lang->{Stop_Dequeue_Archive})}&host=\$host\">Troque este número</a>).
+EOF
+
+$Lang{tryIP} = " y \$StatusHost{dhcpHostIP}";
+
+#$Lang{Host_Inhost} = "Host \$In{host}";
+
+$Lang{checkAll} = <<EOF;
+<tr><td class="fviewborder">
+<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Selecionar tudo
+</td><td colspan="5" align="center" class="fviewborder">
+<input type="submit" name="Submit" value="Restaurar os arquivos selecionados">
+</td></tr>
+EOF
+
+$Lang{checkAllHosts} = <<EOF;
+<tr><td class="fviewborder">
+<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Selecionar tudo
+</td><td colspan="2" align="center" class="fviewborder">
+<input type="submit" name="Submit" value="Arquivar os hosts selecionados">
+</td></tr>
+EOF
+
+$Lang{fileHeader} = <<EOF;
+    <tr class="fviewheader"><td align=center> Nome</td>
+       <td align="center"> Tipo</td>
+       <td align="center"> Modo</td>
+       <td align="center"> Nº</td>
+       <td align="center"> Tamanho</td>
+       <td align="center"> Hora Mod.</td>
+    </tr>
+EOF
+
+$Lang{Home} = "Principal";
+$Lang{Browse} = "Explorar backups";
+$Lang{Last_bad_XferLOG} = "Último erro no Log de Transferência";
+$Lang{Last_bad_XferLOG_errors_only} = "Último erro no Log de transferência (erros&nbsp;somente)";
+
+$Lang{This_display_is_merged_with_backup} = <<EOF;
+<li> Este quadro pertence ao backup Nº\$numF.
+EOF
+
+$Lang{Visit_this_directory_in_backup} = <<EOF;
+<li> Selecione o backup que desseja ver: <select onChange="window.location=this.value">\$otherDirs </select>
+EOF
+
+$Lang{Restore_Summary} = <<EOF;
+\${h2("Resumo da Restauração")}
+<p>
+Clique no número da restauração para ver seus detalhes.
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td align="center"> Restauração Nº </td>
+    <td align="center"> Resultado </td>
+    <td align="right"> Data Inicio</td>
+    <td align="right"> Dur/mins</td>
+    <td align="right"> Nº Arquivos </td>
+    <td align="right"> MB </td>
+    <td align="right"> Nº Err. Tar </td>
+    <td align="right"> Nº Err. Transf.#xferErrs </td>
+</tr>
+\$restoreStr
+</table>
+<p>
+EOF
+
+$Lang{Archive_Summary} = <<EOF;
+\${h2("Archive Summary")}
+<p>
+Clique no número do arquivo para mais detalhes.
+<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
+<tr class="tableheader"><td align="center"> Archive# </td>
+    <td align="center"> Resultado </td>
+    <td align="right"> Hora início</td>
+    <td align="right"> Dur/min</td>
+</tr>
+\$ArchiveStr
+</table>
+<p>
+EOF
+
+$Lang{BackupPC__Documentation} = "BackupPC: Documentação";
+
+$Lang{No} = "não";
+$Lang{Yes} = "sim";
+
+$Lang{The_directory_is_empty} = <<EOF;
+<tr><td bgcolor="#ffffff">O diretório \${EscHTML(\$dirDisplay)} está vazio
+</td></tr>
+EOF
+
+#$Lang{on} = "ativo";
+$Lang{off} = "inativo";
+
+$Lang{backupType_full}    = "completo";
+$Lang{backupType_incr}    = "incremental";
+$Lang{backupType_partial} = "parcial";
+
+$Lang{failed} = "falhado";
+$Lang{success} = "sucesso";
+$Lang{and} = "e";
+
+# ------
+# Hosts states and reasons
+$Lang{Status_idle} = "inativo";
+$Lang{Status_backup_starting} = "iniciando backup";
+$Lang{Status_backup_in_progress} = "backup em execução";
+$Lang{Status_restore_starting} = "iniciando restauração";
+$Lang{Status_restore_in_progress} = "restauração em execução";
+$Lang{Status_link_pending} = "conexão pendente";
+$Lang{Status_link_running} = "conexão em curso";
+
+$Lang{Reason_backup_done} = "backup realizado";
+$Lang{Reason_restore_done} = "restauração realizada";
+$Lang{Reason_archive_done}   = "arquivamento realizado";
+$Lang{Reason_nothing_to_do} = "nada a fazer";
+$Lang{Reason_backup_failed} = "falha no backup";
+$Lang{Reason_restore_failed} = "falha na restauração";
+$Lang{Reason_archive_failed} = "falha no arquivamento";
+$Lang{Reason_no_ping} = "sem ping";
+$Lang{Reason_backup_canceled_by_user} = "backup cancelado pelo usuário";
+$Lang{Reason_restore_canceled_by_user} = "restauração cancelada pelo usuário";
+$Lang{Reason_archive_canceled_by_user} = "arquivamento cancelado pelo usuário";
+
+# ---------
+# Email messages
+
+# No backup ever
+$Lang{EMailNoBackupEverSubj} = "BackupPC: nenhum backup de \$host foi terminado com êxito";
+$Lang{EMailNoBackupEverMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Caro $userName,
+
+Em seu PC ($host) nenhum backup foi completado por nosso programa de backup.
+Os backups deveriam ser executados automaticamente quando seu PC se conecta
+a rede. Contate seu suporte técnico se:
+
+  - Seu computador está conectado a rede com regularidade. Isto significa
+    que existe algum problema de instalação ou configuração que impessa a
+    realização dos backups.
+
+  - Não deseja realizar backups e não quer receber mais mensagens
+    como esta.
+
+Caso contrário, assegure-se de que seu PC está conectado à rede na próxima vez
+que estiver utilizando-o.
+
+Saudações:
+Agente BackupPC
+http://backuppc.sourceforge.net
+EOF
+
+# No recent backup
+$Lang{EMailNoBackupRecentSubj} = "BackupPC: não existem backups recentes de \$host";
+$Lang{EMailNoBackupRecentMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Caro $userName,
+
+Não foi completado nenhum backup completo de seu PC ($host) durante
+$days dias.
+Seu PC tem realizado backups corretos $numBackups vezes desde
+$firstTime até $days dias.
+Os backups deveriam efetuar-se automaticamente quando seu PC estiver
+conectado a rede.
+
+Se seu PC tem estado conectado durante algumas horas a rede durante os últimos
+$days dias deveria contactar com seu suporte técnico para ver porque os backups
+não funcionam adequadamente.
+
+Por outro lado, se você não o está utilizando, não há muito o que fazer a não
+ser copiar manualmente os arquivos mais críticos para outro suporte físico. 
+Deve-se estar ciente de que qualquer arquivo que tenha sido criado ou modificado
+nos últimos $days dias (incluindo todos os emails novos e arquivos anexos) não podem
+ser restaurados se seu disco danificar-se.
+
+Saudações:
+Agente BackupPC
+http://backuppc.sourceforge.net
+EOF
+
+# Old Outlook files
+$Lang{EMailOutlookBackupSubj} = "BackupPC: Oss arquivos do Outlook de \$host necessitam ser copiados";
+$Lang{EMailOutlookBackupMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+
+Caro $userName,
+
+Os arquivos de Outlook de seu PC tem $howLong.
+Estes arquivos contém todo seus emails, anexos, contatos e informações de
+sua agenda. Seu PC tem sido corretamente salvaguardado $numBackups vezes desde
+$firstTime até $lastTime dias.  Sem fechá-lo, Outlook bloqueia todos seus
+arquivos quando estão em execução, impidindo de se fazer backup dos mesmo.
+
+Recomendamos fazer cópia de segurança dos arquivos do Outlook quando estiver
+conectado a rede fechando o Outlook e o resto das aplicações e utilizando seu
+navegador de internet. Clique neste link:
+
+    $CgiURL?host=$host               
+
+Selecione "Começar backup incremental" duas vezes para começar
+um novo backup incremental.
+Pode-se selecionar "Voltar a página de $host " e clicar em "refazer"
+para ver o estado do processo de backup. Este processo deve durar 
+somente alguns minutos para completar.
+
+Saudações:
+Agente BackupPC
+http://backuppc.sourceforge.net
+EOF
+
+$Lang{howLong_not_been_backed_up} = "não foi realizado nenhum backup com êxito";
+$Lang{howLong_not_been_backed_up_for_days_days} = "não foi realizado nenhum backup durante \$days dias";
+
+#end of lang_pt_BR.pm
+
+
index ae5bd3c..8eae62d 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -59,7 +59,7 @@ sub new
         TopDir  => $topDir || '/data/BackupPC2.1.0',
         BinDir  => $installDir || '/usr/local/BackupPC2.1.0',
         LibDir  => $installDir || '/usr/local/BackupPC2.1.0',
-        Version => '2.1.2',
+        Version => '2.1.3',
         BackupFields => [qw(
                     num type startTime endTime
                     nFiles size nFilesExist sizeExist nFilesNew sizeNew
index e6537a5..ca8dcdc 100644 (file)
@@ -56,7 +56,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 165b762..797df8a 100644 (file)
@@ -31,7 +31,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 08e8f88..0532635 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 2ea58a5..09b81d2 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 58d53c5..a516adc 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index f4853bb..005ad7f 100644 (file)
@@ -12,7 +12,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -405,6 +405,11 @@ sub attribWrite
     my($fio, $d) = @_;
     my($poolWrite);
 
+    #
+    # Don't write attributes on 2nd phase - they're already
+    # taken care of during the first phase.
+    #
+    return if ( $fio->{phase} > 0 );
     if ( !defined($d) ) {
         #
         # flush all entries (in reverse order)
@@ -932,6 +937,7 @@ sub fileDeltaRxDone
 
     close($fio->{rxInFd})  if ( defined($fio->{rxInFd}) );
     unlink("$fio->{outDirSh}RStmp") if  ( -f "$fio->{outDirSh}RStmp" );
+    $fio->{phase} = $phase;
 
     #
     # Check the final md4 digest
index 51ae10c..e12e30e 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index b082bab..7750731 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
@@ -198,7 +198,12 @@ sub readOutput
         my $mesg;
         if ( sysread($t->{pipeTar}, $mesg, 8192) <= 0 ) {
             vec($$FDreadRef, fileno($t->{pipeTar}), 1) = 0;
-           if ( !close($t->{pipeTar}) ) {
+           if ( !close($t->{pipeTar}) && $? != 256 ) {
+                #
+                # Tar 1.16 uses exit status 1 (256) when some files
+                # changed during archive creation.  We allow this
+                # as a benign error and consider the archive ok
+                #
                $t->{tarOut} .= "Tar exited with error $? ($!) status\n";
                $t->{xferOK} = 0 if ( !$t->{tarBadExitOk} );
            }
@@ -214,15 +219,20 @@ sub readOutput
         #
         alarm($conf->{ClientTimeout}) if ( !$t->{abort} );
         $t->{lastOutputLine} = $_ if ( !/^$/ );
-        if ( /^Total bytes written: / ) {
+        if ( /^Total bytes (written|read): / ) {
             $t->{XferLOG}->write(\"$_\n") if ( $t->{logLevel} >= 1 );
             $t->{xferOK} = 1;
         } elsif ( /^\./ ) {
             $t->{XferLOG}->write(\"$_\n") if ( $t->{logLevel} >= 2 );
             $t->{fileCnt}++;
         } else {
-            $t->{XferLOG}->write(\"$_\n") if ( $t->{logLevel} >= 0 );
-            $t->{xferErrCnt}++;
+            #
+            # Ignore annoying log message on incremental for tar 1.15.x
+            #
+            if ( !/: file is unchanged; not dumped$/ ) {
+                $t->{XferLOG}->write(\"$_\n") if ( $t->{logLevel} >= 0 );
+                $t->{xferErrCnt}++;
+            }
            #
            # If tar encounters a minor error, it will exit with a non-zero
            # status.  We still consider that ok.  Remember if tar prints
index efb2f22..e0357bb 100644 (file)
@@ -33,7 +33,7 @@
 #
 #========================================================================
 #
-# Version 2.1.2, released 5 Sep 2005.
+# Version 2.1.3, released 21 Jan 2007.
 #
 # See http://backuppc.sourceforge.net.
 #
index 058e8f0..f376975 100755 (executable)
--- a/makeDist
+++ b/makeDist
@@ -42,8 +42,8 @@ use Getopt::Std;
 
 umask(0022);
 
-my $Version     = "2.1.2";
-my $ReleaseDate = "5 Sep 2005";
+my $Version     = "2.1.3";
+my $ReleaseDate = "21 Jan 2007";
 my $DistDir     = "dist/BackupPC-$Version";
 
 my @PerlSrc = qw(
@@ -93,6 +93,7 @@ my @PerlSrc = qw(
     lib/BackupPC/Lang/fr.pm
     lib/BackupPC/Lang/it.pm
     lib/BackupPC/Lang/nl.pm
+    lib/BackupPC/Lang/pt_br.pm
     lib/BackupPC/Xfer/Archive.pm
     lib/BackupPC/Xfer/Smb.pm
     lib/BackupPC/Xfer/Tar.pm
@@ -236,24 +237,15 @@ sub InstallFile
            s/__RELEASEDATE__/$ReleaseDate/g;
            if ( $file =~ /BackupPC\.html$/ ) {
                #
-               # fixup for perl 5.6.x
+               # fixup for conf links
                #
-               if ( !/A NAME="item_(%|_)24Conf/i ) {
+               if ( !/A NAME="item_(%|_)conf/i ) {
                    s/\$Conf{([^}]*)}/
                        defined($ConfName{$1})
-                           ? "\L<A HREF=\"#$ConfName{$1}\">\E\$Conf{$1}<\/A>"
+                           ? "\L<a href=\"#$ConfName{$1}\">\E\$Conf{$1}<\/A>"
                            : "\$Conf{$1}"/eg;
                }
-               s/<(A NAME="item_(%|_)24Conf(%|_)7B(.*?)(%|_)7D).*?">/\L<A NAME="item_%24Conf%7b$4%7d">/ig;
                s/^<DD>/<DD><P>/;
-               #
-               # Fixup for perl 5.8.x first one no longer needed after
-               # fix in CSS)
-               #
-#              if ( /^<\/dt>/ ) {
-#                  $_ .= <FILE>;
-#                  s/^(<\/dt>\n<dd>)/$1<p>/s;
-#              }
                s/^<li><\/li>/<li>/;
            }
            if ( /__CONFIGPOD__/ ) {
@@ -318,10 +310,8 @@ sub config2pod
                 s/([^;])\s*$/$1 .../;
             }
             push(@conf, $_);
-            my $text = "\$Conf{$var}";
-            $text =~ s/\s+/_/sg;
-            $text =~ s{(\W)}{sprintf("%%%02X", ord($1) )}gxe;
-            $text = substr($text, 0, 50);
+            my $text = "_conf_${var}_";
+            $text =~ s{[\W\s]}{_}g;
             $ConfName{$var} = "item_$text";
         } elsif ( /^$/ ) {
             if ( $str ne "" && @conf ) {
@@ -443,7 +433,7 @@ sub CheckLangTags
     my($en, $enVars) = LangParse("lib/BackupPC/Lang/en.pm");
     my($errors);
 
-    foreach my $lang ( qw(fr.pm de.pm es.pm it.pm nl.pm) ) {
+    foreach my $lang ( qw(fr.pm de.pm es.pm it.pm nl.pm pt_br.pm) ) {
        my($d, $dVars) = LangParse("lib/BackupPC/Lang/$lang");
        foreach my $v1 ( @$en ) {
            my $v2 = shift(@$d);
index a05a01f..40742c7 100755 (executable)
--- a/makePatch
+++ b/makePatch
@@ -8,8 +8,8 @@ use strict;
 use File::Find;
 use File::Path;
 
-my $BaseVersion  = "2.1.1";
-my $PatchLevel   = "pl1";
+my $BaseVersion  = "2.1.3";
+my $PatchLevel   = "pl0";
 my $PatchVersion = "$BaseVersion$PatchLevel";
 
 my $Base         = "/home/craig/admin/packages/BackupPC-$BaseVersion";
@@ -48,7 +48,7 @@ print OUT <<EOF;
 #
 EOF
 
-foreach my $dir ( qw(bin lib cgi-bin) ) {
+foreach my $dir ( qw(bin lib cgi-bin conf) ) {
     open(DIFF, "diff -ur -I '^# Version .*, released ' $Base/$dir $TmpDir/$dir|")
            || die("can't run diff\n");
     while ( <DIFF> ) {