From b8da15c10448993a0bb81e8d1b1a31250515c1eb Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 3 Sep 2010 22:38:40 +0100
Subject: In RemoveAdminPlugin, use a .ini file template in
XmlRpcCreateRegionMethod rather than an older XML one
This is a patch from http://opensimulator.org/mantis/view.php?id=4973. Thanks randomhuman
---
.../RemoteController/RemoteAdminPlugin.cs | 30 ++++++++++++++++++----
1 file changed, 25 insertions(+), 5 deletions(-)
(limited to 'OpenSim/ApplicationPlugins/RemoteController')
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index da3d3c2..c713e19 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -470,6 +470,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
/// - estate_name
/// the name of the estate to join (or to create if it doesn't
/// already exist)
+ /// - region_file
+ /// The name of the file to persist the region specifications to.
+ /// If omitted, the region_file_template setting from OpenSim.ini will be used. (optional)
///
///
/// XmlRpcCreateRegionMethod returns
@@ -583,7 +586,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
bool persist = Convert.ToBoolean((string) requestData["persist"]);
if (persist)
{
- // default place for region XML files is in the
+ // default place for region configuration files is in the
// Regions directory of the config dir (aka /bin)
string regionConfigPath = Path.Combine(Util.configDir(), "Regions");
try
@@ -596,19 +599,36 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
// No INI setting recorded.
}
- string regionXmlPath = Path.Combine(regionConfigPath,
+
+ string regionIniPath;
+
+ if (requestData.Contains("region_file"))
+ {
+ // Make sure that the file to be created is in a subdirectory of the region storage directory.
+ string requestedFilePath = Path.Combine(regionConfigPath, (string) requestData["region_file"]);
+ string requestedDirectory = Path.GetDirectoryName(Path.GetFullPath(requestedFilePath));
+ if (requestedDirectory.StartsWith(Path.GetFullPath(regionConfigPath)))
+ regionIniPath = requestedFilePath;
+ else
+ throw new Exception("Invalid location for region file.");
+ }
+ else
+ {
+ regionIniPath = Path.Combine(regionConfigPath,
String.Format(
m_config.GetString("region_file_template",
- "{0}x{1}-{2}.xml"),
+ "{0}x{1}-{2}.ini"),
region.RegionLocX.ToString(),
region.RegionLocY.ToString(),
regionID.ToString(),
region.InternalEndPoint.Port.ToString(),
region.RegionName.Replace(" ", "_").Replace(":", "_").
Replace("/", "_")));
+ }
+
m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}",
- region.RegionID, regionXmlPath);
- region.SaveRegionToFile("dynamic region", regionXmlPath);
+ region.RegionID, regionIniPath);
+ region.SaveRegionToFile("dynamic region", regionIniPath);
}
else
{
--
cgit v1.1