From 604a1929bacc58297963a8b646288ae2d46c2ee1 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Sun, 25 Jun 2017 11:02:47 +0100
Subject: [PATCH] Improve restore of mariadb

---
 src/freedombone-pass          |  2 +-
 src/freedombone-restore-local | 29 ++++++++++++++++++++---------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/freedombone-pass b/src/freedombone-pass
index 0e777cea3..2682456f4 100755
--- a/src/freedombone-pass
+++ b/src/freedombone-pass
@@ -22,7 +22,7 @@
 # License
 # =======
 #
-# Copyright (C) 2016 Bob Mottram <bob@freedombone.net>
+# Copyright (C) 2016-2017 Bob Mottram <bob@freedombone.net>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
diff --git a/src/freedombone-restore-local b/src/freedombone-restore-local
index f935e973a..40fdb45fd 100755
--- a/src/freedombone-restore-local
+++ b/src/freedombone-restore-local
@@ -83,9 +83,6 @@ if [ -f $COMPLETION_FILE ]; then
     ADMIN_USERNAME=$(get_completion_param "Admin user")
 fi
 
-# MariaDB password
-DATABASE_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb)
-
 function check_backup_exists {
     if [ ! -d $USB_MOUNT/backup ]; then
         echo $"No backup directory found on the USB drive."
@@ -209,13 +206,17 @@ function restore_mariadb {
         keep_database_running
         temp_restore_dir=/root/tempmariadb
         restore_directory_from_usb $temp_restore_dir mariadb
-        echo $'Obtaining MariaDB password'
-        db_pass=$(${PROJECT_NAME}-pass -u root -a mariadb)
+
+        store_original_mariadb_password
+
+        echo $'Obtaining original MariaDB password'
+        db_pass=$(cat /root/.mariadboriginal)
         if [ ${#db_pass} -gt 0 ]; then
             echo $"Restore the MariaDB user table"
-            mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" mysql -o < ${temp_restore_dir}${temp_restore_dir}/mysql.sql)
+            mysqlsuccess=$(mysql -u root --password="$db_pass" mysql -o < ${temp_restore_dir}${temp_restore_dir}/mysql.sql)
             if [ ! "$?" = "0" ]; then
                 echo $"Try again using the password obtained from backup"
+                db_pass=$(${PROJECT_NAME}-pass -u root -a mariadb)
                 mysqlsuccess=$(mysql -u root --password="$db_pass" mysql -o < ${temp_restore_dir}${temp_restore_dir}/mysql.sql)
             fi
             if [ ! "$?" = "0" ]; then
@@ -226,9 +227,9 @@ function restore_mariadb {
             fi
             echo $"Restarting database"
             systemctl restart mariadb
-            echo $"Change the MariaDB password to the backup version"
-            DATABASE_PASSWORD="$db_pass"
-            ${PROJECT_NAME}-pass -u root -a mariadb -p "$DATABASE_PASSWORD"
+            echo $"Ensure MariaDB handles authentication"
+            MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb)
+            mariadb_fix_authentication
         fi
         rm -rf $temp_restore_dir
     fi
@@ -248,6 +249,15 @@ function restore_letsencrypt {
     fi
 }
 
+function store_original_mariadb_password {
+    if [ ! -f /root/.mariadboriginal ]; then
+        echo $'Storing original mariadb password'
+        ORIGINAL_MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb)
+        # We can store this in plaintext because it will soon be of historical interest only
+        echo -n "$ORIGINAL_MARIADB_PASSWORD" > /root/.mariadboriginal
+    fi
+}
+
 function restore_passwordstore {
     if [[ $RESTORE_APP != 'all' ]]; then
         if [[ $RESTORE_APP != 'passwords' ]]; then
@@ -255,6 +265,7 @@ function restore_passwordstore {
         fi
     fi
     if [ -d $USB_MOUNT/backup/passwordstore ]; then
+        store_original_mariadb_password
         echo $"Restoring password store"
         restore_directory_from_usb / passwordstore
     fi
-- 
GitLab