X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=handlers%2Frdiff;h=8faca9d654a827b7d447c48736c1ef1515e7b302;hb=28338e91c351bef21a856f4280b762b9ee0dc2aa;hp=1a2e1ebb37eaacfea7b5c88d4e0de3b74d6b0b0b;hpb=e431f13bcc7136b1b45837475adb1f23bdeda38b;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/handlers/rdiff b/handlers/rdiff index 1a2e1eb..8faca9d 100644 --- a/handlers/rdiff +++ b/handlers/rdiff @@ -78,6 +78,7 @@ check_consistency "source" "$type" "$user" "$host" getconf label getconf keep 60 getconf include +getconf vsnames all getconf vsinclude getconf exclude @@ -92,14 +93,26 @@ check_consistency "destination" "$type" "$user" "$host" ### CHECK CONFIG ### -# See if vservers are configured +# If vservers are configured, check that the ones listed in $vsnames do exist. local usevserver=no -if [ $vservers_are_available = yes -a -n "$vsinclude" ]; then - info "vserver method enabled" - usevserver=yes +if [ $vservers_are_available = yes ]; then + if [ "$vsnames" = all ]; then + vsnames="$found_vservers" + else + if ! vservers_exist "$vsnames" ; then + fatal "At least one of the vservers listed in vsnames ($vsnames) does not exist." + fi + fi + if [ -n "$vsinclude" ]; then + info "Using vservers '$vsnames'" + usevserver=yes + fi +else + [ -z "$vsinclude" ] || warning 'vservers support disabled in backupninja.conf, vsincludes configuration lines will be ignored' fi # check the connection at the source and destination +[ -n "$test" ] || test=0 if [ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]; then test_connection $sourceuser $sourcehost test_connection $destuser $desthost @@ -114,7 +127,6 @@ fi # source specific checks [ "$include" != "" -o "$vsinclude" != "" ] || fatal "No source includes specified" -#TODO should I test for vsinclude if usevservers=yes? case $sourcetype in remote ) execstr_sourcepart="$sourceuser@$sourcehost::/" ;; local ) execstr_sourcepart="/" ;; @@ -143,7 +155,7 @@ fi removestr="${removestr}${destdir}/${label}"; debug "$removestr" -if [ ! $test ]; then +if [ $test = 0 ]; then output=`$removestr 2>&1` if [ $? = 0 ]; then debug $output @@ -158,29 +170,50 @@ fi execstr="$RDIFFBACKUP $options --print-statistics " +set -o noglob + +symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which is not supported." + # TODO: order the includes and excludes # excludes -for i in "$exclude"; do - str="${i//__star__/*}" - execstr="${execstr}--exclude '$str' " +for i in $exclude; do + str="${i//__star__/*}" + str=`readlink -f $str` + if [ -n "$str" ]; then + execstr="${execstr}--exclude '$str' " + else + warning "exclude statement '${i//__star__/*}' will be ignored. $symlinks_warning" + fi done # includes -for i in "$include"; do - [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'" - str="${i//__star__/*}" - execstr="${execstr}--include '$str' " +for i in $include; do + [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'" + str="${i//__star__/*}" + str=`readlink -f $str` + if [ -n "$str" ]; then + execstr="${execstr}--include '$str' " + else + warning "include statement '${i//__star__/*}' will be ignored. $symlinks_warning" + fi done # vsinclude if [ $usevserver = yes ]; then - for vserver in `ls $VROOTDIR|grep -v lost+found`; do - for vi in "$vsinclude"; do - str="${vi//__star__/*}" - execstr="${execstr}--include '$VROOTDIR/$vserver$str' " - done - done + for vserver in $vsnames; do + for vi in $vsinclude; do + str="${vi//__star__/*}" + str=`readlink -f $VROOTDIR/$vserver$str` + if [ -n "$str" ]; then + execstr="${execstr}--include '$str' " + else + warning "vsinclude statement '${vi//__star__/*}' will be ignored for VServer $vserver. $symlinks_warning" + fi + done + done fi +set +o noglob + # exclude everything else execstr="${execstr}--exclude '/*' " @@ -188,7 +221,7 @@ execstr="${execstr}--exclude '/*' " execstr="${execstr}$execstr_sourcepart $execstr_destpart" debug "$execstr" -if [ ! $test ]; then +if [ $test = 0 ]; then output=`nice -n $nicelevel su -c "$execstr" 2>&1` if [ $? = 0 ]; then debug $output