From 4e0519e390137b18b545f0ad256d03941cdd7bac Mon Sep 17 00:00:00 2001
From: intrigeri <intrigeri@boum.org>
Date: Sat, 9 Jan 2010 00:44:43 +0100
Subject: [PATCH] rdiff,dup: fix include/exclude paths with spaces (Closes:
 #398435)

This also fixes Redmine bug #1021.
---
 ChangeLog         | 3 +++
 handlers/dup.in   | 9 +++++++++
 handlers/rdiff.in | 9 +++++++++
 3 files changed, 21 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 18ed157..fb6b622 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,6 +42,8 @@ version 0.9.7 -- UNRELEASED
 	   database names.
 	 . Use bash pipefail option when needed so that failed dumps are
 	   reported as such.
+	rdiff:
+	 . Fix include/exclude paths with spaces (Closes: #398435)
 	sys:
 	 . New luksheaders option (default=disabled) to backup the Luks header
 	   of every Luks device.
@@ -55,6 +57,7 @@ version 0.9.7 -- UNRELEASED
 	   one time (Closes: #536360)
 	 . Report duplicity output as "info" so that it can be included in
 	   report e-mail when reportinfo is on (Closes: #563734)
+	 . Fix include/exclude paths with spaces
     helper changes
 	dup:
 	 . Do not propose to exclude /home/*/.gnupg twice anymore
diff --git a/handlers/dup.in b/handlers/dup.in
index 6e0f698..2f55b9c 100644
--- a/handlers/dup.in
+++ b/handlers/dup.in
@@ -189,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'"
       done
+      IFS=$SAVEIFS
    done
 fi
 
diff --git a/handlers/rdiff.in b/handlers/rdiff.in
index 45d5096..98a53a3 100644
--- a/handlers/rdiff.in
+++ b/handlers/rdiff.in
@@ -209,20 +209,28 @@ symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which
 
 # TODO: order the includes and excludes
 # excludes
+SAVEIFS=$IFS
+IFS=$(echo -en "\n\b")
 for i in $exclude; do
    str="${i//__star__/*}"
    execstr="${execstr}--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="${execstr}--include '$str' "
 done
+IFS=$SAVEIFS
 
 # vsinclude
 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"
@@ -232,6 +240,7 @@ if [ $usevserver = yes ]; then
             warning "vsinclude statement '${vi//__star__/*}' will be ignored for VServer $vserver. $symlinks_warning"
          fi
       done
+      IFS=$SAVEIFS
    done
 fi
 
-- 
GitLab