From 4e0519e390137b18b545f0ad256d03941cdd7bac Mon Sep 17 00:00:00 2001 From: intrigeri 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 -- 2.30.2