The following patch addresses 2 limitations I often run into with the
user-space BackupPC_zcat function
1. The v4 version requires that you run as user 'backuppc' (even root
fails) which shouldn't be necessary (and wasn't necessary in the
simpler v3 version)
2. It is a pain in the neck to 'cat' a mix of compressed and
non-compressed files. For example, you cant do:
BackupPC_zcat TopDir/log/LOG* because the latest log is
uncompressed and the older ones are compressed.
The following simple patch addresses those issues:
--- /usr/share/backuppc/bin/BackupPC_zcat 2020-06-21 18:27:35.000000000
-0400
+++ /tmp/BackupPC_zcat 2022-01-25 22:05:40.491222233 -0500
@@ -51,7 +51,7 @@
use BackupPC::View;
use Getopt::Std;
-die("BackupPC::Lib->new failed\n") if ( !(my $bpc = BackupPC::Lib->new) );
+die("BackupPC::Lib->new failed\n") if ( !(my $bpc =
BackupPC::Lib->new("","","",1)) ); #No user check
my $TopDir = $bpc->TopDir();
my %Conf = $bpc->Conf();
@@ -68,8 +68,21 @@
}
my $ret = 0;
+my $CompressLevel = $Conf{CompressLevel}; #Store original value
if ( @ARGV ) {
while ( my $file = shift(@ARGV) ) {
+ #Check if zlib and if not then set $Conf{CompressLevel} = 0
+ #This allows you to use BackupPC_zcat on uncompressed files
+ open(FD, $file) || die "File open failed for '$file': $!\n";
+ if(read(F, my $buffer, 4)){
+ my ($magic1, $magic2) = unpack("C2C2", $buffer);
+ $Conf{CompressLevel} =
+ ($magic1 == 0x78 &&
+ ($magic2 == 0x01 || $magic2 == 0x5E || $magic2 == 0x9c ||
$magic2 == 0xDA)) ?
+ $CompressLevel :0; #Override original $Conf{CompressLevel} and
set to 0 if not zlib compressed
+ }
+ close(FD);
+
#
# first case is an MD5 digest - try to find it in the pool (if it
doesn't exist as a file)
#
_______________________________________________
BackupPC-users mailing list
[email protected]
List: https://lists.sourceforge.net/lists/listinfo/backuppc-users
Wiki: https://github.com/backuppc/backuppc/wiki
Project: https://backuppc.github.io/backuppc/