r238@um: micah | 2005-12-27 13:32:57 -0500
[matthijs/upstream/backupninja.git] / handlers / rdiff.helper
index c69184862fb81e87f8c011555047911cd931e342..8642a42aab4b3d4719106365e75fb2a5d697b9f8 100644 (file)
@@ -1,4 +1,3 @@
-
 HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup"
 
 declare -a rdiff_includes
@@ -6,13 +5,13 @@ declare -a rdiff_excludes
 
 do_rdiff_dest() {
   set -o noglob
-  formBegin "rdiff action wizard"
+  formBegin "$rdiff_title"
     formItem "keep" "$rdiff_keep"
     formItem "dest_directory" "$rdiff_directory"
     formItem "dest_host" "$rdiff_host"
     formItem "dest_user" "$rdiff_user"
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   IFS=$''
   replyconverted=`echo $REPLY | tr '\n' :`
@@ -33,7 +32,7 @@ do_rdiff_dest() {
 do_rdiff_src() {
   #echo ${rdiff_includes[@]}
   set -o noglob
-  formBegin "rdiff action wizard: includes"
+  formBegin "$rdiff_title: includes"
     for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do
        formItem include ${rdiff_includes[$i]}
     done
@@ -41,19 +40,19 @@ do_rdiff_src() {
     formItem include 
     formItem include 
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   unset rdiff_includes
   rdiff_includes=($REPLY)
 
-  formBegin "rdiff action wizard: excludes" 
+  formBegin "$rdiff_title: excludes" 
     for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do
        formItem exclude ${rdiff_excludes[$i]}
     done
     formItem exclude 
     formItem exclude 
   formDisplay
-  [ $? = 1 ] && return;
+  [ $? = 0 ] || return
 
   unset rdiff_excludes
   rdiff_excludes=($REPLY)
@@ -63,20 +62,20 @@ 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."
+    msgBox "$rdiff_title: error" "You must first configure the destination."
     return
   elif [ "$rdiff_user" = "" ]; then
-    msgBox "rdiff action wizard: error" "You must first configure the destination user."
+    msgBox "$rdiff_title: 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."
+    msgBox "$rdiff_title: 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.\n\n\nAre you sure you want to continue?"
-    [ $? = 1 ] && return
+    booleanBox "$rdiff_title" "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?"
+    [ $? = 0 ] || return
   fi
 
   if [ ! -f /root/.ssh/id_dsa.pub -a ! -f /root/.ssh/id_rsa.pub ]; then
@@ -97,10 +96,10 @@ do_ssh_con() {
       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. Also, make sure sshd is running on the destination host." ;;
-        * )   msgBox "rdiff action wizard: error" "Unexpected error." ;;
+        0 )   msgBox "$rdiff_title: error" "Directories are writable: Probably just a typo the first time." ;;
+        1 )   msgBox "$rdiff_title: 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_title: 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_title: error" "Unexpected error." ;;
       esac 
       return
     else
@@ -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_title: success" "Creation of the remote destination directory was a success!" 
+                               remote_status=0
+                       ;;
+                       1)   
+                               msgBox "$rdiff_title: 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_title: 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_title: 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"
@@ -134,17 +179,17 @@ do_rdiff_con() {
                                read
                                case $result in
                                        0)   
-                                               msgBox "rdiff action wizard: success" "Installation of rdiff-backup was a success!" 
+                                               msgBox "$rdiff_title: success" "Installation of rdiff-backup was a success!" 
                                                do_rdiff_con
                                        ;;
                                        1)   
-                                               msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to install the package for some reason." 
+                                               msgBox "$rdiff_title: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to install the package for some reason." 
                                        ;;
                                        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_title: 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." 
+                                               msgBox "$rdiff_title: error" "Unexpected error." 
                                        ;;
                                esac 
                                return
@@ -213,22 +258,22 @@ rdiff_main_menu() {
     destitem="configure backup destination $_dest_done"
     conitem="set up ssh keys and test remote connection $_con_done"
     advitem="edit advanced settings $_adv_done"
-    menuBox "rdiff action wizard" "choose a step:" \
+    menuBox "$rdiff_title" "choose a step:" \
         src "$srcitem" \
         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
-            msgBox "rdiff action wizard" "You cannot create the configuration file until the other steps are completed."
+            msgBox "$rdiff_title" "You cannot create the configuration file until the other steps are completed."
           else
             do_rdiff_finish
             return
@@ -241,6 +286,9 @@ rdiff_main_menu() {
 
 rdiff_wizard() {
   require_packages rdiff-backup
+  
+  # Global variables
+  rdiff_title="rdiff-backup action wizard"
   _src_done=
   _dest_done=
   _con_done=
@@ -249,8 +297,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
 }