X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2FBackupPC%2FXfer%2FSmb.pm;h=b694785b566bd506f74fc4ede4612366af91bda3;hb=74dc9d456332757127d5eda4ce32f29377133fa2;hp=124b6f01a1a546d430e8a279309d271753cb1066;hpb=3dc33e5f39430031766adf3c5bb2ffc649ee9100;p=BackupPC.git diff --git a/lib/BackupPC/Xfer/Smb.pm b/lib/BackupPC/Xfer/Smb.pm index 124b6f0..b694785 100644 --- a/lib/BackupPC/Xfer/Smb.pm +++ b/lib/BackupPC/Xfer/Smb.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 1.6.0_CVS, released 10 Dec 2002. +# Version 2.0.0beta3, released 1 Jun 2003. # # See http://backuppc.sourceforge.net. # @@ -78,8 +78,9 @@ sub start my($t) = @_; my $bpc = $t->{bpc}; my $conf = $t->{conf}; - my $I_option = $t->{hostIP} eq $t->{host} ? "" : " -I $t->{hostIP}"; - my($fileList, $optX, $smbClientCmd, $logMsg); + my $I_option = $t->{hostIP} eq $t->{host} ? [] : ['-I', $t->{hostIP}]; + my(@fileList, $X_option, $smbClientCmd, $logMsg); + my($timeStampFile); local(*SMB); # @@ -97,11 +98,7 @@ sub start return; } if ( $t->{type} eq "restore" ) { - $smbClientCmd = - "$conf->{SmbClientPath} '\\\\$t->{host}\\$t->{shareName}'" - . "$I_option -U '$conf->{SmbShareUserName}' -E -N -d 1" - . " $conf->{SmbClientArgs}" - . " -c 'tarmode full' -Tx -"; + $smbClientCmd = $conf->{SmbClientRestoreCmd}; $logMsg = "restore started for share $t->{shareName}"; } else { # @@ -126,43 +123,45 @@ sub start } if ( defined($conf->{BackupFilesOnly}{$t->{shareName}}) ) { foreach my $file ( @{$conf->{BackupFilesOnly}{$t->{shareName}}} ) { - $file =~ s/'/\\'/g; - $fileList .= "'$file' "; + push(@fileList, $file); } } elsif ( defined($conf->{BackupFilesExclude}{$t->{shareName}}) ) { foreach my $file ( @{$conf->{BackupFilesExclude}{$t->{shareName}}} ) { - $file =~ s/'/\\'/g; - $fileList .= "'$file' "; + push(@fileList, $file); } # # Allow simple wildcards in exclude list by specifying "r" option. # - $optX = "rX"; + $X_option = "rX"; } if ( $t->{type} eq "full" ) { - $smbClientCmd = - "$conf->{SmbClientPath} '\\\\$t->{host}\\$t->{shareName}'" - . "$I_option -U '$conf->{SmbShareUserName}' -E -N -d 1" - . " $conf->{SmbClientArgs}" - . " -c 'tarmode full'" - . " -Tc$optX - $fileList"; + $smbClientCmd = $conf->{SmbClientFullCmd}; $logMsg = "full backup started for share $t->{shareName}"; } else { - my $timeStampFile = "$t->{outDir}/timeStamp.level0"; - open(LEV0, ">$timeStampFile") && close(LEV0); + $timeStampFile = "$t->{outDir}/timeStamp.level0"; + open(LEV0, ">", $timeStampFile) && close(LEV0); utime($t->{lastFull} - 3600, $t->{lastFull} - 3600, $timeStampFile); - $smbClientCmd = - "$conf->{SmbClientPath} '\\\\$t->{host}\\$t->{shareName}'" - . "$I_option -U '$conf->{SmbShareUserName}' -E -N -d 1" - . " $conf->{SmbClientArgs}" - . " -c 'tarmode full'" - . " -TcN$optX $timeStampFile - $fileList"; + $smbClientCmd = $conf->{SmbClientIncrCmd}; $logMsg = "incr backup started back to " . $bpc->timeStamp($t->{lastFull} - 3600, 0) . "for share $t->{shareName}"; } } + my $args = { + smbClientPath => $conf->{SmbClientPath}, + host => $t->{host}, + hostIP => $t->{hostIP}, + client => $t->{client}, + shareName => $t->{shareName}, + userName => $conf->{SmbShareUserName}, + fileList => \@fileList, + I_option => $I_option, + X_option => $X_option, + timeStampFile => $timeStampFile, + }; + $smbClientCmd = $bpc->cmdVarSubstitute($smbClientCmd, $args); + if ( !defined($t->{xferPid} = open(SMB, "-|")) ) { $t->{_errStr} = "Can't fork to run smbclient"; return; @@ -194,14 +193,15 @@ sub start open(STDOUT, ">&$t->{pipeWH}"); } # - # exec smbclient. + # Run smbclient. # - exec($smbClientCmd); + $bpc->cmdExecOrEval($smbClientCmd, $args); # should not be reached, but just in case... $t->{_errStr} = "Can't exec $conf->{SmbClientPath}"; return; } - $t->{XferLOG}->write(\"Running: $smbClientCmd\n"); + my $str = "Running: " . $bpc->execCmd2ShellCmd(@$smbClientCmd) . "\n"; + $t->{XferLOG}->write(\$str); alarm($conf->{ClientTimeout}); $t->{_errStr} = undef; return $logMsg; @@ -322,7 +322,7 @@ sub xferPid { my($t) = @_; - return $t->{xferPid}; + return ($t->{xferPid}); } sub logMsg