X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fbackupninja.git;a=blobdiff_plain;f=handlers%2Frdiff.helper;h=066d53aecc3e663e23aaa6731a41aa5db79b979e;hp=8be68ac71f5e5aed30b6908275270f9b9b9d48df;hb=a116f435ce8b97fdbea9fd25f91517b1fb850881;hpb=1f0d91977b69c4e284de655e958830ead163424c diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 8be68ac..066d53a 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -1,68 +1,78 @@ HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup" +declare -a rdiff_includes +declare -a rdiff_excludes + do_rdiff_dest() { - formBegin "rdiff action wizard" - formItem "keep" "$rdiff_keep" - formItem "dest_directory" "$rdiff_directory" - formItem "dest_host" "$rdiff_host" - formItem "dest_user" "$rdiff_user" - formDisplay - [ $? = 1 ] && return; - - set -- $REPLY - rdiff_keep=$1 - rdiff_directory=$2 - rdiff_host=$3 - rdiff_user=$4 + set -o noglob + formBegin "rdiff action wizard" + formItem "keep" "$rdiff_keep" + formItem "dest_directory" "$rdiff_directory" + formItem "dest_host" "$rdiff_host" + formItem "dest_user" "$rdiff_user" + formDisplay + [ $? = 1 ] && return; + + IFS=$'' + replyconverted=`echo $REPLY | tr '\n' :` + IFS=$':' + thereply=($replyconverted) + IFS=$' \t\n' + + rdiff_keep=${thereply[0]} + rdiff_directory=${thereply[1]} + rdiff_host=${thereply[2]} + rdiff_user=${thereply[3]} _dest_done="(DONE)" setDefault conn + set +o noglob } do_rdiff_src() { - formBegin "rdiff action wizard: includes" - formItem include /var/spool/cron/crontabs - formItem include /var/backups - formItem include /etc - formItem include /root - formItem include /home - formItem include '/usr/local/*bin' - formItem include '/var/lib/dpkg/status*' - formItem include - formItem include - formItem include - formDisplay - [ $? = 1 ] && return; - - rdiff_includes= - set -o noglob - for i in $REPLY; do - [ "$i" != "" ] && rdiff_includes="$rdiff_includes\ninclude = $i" - done - set +o noglob - - formBegin "rdiff action wizard: excludes" - formItem exclude '/home/*/.gnupg' - formItem exclude - formItem exclude - formDisplay - [ $? = 1 ] && return; - - rdiff_excludes= - set -o noglob - for i in $REPLY; do - [ "$i" != "" ] && rdiff_excludes="$rdiff_excludes\nexclude = $i" - done - set +o noglob + #echo ${rdiff_includes[@]} + set -o noglob + formBegin "rdiff action wizard: includes" + for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do + formItem include ${rdiff_includes[$i]} + done + formItem include + formItem include + formItem include + formDisplay + [ $? = 1 ] && return; + + unset rdiff_includes + rdiff_includes=($REPLY) + + formBegin "rdiff action wizard: excludes" + for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do + formItem exclude ${rdiff_excludes[$i]} + done + formItem exclude + formItem exclude + formDisplay + [ $? = 1 ] && return; + + unset rdiff_excludes + rdiff_excludes=($REPLY) - _src_done="(DONE)" - setDefault dest + _src_done="(DONE)" + setDefault dest + set +o noglob } do_rdiff_con() { + IFS=$' \t\n' if [ "$_dest_done" = "" ]; then - msgBox "rdiff action wizard: error" "You must first configure the destination" + msgBox "rdiff action wizard: error" "You must first configure the destination." + return + elif [ "$rdiff_user" = "" ]; then + msgBox "rdiff action wizard: error" "You must first configure the destination user." + return + elif [ "$rdiff_host" = "" ]; then + msgBox "rdiff action wizard: error" "You must first configure the destination host." return else booleanBox "rdiff action wizard" "This step will create a ssh key for the local root user with no passphrase (if one does not already exist), and attempt to copy root's public ssh key to authorized_keys file of $rdiff_user@$rdiff_host. This will allow the local root to make unattended backups to $rdiff_user@$rdiff_host. Are you sure you want to continue?" @@ -78,15 +88,18 @@ do_rdiff_con() { ssh -o PreferredAuthentications=publickey $rdiff_host -l $rdiff_user "exit" 2> /dev/null if [ $? -ne 0 ]; then - echo "Copying root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host. Specify the password for user $rdiff_user@$rdiff_host." + echo "Copying root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host. When prompted, specify the password for user $rdiff_user@$rdiff_host." ssh-copy-id -i /root/.ssh/id_[rd]sa.pub $rdiff_user@$rdiff_host if [ $? -ne 0 ]; then - echo "Couldn't copy root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host. This time, testing whether directory is writable." + echo "FAILED: Couldn't copy root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host." ssh $rdiff_user@$rdiff_host 'test -w .ssh || test -w .' - case $? in + result=$? + echo "Hit return to continue." + read + case $result in 0 ) msgBox "rdiff action wizard: error" "Directories are writable: Probably just a typo the first time." ;; 1 ) msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but unable to write. Check ownership and modes of ~$rdiff_user on $rdiff_host." ;; - 255 ) msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password." ;; + 255 ) msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." ;; * ) msgBox "rdiff action wizard: error" "Unexpected error." ;; esac return @@ -112,9 +125,15 @@ do_rdiff_finish() { type = local keep = $rdiff_keep EOF - echo -n -e "$rdiff_includes" >> $next_filename - echo -e "$rdiff_excludes" >> $next_filename - cat >> $next_filename <> $next_filename <