From c2f1771c63108c78b799a4f107cabe7e33984866 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Thu, 14 Aug 2008 18:08:22 +0000 Subject: Make the estate owner work. Changes permissions checks to allow the estate owner user the ability to add and remove estate managers, and have EM rights outside of that. --- OpenSim/Framework/EstateSettings.cs | 11 ++++++++ .../Region/ClientStack/LindenUDP/LLClientView.cs | 31 +++++++++++----------- .../Modules/World/Estate/EstateManagementModule.cs | 12 +++------ .../Modules/World/Permissions/PermissionsModule.cs | 8 +++++- .../Environment/Scenes/SceneExternalChecks.cs | 6 ++--- .../ScriptEngine/Common/OSSL_BuilIn_Commands.cs | 2 +- .../Shared/Api/Implementation/OSSL_Api.cs | 2 +- 7 files changed, 42 insertions(+), 30 deletions(-) diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs index 8a00f9d..8b076fe 100644 --- a/OpenSim/Framework/EstateSettings.cs +++ b/OpenSim/Framework/EstateSettings.cs @@ -312,9 +312,20 @@ namespace OpenSim.Framework public bool IsEstateManager(LLUUID avatarID) { + if (IsEstateOwner(avatarID)) + return true; + return l_EstateManagers.Contains(avatarID); } + public bool IsEstateOwner(LLUUID avatarID) + { + if (avatarID == m_EstateOwner) + return true; + + return false; + } + public bool IsBanned(LLUUID avatarID) { foreach (EstateBan ban in l_EstateBans) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 245f533..bfc7b41 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -5465,14 +5465,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP switch (Helpers.FieldToUTF8String(messagePacket.MethodData.Method)) { case "getinfo": - - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice); } break; case "setregioninfo": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { OnSetEstateFlagsRequest(convertParamStringToBool(messagePacket.ParamList[0].Parameter), convertParamStringToBool(messagePacket.ParamList[1].Parameter), convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter), @@ -5485,7 +5484,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; // case "texturebase": -// if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) +// if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) // { // foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) // { @@ -5500,7 +5499,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // } // break; case "texturedetail": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { @@ -5518,7 +5517,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case "textureheights": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { @@ -5539,7 +5538,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OnCommitEstateTerrainTextureRequest(this); break; case "setregionterrain": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { if (messagePacket.ParamList.Length != 9) { @@ -5578,7 +5577,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case "restart": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { // There's only 1 block in the estateResetSim.. and that's the number of seconds till restart. foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) @@ -5592,7 +5591,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "estatechangecovenantid": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { @@ -5602,7 +5601,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "estateaccessdelta": // Estate access delta manages the banlist and allow list too. - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { int estateAccessType = Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter)); OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice, estateAccessType, new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter))); @@ -5610,7 +5609,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "simulatormessage": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { LLUUID invoice = messagePacket.MethodData.Invoice; LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)); @@ -5621,7 +5620,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "instantmessage": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { if (messagePacket.ParamList.Length < 5) break; @@ -5634,7 +5633,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "setregiondebug": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { LLUUID invoice = messagePacket.MethodData.Invoice; LLUUID SenderID = messagePacket.AgentData.AgentID; @@ -5646,7 +5645,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "teleporthomeuser": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { LLUUID invoice = messagePacket.MethodData.Invoice; LLUUID SenderID = messagePacket.AgentData.AgentID; @@ -5672,7 +5671,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; case "terrain": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { handlerBakeTerrain = OnBakeTerrain; if (handlerBakeTerrain != null) @@ -5683,7 +5682,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP break; case "estatechangeinfo": - if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId, false)) { LLUUID invoice = messagePacket.MethodData.Invoice; LLUUID SenderID = messagePacket.AgentData.AgentID; diff --git a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs index 1be587a..d22aac6 100644 --- a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs @@ -218,7 +218,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate switch (estateAccessType) { case 64: - if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) + if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId, false) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; @@ -267,7 +267,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate } break; case 128: - if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) + if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId, false) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; @@ -303,9 +303,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate break; case 256: - // This needs to be updated for SuperEstateOwnerUser.. a non existing user in the estatesettings.xml - // So make sure you really trust your region owners. because they can add other estate manaagers to your other estates - if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) + if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId, true) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateManager(user); m_scene.RegionInfo.EstateSettings.Save(); @@ -318,9 +316,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate break; case 512: - // This needs to be updated for SuperEstateOwnerUser.. a non existing user in the estatesettings.xml - // So make sure you really trust your region owners. because they can add other estate manaagers to your other estates - if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) + if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId, true) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); m_scene.RegionInfo.EstateSettings.Save(); diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs index 0dfcb44..25ea282 100644 --- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs @@ -626,11 +626,17 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions return GenericCommunicationPermission(user, target); } - private bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene) + private bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene, bool ownerCommand) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); if (m_bypassPermissions) return m_bypassPermissionsValue; + if (m_scene.RegionInfo.EstateSettings.IsEstateOwner(user)) + return true; + + if (ownerCommand) + return false; + return GenericEstatePermission(user); } diff --git a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs index c7d1ce2..0b2cc9e 100644 --- a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs +++ b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs @@ -761,7 +761,7 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region CAN ISSUE ESTATE COMMAND - public delegate bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene); + public delegate bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene, bool ownerCommand); private List CanIssueEstateCommandCheckFunctions = new List(); public void addCheckIssueEstateCommand(CanIssueEstateCommand delegateFunc) @@ -775,11 +775,11 @@ namespace OpenSim.Region.Environment.Scenes CanIssueEstateCommandCheckFunctions.Remove(delegateFunc); } - public bool ExternalChecksCanIssueEstateCommand(LLUUID user) + public bool ExternalChecksCanIssueEstateCommand(LLUUID user, bool ownerCommand) { foreach (CanIssueEstateCommand check in CanIssueEstateCommandCheckFunctions) { - if (check(user, m_scene) == false) + if (check(user, m_scene, ownerCommand) == false) { return false; } diff --git a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs index ca12a42..687d5e1 100644 --- a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs @@ -282,7 +282,7 @@ namespace OpenSim.Region.ScriptEngine.Common public int osRegionRestart(double seconds) { m_host.AddScriptLPS(1); - if (World.ExternalChecks.ExternalChecksCanIssueEstateCommand(m_host.OwnerID)) + if (World.ExternalChecks.ExternalChecksCanIssueEstateCommand(m_host.OwnerID, false)) { World.Restart((float)seconds); return 1; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 914aeac..2e87754 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -121,7 +121,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } m_host.AddScriptLPS(1); - if (World.ExternalChecks.ExternalChecksCanIssueEstateCommand(m_host.OwnerID)) + if (World.ExternalChecks.ExternalChecksCanIssueEstateCommand(m_host.OwnerID, false)) { World.Restart((float)seconds); return 1; -- cgit v1.1