From 4973c057eb4566b97fcf1d56c3b8814516275d38 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Mon, 23 Nov 2009 16:08:06 +1100
Subject: * Adds a modicum of additional checking to the Inventory Service
 (MySQL only) * Enable "opengridmode=true" in your Inventory Connector (where
 the mysql connection strings are) to enable if you are running a
 'wide-open-grid'. * More comprehensive rollback support being implemented,
 should be available later today.

---
 OpenSim/Data/MySQL/MySQLInventoryData.cs | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

(limited to 'OpenSim/Data')

diff --git a/OpenSim/Data/MySQL/MySQLInventoryData.cs b/OpenSim/Data/MySQL/MySQLInventoryData.cs
index 0eecf06..063dd91 100644
--- a/OpenSim/Data/MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Data/MySQL/MySQLInventoryData.cs
@@ -48,6 +48,10 @@ namespace OpenSim.Data.MySQL
         /// </summary>
         private MySQLManager database;
 
+        private bool rollbackStore = false;
+        private bool opengridmode = false;
+        private string rollbackDir = "";
+
         public void Initialise()
         {
             m_log.Info("[MySQLInventoryData]: " + Name + " cannot be default-initialized!");
@@ -82,6 +86,10 @@ namespace OpenSim.Data.MySQL
                 string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
                 string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
 
+                rollbackDir = GridDataMySqlFile.ParseFileReadValue("rollbackdir");
+                rollbackStore = GridDataMySqlFile.ParseFileReadValue("rollback") == "true";
+                opengridmode = GridDataMySqlFile.ParseFileReadValue("opengridmode") == "true";
+
                 database =
                     new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling,
                                      settingPort);
@@ -851,16 +859,25 @@ namespace OpenSim.Data.MySQL
         {
             List<InventoryFolderBase> subFolders = getFolderHierarchy(folderID);
 
-            //Delete all sub-folders
-            foreach (InventoryFolderBase f in subFolders)
+            // Dont delete in OGM - makes for easier restores if someone sends a malcious command. (just restore the folder entry)
+            if (opengridmode == false)
             {
-                deleteOneFolder(f.ID);
-                deleteItemsInFolder(f.ID);
+                //Delete all sub-folders
+                foreach (InventoryFolderBase f in subFolders)
+                {
+                    deleteOneFolder(f.ID);
+                    deleteItemsInFolder(f.ID);
+                }
             }
 
             //Delete the actual row
             deleteOneFolder(folderID);
-            deleteItemsInFolder(folderID);
+
+            // Just delete the folder context in OGM
+            if (opengridmode == false)
+            {
+                deleteItemsInFolder(folderID);
+            }
         }
         
         public List<InventoryItemBase> fetchActiveGestures(UUID avatarID)
-- 
cgit v1.1