X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=bin%2FBackupPC_archiveHost;h=f5535f1b9703266f9602e7751c190e648f6ff55b;hp=e2ee002ac7c53e8b022fb0473e9ede80196c0e8d;hb=fda25dc88a63ccac1c80efa2e4994bf0725ca9b7;hpb=79e0593c501fd58046feeca20c315cc4ac283435 diff --git a/bin/BackupPC_archiveHost b/bin/BackupPC_archiveHost index e2ee002..f5535f1 100755 --- a/bin/BackupPC_archiveHost +++ b/bin/BackupPC_archiveHost @@ -20,7 +20,7 @@ # Josh Marshall # # COPYRIGHT -# Copyright (C) 2001-2004 Craig Barratt +# Copyright (C) 2001-2007 Craig Barratt # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -38,7 +38,7 @@ # #======================================================================== # -# Version 2.1.0beta2, released 23 May 2004. +# Version 3.1.0, released 25 Nov 2007. # # See http://backuppc.sourceforge.net. # @@ -88,8 +88,26 @@ my $mesg = "Writing tar archive for host $host, backup #$bkupNum"; # $share = $bpc->shellEscape($share); $host = $bpc->shellEscape($host); + +# +# We prefer to use /bin/csh because the exit status of a pipeline +# is non-zero if any command is non zero. In contrast, /bin/sh +# and /bin/bash use the convention that the exit status is just +# the exit status of the last command of the pipeline. +# +my @shell; +if ( -x "/bin/csh" ) { + @shell = ("/bin/csh", "-cf"); +} elsif ( -x "/bin/sh" ) { + @shell = ("/bin/sh", "-c"); +} else { + print("Error: Can't find executable /bin/csh or /bin/sh\n"); + exit(1); +} my $cmd = "$tarCreate -t -h $host -n $bkupNum -s $share . "; -$cmd .= "| $compPath " if ( $compPath ne "cat" && $compPath ne "" ); +$cmd .= "| $compPath " if ( $compPath ne "cat" + && $compPath ne "/bin/cat" + && $compPath ne "" ); if ( -b $outLoc || -c $outLoc || -f $outLoc ) { # # Output file is a device or a regular file, so don't use split @@ -102,7 +120,7 @@ if ( -b $outLoc || -c $outLoc || -f $outLoc ) { print("Error: unable to create output directory $outLoc\n"); exit(1); } - if ( $splitSize && -x $splitPath ) { + if ( $splitSize > 0 && -x $splitPath ) { $cmd .= "| $splitPath -b $splitSize - $outLoc/$host.$bkupNum.tar$fileExt."; $mesg .= ", split to output files $outLoc/$host.$bkupNum.tar$fileExt.*"; } else { @@ -115,8 +133,9 @@ print("$mesg\n"); # # Run the command # -my $ret = system($cmd); +my $ret = system(@shell, $cmd); if ( $ret ) { + print("Executing: @shell $cmd\n"); print("Error: $tarCreate, compress or split failed\n"); exit(1); } @@ -128,8 +147,10 @@ if ( $ret ) { if ( -d $outLoc && -x $parPath ) { if ( $parfile != 0 ) { print("Running $parPath to create parity files\n"); - $ret = system("$parPath c -r$parfile $outLoc/$host.$bkupNum.tar$fileExt.par2 $outLoc/$host.$bkupNum.tar$fileExt.*"); + my $parCmd = "$parPath c -r$parfile $outLoc/$host.$bkupNum.tar$fileExt.par2 $outLoc/$host.$bkupNum.tar$fileExt*"; + $ret = system($parCmd); if ( $ret ) { + print("Executing: $parCmd\n"); print("Error: $parPath failed\n"); exit(1); }