rdiff,dup: fix include/exclude paths with spaces (Closes: #398435)
[matthijs/upstream/backupninja.git] / handlers / dup.in
index 9c6a4937a5e06afc2d04d2b0affc249860352292..2f55b9c07668ac0b63680f9599b9d96f96032149 100644 (file)
@@ -1,4 +1,5 @@
 # -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
+# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
 #
 # duplicity script for backupninja
 # requires duplicity
@@ -66,9 +67,9 @@ if [ "$testconnect" == "yes" ]; then
       if [ ! $test ]; then
          result=`ssh $sshoptions -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1'`
          if [ "$result" != "1" ]; then
-           fatal "Can't connect to $desthost as $destuser."
+            fatal "Can't connect to $desthost as $destuser."
          else
-           debug "Connected to $desthost as $destuser successfully"
+            debug "Connected to $desthost as $destuser successfully"
          fi
       fi
    fi
@@ -105,8 +106,8 @@ duplicity_sub="`echo $duplicity_version | @AWK@ -F '.' '{print $3}'`"
 #    --sftp-command ourselves
 
 scpoptions="$sshoptions"
-if [ "$bandwidthlimit" =! 0 ]; then
-   [ -z "$testurl" ] || warning 'The bandwidthlimit option is not used when desturl is set.'
+if [ "$bandwidthlimit" != 0 ]; then
+   [ -z "$desturl" ] || warning 'The bandwidthlimit option is not used when desturl is set.'
    scpoptions="$scpoptions -l $bandwidthlimit"
 fi
 
@@ -152,7 +153,7 @@ fi
 # If incremental==no, force a full backup anyway.
 if [ "$incremental" == "no" ]; then
    # before 0.4.4, full was an option and not a command
-   if [ "$duplicity_major" -le 0 -a "$duplicity_minor" -le 4 -a "$duplicity_sub" -lt 4 ]; then   
+   if [ "$duplicity_major" -le 0 -a "$duplicity_minor" -le 4 -a "$duplicity_sub" -lt 4 ]; then
       execstr_options="${execstr_options} --full"
    else
       execstr_command="full"
@@ -188,26 +189,35 @@ fi
 set -o noglob
 
 # excludes
+SAVEIFS=$IFS
+IFS=$(echo -en "\n\b")
 for i in $exclude; do
    str="${i//__star__/*}"
    execstr_source="${execstr_source} --exclude '$str'"
 done
+IFS=$SAVEIFS
 
 # includes
+SAVEIFS=$IFS
+IFS=$(echo -en "\n\b")
 for i in $include; do
    [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'"
    str="${i//__star__/*}"
    execstr_source="${execstr_source} --include '$str'"
 done
+IFS=$SAVEIFS
 
 # vsincludes
 if [ $usevserver = yes ]; then
    for vserver in $vsnames; do
+      SAVEIFS=$IFS
+      IFS=$(echo -en "\n\b")
       for vi in $vsinclude; do
-        str="${vi//__star__/*}"
-        str="$VROOTDIR/$vserver$str"
-        execstr_source="${execstr_source} --include '$str'"
+         str="${vi//__star__/*}"
+         str="$VROOTDIR/$vserver$str"
+         execstr_source="${execstr_source} --include '$str'"
       done
+      IFS=$SAVEIFS
    done
 fi
 
@@ -229,11 +239,11 @@ if [ "$duplicity_major" -ge 0 -a "$duplicity_minor" -ge 4 -a "$duplicity_sub" -g
          "$precmd duplicity cleanup --force $execstr_options $execstr_serverpart 2>&1"`
       exit_code=$?
       if [ $exit_code -eq 0 ]; then
-        debug $output
-        info "Duplicity cleanup finished successfully."
+         debug $output
+         info "Duplicity cleanup finished successfully."
       else
-        debug $output
-        warning "Duplicity cleanup failed."
+         debug $output
+         warning "Duplicity cleanup failed."
       fi
    fi
 fi
@@ -244,17 +254,17 @@ if [ "$keep" != "yes" ]; then
       debug "$precmd duplicity remove-older-than $keep --force $execstr_options $execstr_serverpart"
       if [ ! $test ]; then
          export PASSPHRASE=$password
-        output=`nice -n $nicelevel \
+         output=`nice -n $nicelevel \
                    su -c \
                       "$precmd duplicity remove-older-than $keep --force $execstr_options $execstr_serverpart 2>&1"`
-        exit_code=$?
-        if [ $exit_code -eq 0 ]; then
-           debug $output
-           info "Duplicity remove-older-than finished successfully."
-        else
-           debug $output
-           warning "Duplicity remove-older-than failed."
-        fi
+         exit_code=$?
+         if [ $exit_code -eq 0 ]; then
+            debug $output
+            info "Duplicity remove-older-than finished successfully."
+         else
+            debug $output
+            warning "Duplicity remove-older-than failed."
+         fi
       fi
    fi
 fi
@@ -262,18 +272,23 @@ fi
 ### Backup command
 debug "$precmd duplicity $execstr_command $execstr_options $execstr_source --exclude '**' / $execstr_serverpart"
 if [ ! $test ]; then
+   outputfile=`maketemp backupout`
    export PASSPHRASE=$password
    output=`nice -n $nicelevel \
              su -c \
-                "$precmd duplicity $execstr_command $execstr_options $execstr_source --exclude '**' / $execstr_serverpart 2>&1"`
+                "$precmd duplicity $execstr_command $execstr_options $execstr_source --exclude '**' / $execstr_serverpart >$outputfile 2>&1"`
    exit_code=$?
+   debug $output
+   cat $outputfile | (while read output ; do
+                         info $output
+                      done
+   )
    if [ $exit_code -eq 0 ]; then
-      debug $output
       info "Duplicity finished successfully."
    else
-      debug $output
       fatal "Duplicity failed."
    fi
+   rm $outputfile
 fi
 
 return 0