From 943f3c9934a84e013bd5fdce831d5e3aa752f219 Mon Sep 17 00:00:00 2001
From: david_page <david_page@localhost>
Date: Wed, 10 Oct 2007 22:02:54 +0000
Subject: [PATCH] issue 2440 bin/restore of encrypted or signed backup requires online server instance

---
 opends/src/messages/messages/tools.properties                         |    2 ++
 opends/src/server/org/opends/server/tools/RestoreDB.java              |   37 ++++++++++++++++++++-----------------
 opends/src/server/org/opends/server/extensions/ConfigFileHandler.java |    6 +++---
 opends/src/server/org/opends/server/backends/jeb/BackupManager.java   |    6 +++---
 opends/src/server/org/opends/server/backends/SchemaBackend.java       |    6 +++---
 5 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/opends/src/messages/messages/tools.properties b/opends/src/messages/messages/tools.properties
index 685e7ec..e3e539a 100644
--- a/opends/src/messages/messages/tools.properties
+++ b/opends/src/messages/messages/tools.properties
@@ -535,6 +535,8 @@
  backups
 SEVERE_ERR_RESTOREDB_ERROR_DURING_BACKUP_317=An unexpected error occurred \
  while attempting to restore backup %s from %s:  %s
+SEVERE_ERR_RESTOREDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE_318=Restoring an \
+ encrypted or signed backup requires a connection to an online server
 SEVERE_ERR_BACKUPDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE_325=The use of the \
  %s argument or the %s argument requires a connection to an online server \
  instance
diff --git a/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opends/src/server/org/opends/server/backends/SchemaBackend.java
index 50ec617..9ff9b40 100644
--- a/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -4257,7 +4257,7 @@
         }
 
         Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_CIPHER.get(
-                e.getMessage());
+                stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
@@ -4624,8 +4624,8 @@
       }
       catch (CryptoManager.CryptoManagerException e)
       {
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER.
-            get(backupFile.getPath(), e.getMessage());
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER.get(
+                backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
diff --git a/opends/src/server/org/opends/server/backends/jeb/BackupManager.java b/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
index 24afa97..f8323cf 100644
--- a/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
+++ b/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
@@ -355,7 +355,7 @@
         }
 
         Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
-                e.getMessage());
+                stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
@@ -984,7 +984,7 @@
         }
 
         Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
-            e.getMessage());
+            stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
@@ -1313,7 +1313,7 @@
         }
 
         Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
-                e.getMessage());
+                stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
diff --git a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
index 51897bd..0b33b6b 100644
--- a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
+++ b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -2758,7 +2758,7 @@
         }
 
         Message message = ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER.get(
-            e.getMessage());
+            stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
@@ -3165,8 +3165,8 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER.
-            get(e.getMessage(), backupFile.getPath());
+        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER.get(
+                backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
diff --git a/opends/src/server/org/opends/server/tools/RestoreDB.java b/opends/src/server/org/opends/server/tools/RestoreDB.java
index b3c75a7..60f5799 100644
--- a/opends/src/server/org/opends/server/tools/RestoreDB.java
+++ b/opends/src/server/org/opends/server/tools/RestoreDB.java
@@ -561,33 +561,36 @@
 
 
     // If a backup ID was specified, then make sure it is valid.  If none was
-    // provided, then choose the latest backup from the archive.
+    // provided, then choose the latest backup from the archive.  Encrypted
+    // or signed backups cannot be restored to a local (offline) server
+    // instance.
     String backupID;
-    if (backupIDString.isPresent())
     {
-      backupID = backupIDString.getValue();
-      BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
+      BackupInfo backupInfo = backupDir.getLatestBackup();
       if (backupInfo == null)
       {
-        Message message = ERR_RESTOREDB_INVALID_BACKUP_ID.get(
-            backupID, backupDirectory.getValue());
-        logError(message);
-        return 1;
-      }
-    }
-    else
-    {
-      BackupInfo latestBackup = backupDir.getLatestBackup();
-      if (latestBackup == null)
-      {
         Message message = ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
             backupDirectory.getValue());
         logError(message);
         return 1;
       }
-      else
+      backupID = backupInfo.getBackupID();
+      if (backupIDString.isPresent())
       {
-        backupID = latestBackup.getBackupID();
+        backupID = backupIDString.getValue();
+        backupInfo = backupDir.getBackupInfo(backupID);
+        if (backupInfo == null)
+        {
+          Message message = ERR_RESTOREDB_INVALID_BACKUP_ID.get(
+                  backupID, backupDirectory.getValue());
+          logError(message);
+          return 1;
+        }
+      }
+      if (backupInfo.isEncrypted() || null != backupInfo.getSignedHash()) {
+        Message message = ERR_RESTOREDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE.get();
+        logError(message);
+        return 1;
       }
     }
 

--
Gitblit v1.10.0