From dc7e3ddc3e5a622ae86670830530aa4a2206e762 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Thu, 23 Oct 2008 11:14:25 +0000 Subject: fix: recent patch to XmlRpcCreateRegionMethod introduced master avatar UUID parameter without checking for it at the method entry. this patch adds logic to obtain the master UUID via the user profile service, and, if the master avatar does not exist, will create the user. in any case the UUID is then the one supplied by the user profile service. --- .../RemoteController/RemoteAdminPlugin.cs | 28 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index d7ca679..f29a62f 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -441,12 +441,30 @@ namespace OpenSim.ApplicationPlugins.RemoteController scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY)); - region.ExternalHostName = (string) requestData["external_address"]; + region.ExternalHostName = (string)requestData["external_address"]; - region.MasterAvatarFirstName = (string) requestData["region_master_first"]; - region.MasterAvatarLastName = (string) requestData["region_master_last"]; - region.MasterAvatarSandboxPassword = (string) requestData["region_master_password"]; - region.MasterAvatarAssignedUUID = new UUID(requestData["region_master_uuid"].ToString()); + string masterFirst = (string)requestData["region_master_first"]; + string masterLast = (string)requestData["region_master_last"]; + string masterPassword = (string)requestData["region_master_password"]; + + UUID userID = UUID.Zero; + UserProfileData userProfile = m_app.CommunicationsManager.UserService.GetUserProfile(masterFirst, masterLast); + if (null == userProfile) + { + m_log.InfoFormat("master avatar does not exist, creating it"); + userID = m_app.CreateUser(masterFirst, masterLast, masterPassword, region.RegionLocX, region.RegionLocY); + if (userID == UUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}", + masterFirst, masterLast)); + } + else + { + userID = userProfile.ID; + } + + region.MasterAvatarFirstName = masterFirst; + region.MasterAvatarLastName = masterLast; + region.MasterAvatarSandboxPassword = masterPassword; + region.MasterAvatarAssignedUUID = userID; bool persist = Convert.ToBoolean((string)requestData["persist"]); if (persist) -- cgit v1.1