r3554@krups: intrigeri | 2005-11-15 04:09:01 +0100
[matthijs/upstream/backupninja.git] / handlers / rdiff.helper
index fdbdefe9ab5675b73df98b265d1bbec9a5fb0d87..68ba8a2d49db1ea71ab70c9e3917f8f6ead65be5 100644 (file)
@@ -1,4 +1,3 @@
-
 HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup"
 
 declare -a rdiff_includes
@@ -12,7 +11,7 @@ do_rdiff_dest() {
     formItem "dest_host" "$rdiff_host"
     formItem "dest_user" "$rdiff_user"
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   IFS=$''
   replyconverted=`echo $REPLY | tr '\n' :`
@@ -41,7 +40,7 @@ do_rdiff_src() {
     formItem include 
     formItem include 
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   unset rdiff_includes
   rdiff_includes=($REPLY)
@@ -53,7 +52,7 @@ do_rdiff_src() {
     formItem exclude 
     formItem exclude 
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   unset rdiff_excludes
   rdiff_excludes=($REPLY)
@@ -63,7 +62,7 @@ do_rdiff_src() {
   set +o noglob
 }
 
-do_ssh_con() {
+do_rdiff_ssh_con() {
   IFS=$' \t\n'
   if [ "$_dest_done" = "" ]; then
     msgBox "rdiff action wizard: error" "You must first configure the destination."
@@ -76,7 +75,7 @@ do_ssh_con() {
     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.\n\n\nAre you sure you want to continue?"
-    [ $? = 1 ] && return
+    [ $? = 0 ] || return
   fi
 
   if [ ! -f /root/.ssh/id_dsa.pub -a ! -f /root/.ssh/id_rsa.pub ]; then
@@ -112,12 +111,58 @@ do_ssh_con() {
     echo "Hit return to continue."
     read
   fi
-do_rdiff_con
+  # test to see if the remote rdiff backup directory exists and is writable
+  echo "Testing to see if remote rdiff backup directory exists and is writable"
+  ssh $rdiff_user@$rdiff_host "test -d ${rdiff_directory}"
+  if [ $? -eq 0 ]
+  then
+       ssh $rdiff_user@$rdiff_host "test -w $rdiff_directory"
+       if [ $? -ne 0 ]
+       then
+               msgBox "destination directory is not writable!" "The remote destination directory is not writable by the user you specified. Please fix the permissions on the directory and then try again."
+               remote_status=1
+       else
+               remote_status=0
+       fi
+  else
+       booleanBox "Remote directory does not exist" "The destination backup directory does not exist, do you want me to create it for you?"
+       if [ $? = 0 ]
+       then
+               ssh $rdiff_user@$rdiff_host "mkdir -p ${rdiff_directory}"
+               result=$?
+               echo "Hit return to continue."
+               read
+               case $result in
+                       0)   
+                               msgBox "rdiff action wizard: success" "Creation of the remote destination directory was a success!" 
+                               remote_status=0
+                       ;;
+                       1)   
+                               msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to create the destination directory, check the directory permissions." 
+                               remote_status=1
+                       ;;
+                       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." 
+                               remote_status=1
+                       ;;
+                       *)   
+                               msgBox "rdiff action wizard: error" "Unexpected error." 
+                               remote_status=1
+                       ;;
+                       esac 
+                       return
+         fi
+  fi
+  
+  if [ $remote_status -ne 1 ]
+  then
+       do_rdiff_con
+  fi
 }
 
 do_rdiff_con() {
   echo "Testing to make sure destination has rdiff-backup installed and is compatible."
-  remote_result=`rdiff-backup --test-server $rdiff_user@$rdiff_host::/ 2>&1 >&-`
+  remote_result=`/usr/bin/rdiff-backup --test-server $rdiff_user@$rdiff_host::/ 2>&1 >&-`
   if [ $? -ne 0 ]
   then
        echo $remote_result | grep -q "command not found"
@@ -189,10 +234,10 @@ keep = $rdiff_keep
 EOF
     set -o noglob
     for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do
-        echo include = ${rdiff_includes[$i]}
+        echo "include = ${rdiff_includes[$i]}" >> $next_filename
     done
-    for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do
-        echo exclude = ${rdiff_excludes[$i]}
+    for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do
+        echo exclude = ${rdiff_excludes[$i]} >> $next_filename
     done
     set +o noglob
     cat >> $next_filename <<EOF
@@ -218,13 +263,13 @@ rdiff_main_menu() {
         dest "$destitem" \
         conn "$conitem" \
         finish "finish and create config file"
-    [ $? = 1 ] && return;
+    [ $? = 0 ] || return
     result="$REPLY"
 
     case "$result" in
        "src") do_rdiff_src;;
        "dest") do_rdiff_dest;;
-       "conn") do_ssh_con;;
+       "conn") do_rdiff_ssh_con;;
        "adv") do_rdiff_adv;;
        "finish")
           if [[ "$_con_done$_dest_done$_src_done" != "(DONE)(DONE)(DONE)" ]]; then
@@ -249,8 +294,10 @@ rdiff_wizard() {
   rdiff_directory=/backup/`hostname`
   rdiff_user=
   rdiff_host=
+  set -o noglob
   rdiff_includes=(/var/spool/cron/crontabs /var/backups /etc /root /home /usr/local/*bin /var/lib/dpkg/status*)
   rdiff_excludes=(/home/*/.gnupg)
+  set +o noglob
   rdiff_main_menu
 }