mirror of
https://github.com/opensim/opensim.git
synced 2026-08-08 18:25:33 +08:00
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.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<CanIssueEstateCommand> CanIssueEstateCommandCheckFunctions = new List<CanIssueEstateCommand>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user