# # BackupPC-2.1.2pl2.diff: BackupPC patch file generated # on Sun Jun 18 19:36:32 2006. # # This patch file should be applied to a cleanly unpacked BackupPC # version 2.1.2. Do not apply any old patch files; each # patch file accumulates all previous changes. # # Example: # # # fetch BackupPC-2.1.2.tar.gz # # fetch BackupPC-2.1.2pl2.diff # tar zxvf BackupPC-2.1.2.tar.gz # cd BackupPC-2.1.2 # patch -p0 < ../BackupPC-2.1.2pl2.diff # perl configure.pl # # ChangeLog: # # - 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. # --- bin/BackupPC_tarExtract 2005-09-05 16:21:21.000000000 -0700 +++ bin/BackupPC_tarExtract 2006-06-18 19:36:31.995945464 -0700 @@ -58,7 +58,7 @@ 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 @@ # 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 @@ $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 @@ # 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 @@ # 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 @@ # 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 @@ } 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 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, --- lib/BackupPC/Lib.pm 2005-09-05 16:21:21.000000000 -0700 +++ lib/BackupPC/Lib.pm 2006-06-18 19:36:32.035939384 -0700 @@ -59,7 +59,7 @@ TopDir => $topDir || '__TOPDIR__', BinDir => $installDir || '__INSTALLDIR__', LibDir => $installDir || '__INSTALLDIR__', - Version => '2.1.2', + Version => '2.1.2pl2', BackupFields => [qw( num type startTime endTime nFiles size nFilesExist sizeExist nFilesNew sizeNew --- lib/BackupPC/Xfer/RsyncFileIO.pm 2005-09-05 16:21:21.000000000 -0700 +++ lib/BackupPC/Xfer/RsyncFileIO.pm 2006-06-18 19:36:32.120926464 -0700 @@ -405,6 +405,11 @@ 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 @@ close($fio->{rxInFd}) if ( defined($fio->{rxInFd}) ); unlink("$fio->{outDirSh}RStmp") if ( -f "$fio->{outDirSh}RStmp" ); + $fio->{phase} = $phase; # # Check the final md4 digest --- lib/BackupPC/Xfer/Tar.pm 2005-09-05 16:21:21.000000000 -0700 +++ lib/BackupPC/Xfer/Tar.pm 2006-06-18 19:36:32.110927984 -0700 @@ -221,8 +221,13 @@ $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 --- conf/config.pl 2005-09-05 16:21:22.000000000 -0700 +++ conf/config.pl 2006-06-18 19:36:31.968949568 -0700 @@ -1052,7 +1052,7 @@ '--perms', '--owner', '--group', - '--devices', + '-D', '--links', '--times', '--block-size=2048', @@ -1086,7 +1086,7 @@ '--perms', '--owner', '--group', - '--devices', + '-D', '--links', '--times', '--block-size=2048',