Added remote destination directory checking and auto creation if doesn't exist.
authormicah <micah@758a04ac-41e6-0310-8a23-8373a73cc35d>
Sat, 5 Nov 2005 23:07:19 +0000 (23:07 +0000)
committermicah <micah@758a04ac-41e6-0310-8a23-8373a73cc35d>
Sat, 5 Nov 2005 23:07:19 +0000 (23:07 +0000)
Also fixed a bug in the rdiff handler that caused a unary operation error if
the variable wasn't fixed

git-svn-id: http://code.autistici.org/svn/backupninja/trunk@222 758a04ac-41e6-0310-8a23-8373a73cc35d

ChangeLog
handlers/rdiff
handlers/rdiff.helper

index 03b475a1f6de1f237c87f3c3abb7e9cc2807e18a..70f58808f67f1d723538b4d42855ee493266e029 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,8 +8,10 @@ version 0.9.1 -- unreleased
        made ninjahelper create files with mode 600 rather than 000
        changed subversion handler to use svnadmin hotcopy instead of
                the unsupported hot-copy.py script, which was moved in Debian
-       update rdiff ninjahelper to detect and auto-install rdiff-backup
-               on the remote machine if possible
+       update rdiff ninjahelper
+               now detects and auto-install rdiff-backup on the remote 
+               machine if possible, also tests the remote backup directory
+               and offers to create it if it doesn't exist
 
 version 0.9 -- October 19 2005
        *** IMPORTANT CHANGE, UPGRADE AT ONCE ***
index 9de8650e1a289414d659bddc9036b1b9a36ec7b5..05aacc319f908baa2b8a208e611d1afb89d67227 100644 (file)
@@ -104,7 +104,7 @@ then
 fi
 
 # check the connection at the source and destination
-if [ "$testconnect" == "yes" -o $test ]; then
+if [ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]; then
        test_connection $sourceuser $sourcehost
        test_connection $destuser $desthost
 fi
index c69184862fb81e87f8c011555047911cd931e342..0bd982c3d415b3b6d79689c13e6f10c273936750 100644 (file)
@@ -1,4 +1,3 @@
-
 HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup"
 
 declare -a rdiff_includes
@@ -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"