From 6c71a04da8150f7948df7a43f532e525d44cc4e7 Mon Sep 17 00:00:00 2001
From: mingchen
Date: Thu, 8 May 2008 19:37:57 +0000
Subject: *Added all the permission checks to the sceneexternalchecks and
modified permission module to follow this. *This makes permission checking
much more modular; allows restrictive and granting module to be made without
modifying the existing permission module
---
.../Region/ClientStack/LindenUDP/LLClientView.cs | 26 +-
.../Environment/Interfaces/IScenePermissions.cs | 66 ---
.../Modules/World/Permissions/PermissionsModule.cs | 100 ++--
.../Modules/World/Terrain/TerrainModule.cs | 2 +-
OpenSim/Region/Environment/Scenes/InnerScene.cs | 54 +-
.../Region/Environment/Scenes/Scene.Inventory.cs | 12 +-
.../Environment/Scenes/Scene.PacketHandlers.cs | 4 +-
OpenSim/Region/Environment/Scenes/Scene.cs | 8 +-
.../Environment/Scenes/SceneExternalChecks.cs | 581 +++++++++++++++++++--
.../ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 6 +-
.../ScriptEngine/Common/OSSL_BuilIn_Commands.cs | 6 +-
11 files changed, 658 insertions(+), 207 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 51c7184..5bd2e6c 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -5070,13 +5070,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
case "getinfo":
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice);
}
break;
case "setregioninfo":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
OnSetEstateFlagsRequest(convertParamStringToBool(messagePacket.ParamList[0].Parameter),convertParamStringToBool(messagePacket.ParamList[1].Parameter),
convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter),
@@ -5089,7 +5089,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
break;
case "texturebase":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
{
@@ -5104,7 +5104,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "texturedetail":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
{
@@ -5122,7 +5122,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
break;
case "textureheights":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
{
@@ -5143,7 +5143,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OnCommitEstateTerrainTextureRequest(this);
break;
case "setregionterrain":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
if (messagePacket.ParamList.Length != 9)
{
@@ -5178,7 +5178,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
break;
case "restart":
- if (((Scene)m_scene).Permissions.CanRestartSim(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanRestartSim(this.AgentId))
{
// There's only 1 block in the estateResetSim.. and that's the number of seconds till restart.
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
@@ -5192,7 +5192,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "estatechangecovenantid":
- if (((Scene)m_scene).Permissions.CanEditEstateTerrain(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
{
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
{
@@ -5202,7 +5202,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "estateaccessdelta": // Estate access delta manages the banlist and allow list too.
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
int estateAccessType = Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter));
OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice,estateAccessType,new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)));
@@ -5210,7 +5210,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "simulatormessage":
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
LLUUID invoice = messagePacket.MethodData.Invoice;
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
@@ -5221,7 +5221,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "instantmessage":
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
LLUUID invoice = messagePacket.MethodData.Invoice;
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
@@ -5232,7 +5232,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "setregiondebug":
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
LLUUID invoice = messagePacket.MethodData.Invoice;
LLUUID SenderID = messagePacket.AgentData.AgentID;
@@ -5244,7 +5244,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
break;
case "teleporthomeuser":
- if (((Scene)m_scene).Permissions.GenericEstatePermission(this.AgentId))
+ if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
{
LLUUID invoice = messagePacket.MethodData.Invoice;
LLUUID SenderID = messagePacket.AgentData.AgentID;
diff --git a/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs b/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs
index 5d161bb..06c6611 100644
--- a/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs
+++ b/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs
@@ -32,72 +32,6 @@ namespace OpenSim.Region.Environment.Interfaces
public interface IScenePermissions
{
bool BypassPermissions { get; set; }
-
- #region Object Permissions
-
- bool CanRezObject(LLUUID user, LLVector3 position, int count);
-
- ///
- /// Permissions check - can user delete an object?
- ///
- /// User attempting the delete
- /// Target object
- /// Has permission?
- bool CanDeRezObject(LLUUID user, LLUUID obj);
-
- bool CanCopyObject(LLUUID user, LLUUID obj);
-
- bool CanEditObject(LLUUID user, LLUUID obj);
-
- bool CanEditObjectPosition(LLUUID user, LLUUID obj);
-
- ///
- /// Permissions check - can user enter an object?
- ///
- /// User attempting move an object
- /// Source object-position
- /// Target object-position
- /// Has permission?
- bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos);
-
- bool CanReturnObject(LLUUID user, LLUUID obj);
-
- #endregion
-
- #region Uncategorized permissions
-
- bool CanInstantMessage(LLUUID user, LLUUID target);
-
- bool CanInventoryTransfer(LLUUID user, LLUUID target);
-
- bool CanEditScript(LLUUID user, LLUUID script);
-
- bool CanRunScript(LLUUID user, LLUUID script);
-
- bool CanRunConsoleCommand(LLUUID user);
-
- bool CanTerraform(LLUUID user, LLVector3 position);
-
- #endregion
-
- #region Estate Permissions
-
- bool IsEstateManager(LLUUID user);
-
- bool GenericEstatePermission(LLUUID user);
-
- bool CanEditEstateTerrain(LLUUID user);
-
- bool CanRestartSim(LLUUID user);
-
- bool CanEditParcel(LLUUID user, ILandObject parcel);
-
- bool CanSellParcel(LLUUID user, ILandObject parcel);
-
- bool CanAbandonParcel(LLUUID user, ILandObject parcel);
-
- #endregion
-
uint GenerateClientFlags(LLUUID user, LLUUID objID);
}
}
diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
index 7bd1bb3..16cd211 100644
--- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
@@ -61,12 +61,33 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
{
m_scene = scene;
- // FIXME: Possibly move all permissions related stuff to its own section
IConfig myConfig = config.Configs["Startup"];
- m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", false);
+ m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", true);
m_scene.RegisterModuleInterface(this);
+
+ //Register External Permission Checks!
+ m_scene.ExternalChecks.addCheckAbandonParcel(this.CanAbandonParcel);
+ m_scene.ExternalChecks.addCheckCopyObject(this.CanCopyObject);
+ m_scene.ExternalChecks.addCheckDeRezObject(this.CanDeRezObject);
+ m_scene.ExternalChecks.addCheckEditEstateTerrain(this.CanEditEstateTerrain);
+ m_scene.ExternalChecks.addCheckEditObject(this.CanEditObject);
+ m_scene.ExternalChecks.addCheckEditParcel(this.CanEditParcel);
+ m_scene.ExternalChecks.addCheckEditScript(this.CanEditScript);
+ m_scene.ExternalChecks.addCheckInstantMessage(this.CanInstantMessage);
+ m_scene.ExternalChecks.addCheckInventoryTransfer(this.CanInventoryTransfer);
+ m_scene.ExternalChecks.addCheckMoveObject(this.CanEditObjectPosition);
+ m_scene.ExternalChecks.addCheckRestartSim(this.CanRestartSim);
+ m_scene.ExternalChecks.addCheckReturnObject(this.CanReturnObject);
+ m_scene.ExternalChecks.addCheckRezObject(this.CanRezObject);
+ m_scene.ExternalChecks.addCheckBeGodLike(this.CanBeGodLike);
+ m_scene.ExternalChecks.addCheckRunConsoleCommand(this.CanRunConsoleCommand);
+ m_scene.ExternalChecks.addCheckRunScript(this.CanRunScript);
+ m_scene.ExternalChecks.addCheckSellParcel(this.CanSellParcel);
+ //m_scene.ExternalChecks.addCheckTakeObject; -- NOT YET IMPLEMENTED
+ m_scene.ExternalChecks.addCheckTerraformLandCommand(this.CanTerraform);
+
}
public void PostInitialise()
@@ -89,12 +110,12 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
#endregion
- protected virtual void SendPermissionError(LLUUID user, string reason)
+ protected void SendPermissionError(LLUUID user, string reason)
{
m_scene.EventManager.TriggerPermissionError(user, reason);
}
- protected virtual bool IsAdministrator(LLUUID user)
+ protected bool IsAdministrator(LLUUID user)
{
if (m_bypassPermissions)
{
@@ -110,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return false;
}
- public virtual bool IsEstateManager(LLUUID user)
+ public bool IsEstateManager(LLUUID user)
{
if (m_bypassPermissions)
{
@@ -130,17 +151,17 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return false;
}
- protected virtual bool IsGridUser(LLUUID user)
+ protected bool IsGridUser(LLUUID user)
{
return true;
}
- protected virtual bool IsGuest(LLUUID user)
+ protected bool IsGuest(LLUUID user)
{
return false;
}
- public virtual bool CanRezObject(LLUUID user, LLVector3 position, int objectCount)
+ public bool CanRezObject(int objectCount, LLUUID user, LLVector3 position,Scene scene)
{
bool permission = false;
@@ -148,13 +169,6 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
string reason = "Insufficient permission";
- //Perform ExternalChecks first!
- bool results = m_scene.ExternalChecks.ExternalChecksCanRezObject(objectCount, user, position);
- if (results == false)
- {
- return false;
- }
-
ILandObject land = m_scene.LandChannel.GetLandObject(position.X, position.Y);
if (land == null) return false;
@@ -189,7 +203,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
}
///
- public virtual bool CanDeRezObject(LLUUID user, LLUUID obj)
+ public bool CanDeRezObject(LLUUID obj,LLUUID user, Scene scene)
{
return GenericObjectPermission(user, obj);
}
- public virtual bool CanEditObject(LLUUID user, LLUUID obj)
+ public bool CanEditObject(LLUUID obj, LLUUID user, Scene scene)
{
return GenericObjectPermission(user, obj);
}
- public virtual bool CanEditObjectPosition(LLUUID user, LLUUID obj)
+ public bool CanEditObjectPosition(LLUUID obj, LLUUID user, Scene scene)
{
bool permission = GenericObjectPermission(user, obj);
if (!permission)
@@ -499,7 +513,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return permission;
}
- public virtual bool CanCopyObject(LLUUID user, LLUUID obj)
+ public bool CanCopyObject(int objectCount, LLUUID obj, LLUUID user, Scene scene, LLVector3 objectPosition)
{
bool permission = GenericObjectPermission(user, obj);
if (permission)
@@ -521,15 +535,14 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
// the administrator object permissions to take effect.
LLUUID objectOwner = task.OwnerID;
- //Check ExternalChecks!
- if (m_scene.ExternalChecks.ExternalChecksCanRezObject(task.Children.Count, objectOwner, task.GroupCentrePoint) == false) return false;
+
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
permission = true;
}
return permission;
}
- public virtual bool CanReturnObject(LLUUID user, LLUUID obj)
+ public bool CanReturnObject(LLUUID obj, LLUUID user, Scene scene)
{
return GenericObjectPermission(user, obj);
}
@@ -538,7 +551,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
#region Communication Permissions
- protected virtual bool GenericCommunicationPermission(LLUUID user, LLUUID target)
+ protected bool GenericCommunicationPermission(LLUUID user, LLUUID target)
{
bool permission = false;
string reason = "Only registered users may communicate with another account.";
@@ -563,36 +576,34 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return permission;
}
- public virtual bool CanInstantMessage(LLUUID user, LLUUID target)
+ public bool CanInstantMessage(LLUUID user, LLUUID target, Scene scene)
{
return GenericCommunicationPermission(user, target);
}
- public virtual bool CanInventoryTransfer(LLUUID user, LLUUID target)
+ public bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene scene)
{
return GenericCommunicationPermission(user, target);
}
#endregion
- public virtual bool CanEditScript(LLUUID user, LLUUID script)
+ public bool CanEditScript(LLUUID script, LLUUID user, Scene scene)
{
return IsAdministrator(user);
}
- public virtual bool CanRunScript(LLUUID user, LLUUID script)
+ public bool CanRunScript(LLUUID script, LLUUID user, Scene scene)
{
- //External Checks!
- if (!m_scene.ExternalChecks.ExternalChecksCanRunScript(script, user)) return false;
return IsAdministrator(user);
}
- public virtual bool CanRunConsoleCommand(LLUUID user)
+ public bool CanRunConsoleCommand(LLUUID user, Scene scene)
{
return IsAdministrator(user);
}
- public virtual bool CanTerraform(LLUUID user, LLVector3 position)
+ public bool CanTerraform(LLUUID user, LLVector3 position, Scene scene)
{
bool permission = false;
@@ -625,7 +636,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
#region Estate Permissions
- public virtual bool GenericEstatePermission(LLUUID user)
+ public bool GenericEstatePermission(LLUUID user)
{
// Default: deny
bool permission = false;
@@ -641,12 +652,12 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return permission;
}
- public virtual bool CanEditEstateTerrain(LLUUID user)
+ public bool CanEditEstateTerrain(LLUUID user, Scene scene)
{
return GenericEstatePermission(user);
}
- public virtual bool CanRestartSim(LLUUID user)
+ public bool CanRestartSim(LLUUID user, Scene scene)
{
// Since this is potentially going on a grid...
@@ -654,11 +665,16 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
//return m_scene.RegionInfo.MasterAvatarAssignedUUID == user;
}
+ public bool CanBeGodLike(LLUUID user, Scene scene)
+ {
+ return GenericEstatePermission(user);
+ }
+
#endregion
#region Parcel Permissions
- protected virtual bool GenericParcelPermission(LLUUID user, ILandObject parcel)
+ protected bool GenericParcelPermission(LLUUID user, ILandObject parcel)
{
bool permission = false;
@@ -685,24 +701,24 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return permission;
}
- protected virtual bool GenericParcelPermission(LLUUID user, LLVector3 pos)
+ protected bool GenericParcelPermission(LLUUID user, LLVector3 pos)
{
ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
if (parcel == null) return false;
return GenericParcelPermission(user, parcel);
}
- public virtual bool CanEditParcel(LLUUID user, ILandObject parcel)
+ public bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene)
{
return GenericParcelPermission(user, parcel);
}
- public virtual bool CanSellParcel(LLUUID user, ILandObject parcel)
+ public bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene)
{
return GenericParcelPermission(user, parcel);
}
- public virtual bool CanAbandonParcel(LLUUID user, ILandObject parcel)
+ public bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene)
{
return GenericParcelPermission(user, parcel);
}
diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs
index 91a28e4..4562fb6 100644
--- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs
@@ -449,7 +449,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
float south, float east, IClientAPI remoteClient)
{
// Not a good permissions check, if in area mode, need to check the entire area.
- if (m_scene.Permissions.CanTerraform(remoteClient.AgentId, new LLVector3(north, west, 0)))
+ if (m_scene.ExternalChecks.ExternalChecksCanTerraformLand(remoteClient.AgentId, new LLVector3(north, west, 0)))
{
if (north == south && east == west)
{
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs
index 7ffddb3..2c8c323 100644
--- a/OpenSim/Region/Environment/Scenes/InnerScene.cs
+++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs
@@ -394,7 +394,7 @@ namespace OpenSim.Region.Environment.Scenes
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
{
SceneObjectGroup group = (SceneObjectGroup)obj;
- if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, obj.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditScript(obj.UUID, remoteClient.AgentId))
{
// If the attachment point isn't the same as the one previously used
// set it's offset position = 0 so that it appears on the attachment point
@@ -1051,7 +1051,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID, remoteClient.AgentId))
{
group.Resize(scale, localID);
}
@@ -1062,7 +1062,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID, remoteClient.AgentId))
{
group.GroupResize(scale, localID);
}
@@ -1098,7 +1098,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId))
{
group.UpdateSingleRotation(rot, localID);
}
@@ -1116,7 +1116,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId))
{
group.UpdateGroupRotation(rot);
}
@@ -1135,7 +1135,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId))
{
group.UpdateGroupRotation(pos, rot);
}
@@ -1148,12 +1148,13 @@ namespace OpenSim.Region.Environment.Scenes
if (group != null)
{
LLVector3 oldPos = group.AbsolutePosition;
- if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
- {
+ //FIXME: ObjectEntry is not in ExternalChecks!
+ //if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
+ //{
group.SendGroupTerseUpdate();
- return;
- }
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment)
+ //return;
+ //}
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment)
{
group.UpdateSinglePosition(pos, localID);
}
@@ -1179,12 +1180,13 @@ namespace OpenSim.Region.Environment.Scenes
}
else
{
- if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
- {
+ //FIXME: ObjectEntry not in ExternalChecks!
+ //if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
+ //{
group.SendGroupTerseUpdate();
- return;
- }
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment)
+ // return;
+ //}
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
{
group.UpdateGroupPosition(pos);
}
@@ -1203,7 +1205,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID,remoteClient.AgentId))
{
group.UpdateTextureEntry(localID, texture);
}
@@ -1221,7 +1223,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(localID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID, remoteClient.AgentId))
{
group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes());
}
@@ -1233,7 +1235,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(objectID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.)
+ if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId))// && PermissionsMngr.)
{
group.GrabMovement(offset, pos, remoteClient);
}
@@ -1255,7 +1257,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(primLocalID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID, remoteClient.AgentId))
{
group.SetPartName(Util.CleanString(name), primLocalID);
}
@@ -1272,7 +1274,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(primLocalID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID, remoteClient.AgentId))
{
group.SetPartDescription(Util.CleanString(description), primLocalID);
}
@@ -1285,7 +1287,7 @@ namespace OpenSim.Region.Environment.Scenes
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObject(agentID, group.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID,agentID))
{
group.UpdateExtraParam(primLocalID, type, inUse, data);
}
@@ -1302,7 +1304,7 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectGroup group = GetGroupByPrim(primLocalID);
if (group != null)
{
- if (m_parentScene.Permissions.CanEditObjectPosition(agentID, group.GetPartsFullID(primLocalID)))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.GetPartsFullID(primLocalID), agentID))
{
ObjectShapePacket.ObjectDataBlock shapeData = new ObjectShapePacket.ObjectDataBlock();
shapeData.ObjectLocalID = shapeBlock.ObjectLocalID;
@@ -1489,11 +1491,11 @@ namespace OpenSim.Region.Environment.Scenes
// * Asset/DRM permission bit "modify" is enabled
//use CanEditObjectPosition
- if (IncludeInSearch && m_parentScene.Permissions.CanEditObject(user, objid))
+ if (IncludeInSearch && m_parentScene.ExternalChecks.ExternalChecksCanEditObject(objid, user))
{
obj.AddFlag(LLObject.ObjectFlags.JointWheel);
}
- else if (!IncludeInSearch && m_parentScene.Permissions.CanEditObjectPosition(user, objid))
+ else if (!IncludeInSearch && m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(objid,user))
{
obj.RemFlag(LLObject.ObjectFlags.JointWheel);
}
@@ -1526,7 +1528,7 @@ namespace OpenSim.Region.Environment.Scenes
if (originPrim != null)
{
- if (m_parentScene.Permissions.CanCopyObject(AgentID, originPrim.UUID))
+ if (m_parentScene.ExternalChecks.ExternalChecksCanCopyObject(originPrim.Children.Count, originPrim.UUID, AgentID, originPrim.AbsolutePosition))
{
SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID);
copy.AbsolutePosition = copy.AbsolutePosition + offset;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index b536048..e78ad2b 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -73,7 +73,7 @@ namespace OpenSim.Region.Environment.Scenes
remoteClient.SendInventoryItemCreateUpdate(item);
int userlevel = 0;
- if (Permissions.IsEstateManager(remoteClient.AgentId))
+ if (ExternalChecks.ExternalChecksCanBeGodLike(remoteClient.AgentId))
{
userlevel = 1;
}
@@ -988,13 +988,11 @@ namespace OpenSim.Region.Environment.Scenes
bool permission;
if (DeRezPacket.AgentBlock.Destination == 1)
{ // Take Copy
- permission = Permissions.CanCopyObject(remoteClient.AgentId,
- ((SceneObjectGroup) selectedEnt).UUID);
+ permission = ExternalChecks.ExternalChecksCanTakeObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
}
else
{ // Take
- permission = Permissions.CanDeRezObject(remoteClient.AgentId,
- ((SceneObjectGroup) selectedEnt).UUID);
+ permission = ExternalChecks.ExternalChecksCanTakeObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
}
if (permission)
@@ -1285,7 +1283,7 @@ namespace OpenSim.Region.Environment.Scenes
{
string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);
SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
- if (!Permissions.CanRezObject(remoteClient.AgentId, pos, group.Children.Count) && !attachment)
+ if (!ExternalChecks.ExternalChecksCanRezObject(group.Children.Count,remoteClient.AgentId, pos) && !attachment)
{
return null;
}
@@ -1371,7 +1369,7 @@ namespace OpenSim.Region.Environment.Scenes
string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);
SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
- if (!Permissions.CanRezObject(ownerID, pos, group.Children.Count))
+ if (!ExternalChecks.ExternalChecksCanRezObject(group.Children.Count, ownerID, pos))
{
return null;
}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
index fb043b7..f55d822 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
@@ -85,7 +85,7 @@ namespace OpenSim.Region.Environment.Scenes
if (((SceneObjectGroup) ent).LocalId == primLocalID)
{
// A prim is only tainted if it's allowed to be edited by the person clicking it.
- if (Permissions.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || Permissions.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
+ if (ExternalChecks.ExternalChecksCanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) || ExternalChecks.ExternalChecksCanMoveObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId))
{
((SceneObjectGroup) ent).GetProperties(remoteClient);
((SceneObjectGroup) ent).IsSelected = true;
@@ -112,7 +112,7 @@ namespace OpenSim.Region.Environment.Scenes
{
if (((SceneObjectGroup) ent).LocalId == primLocalID)
{
- if (Permissions.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || Permissions.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
+ if (ExternalChecks.ExternalChecksCanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) || ExternalChecks.ExternalChecksCanMoveObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId))
{
((SceneObjectGroup) ent).IsSelected = false;
LandChannel.SetPrimsTainted();
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index ebbfece..5ce3c7b 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1245,7 +1245,7 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false);
- if (Permissions.CanRezObject(ownerID, pos, 1))
+ if ( ExternalChecks.ExternalChecksCanRezObject(1,ownerID,pos))
{
// rez ON the ground, not IN the ground
pos.Z += 0.25F;
@@ -2519,7 +2519,7 @@ namespace OpenSim.Region.Environment.Scenes
if (m_scenePresences.ContainsKey(agentID))
{
// First check that this is the sim owner
- if (Permissions.GenericEstatePermission(agentID))
+ if (ExternalChecks.ExternalChecksCanBeGodLike(agentID))
{
// Next we check for spoofing.....
LLUUID testSessionID = m_scenePresences[agentID].ControllingClient.SessionId;
@@ -2597,7 +2597,7 @@ namespace OpenSim.Region.Environment.Scenes
{
if (m_scenePresences.ContainsKey(agentID) || agentID == kickUserID)
{
- if (Permissions.GenericEstatePermission(godID))
+ if (ExternalChecks.ExternalChecksCanBeGodLike(godID))
{
if (agentID == kickUserID)
{
@@ -2918,7 +2918,7 @@ namespace OpenSim.Region.Environment.Scenes
}
else if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowGroupScripts) != 0)
{
- if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || Permissions.GenericEstatePermission(part.OwnerID))
+ if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || ExternalChecks.ExternalChecksCanBeGodLike(part.OwnerID))
{
return true;
}
diff --git a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
index 2d3e8e4..4e579b6 100644
--- a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
@@ -30,6 +30,7 @@ using System.Collections.Generic;
using System.Text;
using libsecondlife;
using OpenSim.Framework;
+using OpenSim.Region.Environment.Interfaces;
namespace OpenSim.Region.Environment.Scenes
{
@@ -42,63 +43,563 @@ namespace OpenSim.Region.Environment.Scenes
m_scene = scene;
}
- #region REZ OBJECT
- public delegate bool CanRezObject(int objectCount, LLUUID owner, IScene scene, LLVector3 objectPosition);
- private List CanRezObjectCheckFunctions = new List();
+ #region Object Permission Checks
- public void addCheckRezObject(CanRezObject delegateFunc)
- {
- if(!CanRezObjectCheckFunctions.Contains(delegateFunc))
- CanRezObjectCheckFunctions.Add(delegateFunc);
- }
- public void removeCheckRezObject(CanRezObject delegateFunc)
- {
- if (CanRezObjectCheckFunctions.Contains(delegateFunc))
- CanRezObjectCheckFunctions.Remove(delegateFunc);
- }
+ #region REZ OBJECT
+ public delegate bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene);
+ private List CanRezObjectCheckFunctions = new List();
- public bool ExternalChecksCanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition)
- {
- foreach (CanRezObject check in CanRezObjectCheckFunctions)
+ public void addCheckRezObject(CanRezObject delegateFunc)
+ {
+ if(!CanRezObjectCheckFunctions.Contains(delegateFunc))
+ CanRezObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckRezObject(CanRezObject delegateFunc)
+ {
+ if (CanRezObjectCheckFunctions.Contains(delegateFunc))
+ CanRezObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition)
{
- if (check(objectCount, owner, m_scene, objectPosition) == false)
+ foreach (CanRezObject check in CanRezObjectCheckFunctions)
{
- return false;
+ if (check(objectCount, owner,objectPosition, m_scene) == false)
+ {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
+
+ #endregion
+
+ #region DEREZ OBJECT
+ public delegate bool CanDeRezObject(LLUUID objectID, LLUUID deleter, Scene scene);
+ private List CanDeRezObjectCheckFunctions = new List();
+
+ public void addCheckDeRezObject(CanDeRezObject delegateFunc)
+ {
+ if (!CanDeRezObjectCheckFunctions.Contains(delegateFunc))
+ CanDeRezObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckDeRezObject(CanDeRezObject delegateFunc)
+ {
+ if (CanDeRezObjectCheckFunctions.Contains(delegateFunc))
+ CanDeRezObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanDeRezObject(LLUUID objectID, LLUUID deleter)
+ {
+ foreach (CanDeRezObject check in CanDeRezObjectCheckFunctions)
+ {
+ if (check(objectID,deleter,m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region TAKE OBJECT
+ public delegate bool CanTakeObject(LLUUID objectID, LLUUID stealer, Scene scene);
+ private List CanTakeObjectCheckFunctions = new List();
+
+ public void addCheckTakeObject(CanTakeObject delegateFunc)
+ {
+ if (!CanTakeObjectCheckFunctions.Contains(delegateFunc))
+ CanTakeObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckTakeObject(CanTakeObject delegateFunc)
+ {
+ if (CanTakeObjectCheckFunctions.Contains(delegateFunc))
+ CanTakeObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanTakeObject(LLUUID objectID, LLUUID stealer)
+ {
+ foreach (CanTakeObject check in CanTakeObjectCheckFunctions)
+ {
+ if (check(objectID, stealer, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region COPY OBJECT
+ public delegate bool CanCopyObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition);
+ private List CanCopyObjectCheckFunctions = new List();
+
+ public void addCheckCopyObject(CanCopyObject delegateFunc)
+ {
+ if (!CanCopyObjectCheckFunctions.Contains(delegateFunc))
+ CanCopyObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckCopyObject(CanCopyObject delegateFunc)
+ {
+ if (CanCopyObjectCheckFunctions.Contains(delegateFunc))
+ CanCopyObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanCopyObject(int objectCount, LLUUID objectID, LLUUID owner, LLVector3 objectPosition)
+ {
+ foreach (CanCopyObject check in CanCopyObjectCheckFunctions)
+ {
+ if (check(objectCount, objectID, owner, m_scene, objectPosition) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region EDIT OBJECT
+ public delegate bool CanEditObject(LLUUID objectID, LLUUID editorID, Scene scene);
+ private List CanEditObjectCheckFunctions = new List();
+
+ public void addCheckEditObject(CanEditObject delegateFunc)
+ {
+ if (!CanEditObjectCheckFunctions.Contains(delegateFunc))
+ CanEditObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckEditObject(CanEditObject delegateFunc)
+ {
+ if (CanEditObjectCheckFunctions.Contains(delegateFunc))
+ CanEditObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanEditObject(LLUUID objectID, LLUUID editorID)
+ {
+ foreach (CanEditObject check in CanEditObjectCheckFunctions)
+ {
+ if (check(objectID, editorID, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region MOVE OBJECT
+ public delegate bool CanMoveObject(LLUUID objectID, LLUUID moverID, Scene scene);
+ private List CanMoveObjectCheckFunctions = new List();
+
+ public void addCheckMoveObject(CanMoveObject delegateFunc)
+ {
+ if (!CanMoveObjectCheckFunctions.Contains(delegateFunc))
+ CanMoveObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckMoveObject(CanMoveObject delegateFunc)
+ {
+ if (CanMoveObjectCheckFunctions.Contains(delegateFunc))
+ CanMoveObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanMoveObject(LLUUID objectID, LLUUID moverID)
+ {
+ foreach (CanMoveObject check in CanMoveObjectCheckFunctions)
+ {
+ if (check(objectID,moverID,m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region RETURN OBJECT
+ public delegate bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene);
+ private List CanReturnObjectCheckFunctions = new List();
+
+ public void addCheckReturnObject(CanReturnObject delegateFunc)
+ {
+ if (!CanReturnObjectCheckFunctions.Contains(delegateFunc))
+ CanReturnObjectCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckReturnObject(CanReturnObject delegateFunc)
+ {
+ if (CanReturnObjectCheckFunctions.Contains(delegateFunc))
+ CanReturnObjectCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanReturnObject(LLUUID objectID, LLUUID returnerID)
+ {
+ foreach (CanReturnObject check in CanReturnObjectCheckFunctions)
+ {
+ if (check(objectID,returnerID,m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
#endregion
- #region RUN SCRIPT
- public delegate bool CanRunScript(LLUUID script, LLUUID owner, IScene scene);
- private List CanRunScriptCheckFunctions = new List();
+ #region Misc Permission Checks
- public void addCheckRunScript(CanRunScript delegateFunc)
- {
- if (!CanRunScriptCheckFunctions.Contains(delegateFunc))
- CanRunScriptCheckFunctions.Add(delegateFunc);
- }
- public void removeCheckRunScript(CanRunScript delegateFunc)
- {
- if (CanRunScriptCheckFunctions.Contains(delegateFunc))
- CanRunScriptCheckFunctions.Remove(delegateFunc);
- }
+ #region INSTANT MESSAGE
+ public delegate bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene);
+ private List CanInstantMessageCheckFunctions = new List();
- public bool ExternalChecksCanRunScript(LLUUID script, LLUUID owner)
- {
- foreach (CanRunScript check in CanRunScriptCheckFunctions)
+ public void addCheckInstantMessage(CanInstantMessage delegateFunc)
+ {
+ if (!CanInstantMessageCheckFunctions.Contains(delegateFunc))
+ CanInstantMessageCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckInstantMessage(CanInstantMessage delegateFunc)
+ {
+ if (CanInstantMessageCheckFunctions.Contains(delegateFunc))
+ CanInstantMessageCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanInstantMessage(LLUUID user, LLUUID target)
{
- if (check(script,owner,m_scene) == false)
+ foreach (CanInstantMessage check in CanInstantMessageCheckFunctions)
{
- return false;
+ if (check(user,target,m_scene) == false)
+ {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
+
+ #endregion
+
+ #region INVENTORY TRANSFER
+ public delegate bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene startScene);
+ private List CanInventoryTransferCheckFunctions = new List();
+
+ public void addCheckInventoryTransfer(CanInventoryTransfer delegateFunc)
+ {
+ if (!CanInventoryTransferCheckFunctions.Contains(delegateFunc))
+ CanInventoryTransferCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckInventoryTransfer(CanInventoryTransfer delegateFunc)
+ {
+ if (CanInventoryTransferCheckFunctions.Contains(delegateFunc))
+ CanInventoryTransferCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanInventoryTransfer(LLUUID user, LLUUID target)
+ {
+ foreach (CanInventoryTransfer check in CanInventoryTransferCheckFunctions)
+ {
+ if (check(user, target, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region EDIT SCRIPT
+ public delegate bool CanEditScript(LLUUID script, LLUUID user, Scene scene);
+ private List CanEditScriptCheckFunctions = new List();
+
+ public void addCheckEditScript(CanEditScript delegateFunc)
+ {
+ if (!CanEditScriptCheckFunctions.Contains(delegateFunc))
+ CanEditScriptCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckEditScript(CanEditScript delegateFunc)
+ {
+ if (CanEditScriptCheckFunctions.Contains(delegateFunc))
+ CanEditScriptCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanEditScript(LLUUID script, LLUUID user)
+ {
+ foreach (CanEditScript check in CanEditScriptCheckFunctions)
+ {
+ if (check(script, user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region RUN SCRIPT
+ public delegate bool CanRunScript(LLUUID script, LLUUID user, Scene scene);
+ private List CanRunScriptCheckFunctions = new List();
+
+ public void addCheckRunScript(CanRunScript delegateFunc)
+ {
+ if (!CanRunScriptCheckFunctions.Contains(delegateFunc))
+ CanRunScriptCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckRunScript(CanRunScript delegateFunc)
+ {
+ if (CanRunScriptCheckFunctions.Contains(delegateFunc))
+ CanRunScriptCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanRunScript(LLUUID script, LLUUID user)
+ {
+ foreach (CanRunScript check in CanRunScriptCheckFunctions)
+ {
+ if (check(script, user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region TERRAFORM LAND
+ public delegate bool CanTerraformLandCommand(LLUUID user, LLVector3 position, Scene requestFromScene);
+ private List CanTerraformLandCommandCheckFunctions = new List();
+
+ public void addCheckTerraformLandCommand(CanTerraformLandCommand delegateFunc)
+ {
+ if (!CanTerraformLandCommandCheckFunctions.Contains(delegateFunc))
+ CanTerraformLandCommandCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckTerraformLandCommand(CanTerraformLandCommand delegateFunc)
+ {
+ if (CanTerraformLandCommandCheckFunctions.Contains(delegateFunc))
+ CanTerraformLandCommandCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanTerraformLand(LLUUID user, LLVector3 pos)
+ {
+ foreach (CanTerraformLandCommand check in CanTerraformLandCommandCheckFunctions)
+ {
+ if (check(user, pos, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region RUN CONSOLE COMMAND
+ public delegate bool CanRunConsoleCommand(LLUUID user, Scene requestFromScene);
+ private List CanRunConsoleCommandCheckFunctions = new List();
+
+ public void addCheckRunConsoleCommand(CanRunConsoleCommand delegateFunc)
+ {
+ if (!CanRunConsoleCommandCheckFunctions.Contains(delegateFunc))
+ CanRunConsoleCommandCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckRunConsoleCommand(CanRunConsoleCommand delegateFunc)
+ {
+ if (CanRunConsoleCommandCheckFunctions.Contains(delegateFunc))
+ CanRunConsoleCommandCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanRunConsoleCommand(LLUUID user)
+ {
+ foreach (CanRunConsoleCommand check in CanRunConsoleCommandCheckFunctions)
+ {
+ if (check(user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region CAN BE GODLIKE
+ public delegate bool CanBeGodLike(LLUUID user, Scene requestFromScene);
+ private List CanBeGodLikeCheckFunctions = new List();
+
+ public void addCheckBeGodLike(CanBeGodLike delegateFunc)
+ {
+ if (!CanBeGodLikeCheckFunctions.Contains(delegateFunc))
+ CanBeGodLikeCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckBeGodLike(CanBeGodLike delegateFunc)
+ {
+ if (CanBeGodLikeCheckFunctions.Contains(delegateFunc))
+ CanBeGodLikeCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanBeGodLike(LLUUID user)
+ {
+ foreach (CanBeGodLike check in CanBeGodLikeCheckFunctions)
+ {
+ if (check(user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
#endregion
+ #region Parcel and Estate Permission Checks
+ #region EDIT ESTATE TERRAIN
+ public delegate bool CanEditEstateTerrain(LLUUID user, Scene scene);
+ private List CanEditEstateTerrainCheckFunctions = new List();
+
+ public void addCheckEditEstateTerrain(CanEditEstateTerrain delegateFunc)
+ {
+ if (!CanEditEstateTerrainCheckFunctions.Contains(delegateFunc))
+ CanEditEstateTerrainCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckEditEstateTerrain(CanEditEstateTerrain delegateFunc)
+ {
+ if (CanEditEstateTerrainCheckFunctions.Contains(delegateFunc))
+ CanEditEstateTerrainCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanEditEstateTerrain(LLUUID user)
+ {
+ foreach (CanEditEstateTerrain check in CanEditEstateTerrainCheckFunctions)
+ {
+ if (check(user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region RESTART SIM
+ public delegate bool CanRestartSim(LLUUID user, Scene scene);
+ private List CanRestartSimCheckFunctions = new List();
+
+ public void addCheckRestartSim(CanRestartSim delegateFunc)
+ {
+ if (!CanRestartSimCheckFunctions.Contains(delegateFunc))
+ CanRestartSimCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckRestartSim(CanRestartSim delegateFunc)
+ {
+ if (CanRestartSimCheckFunctions.Contains(delegateFunc))
+ CanRestartSimCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanRestartSim(LLUUID user)
+ {
+ foreach (CanRestartSim check in CanRestartSimCheckFunctions)
+ {
+ if (check(user, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ #endregion
+
+ #region EDIT PARCEL
+ public delegate bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene);
+ private List CanEditParcelCheckFunctions = new List();
+
+ public void addCheckEditParcel(CanEditParcel delegateFunc)
+ {
+ if (!CanEditParcelCheckFunctions.Contains(delegateFunc))
+ CanEditParcelCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckEditParcel(CanEditParcel delegateFunc)
+ {
+ if (CanEditParcelCheckFunctions.Contains(delegateFunc))
+ CanEditParcelCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanEditParcel(LLUUID user, ILandObject parcel)
+ {
+ foreach (CanEditParcel check in CanEditParcelCheckFunctions)
+ {
+ if (check(user, parcel, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ #endregion
+
+ #region SELL PARCEL
+ public delegate bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene);
+ private List CanSellParcelCheckFunctions = new List();
+
+ public void addCheckSellParcel(CanSellParcel delegateFunc)
+ {
+ if (!CanSellParcelCheckFunctions.Contains(delegateFunc))
+ CanSellParcelCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckSellParcel(CanSellParcel delegateFunc)
+ {
+ if (CanSellParcelCheckFunctions.Contains(delegateFunc))
+ CanSellParcelCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanSellParcel(LLUUID user, ILandObject parcel)
+ {
+ foreach (CanSellParcel check in CanSellParcelCheckFunctions)
+ {
+ if (check(user, parcel, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ #endregion
+
+ #region ABANDON PARCEL
+ public delegate bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene);
+ private List CanAbandonParcelCheckFunctions = new List();
+
+ public void addCheckAbandonParcel(CanAbandonParcel delegateFunc)
+ {
+ if (!CanAbandonParcelCheckFunctions.Contains(delegateFunc))
+ CanAbandonParcelCheckFunctions.Add(delegateFunc);
+ }
+ public void removeCheckAbandonParcel(CanAbandonParcel delegateFunc)
+ {
+ if (CanAbandonParcelCheckFunctions.Contains(delegateFunc))
+ CanAbandonParcelCheckFunctions.Remove(delegateFunc);
+ }
+
+ public bool ExternalChecksCanAbandonParcel(LLUUID user, ILandObject parcel)
+ {
+ foreach (CanAbandonParcel check in CanAbandonParcelCheckFunctions)
+ {
+ if (check(user, parcel, m_scene) == false)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ #endregion
+ #endregion
+
+
}
}
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index e3bec9d..48b356a 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -181,7 +181,7 @@ namespace OpenSim.Region.ScriptEngine.Common
m_host.AddScriptLPS(1);
//Check to make sure that the script's owner is the estate manager/master
//World.Permissions.GenericEstatePermission(
- if (World.Permissions.GenericEstatePermission(m_host.OwnerID))
+ if (World.ExternalChecks.ExternalChecksCanBeGodLike(m_host.OwnerID))
{
World.EventManager.TriggerRequestChangeWaterHeight((float)height);
}
@@ -2647,7 +2647,7 @@ namespace OpenSim.Region.ScriptEngine.Common
public void llModifyLand(int action, int brush)
{
m_host.AddScriptLPS(1);
- if (World.Permissions.CanTerraform(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)))
+ if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0)))
{
NotImplemented("llModifyLand");
}
@@ -3900,7 +3900,7 @@ namespace OpenSim.Region.ScriptEngine.Common
{
if (m_host.ObjectOwner == parcel.landData.ownerID ||
(m_host.OwnerID == m_host.GroupID && m_host.GroupID == parcel.landData.groupID
- && parcel.landData.isGroupOwned) || World.Permissions.GenericEstatePermission(m_host.OwnerID))
+ && parcel.landData.isGroupOwned) || World.ExternalChecks.ExternalChecksCanBeGodLike(m_host.OwnerID))
{
av.StandUp();
}
diff --git a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs
index ddca617..401042a 100644
--- a/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/OSSL_BuilIn_Commands.cs
@@ -258,7 +258,7 @@ namespace OpenSim.Region.ScriptEngine.Common
if (x > 255 || x < 0 || y > 255 || y < 0)
LSLError("osTerrainSetHeight: Coordinate out of bounds");
- if (World.Permissions.CanTerraform(m_host.OwnerID, new LLVector3(x, y, 0)))
+ if (World.ExternalChecks.ExternalChecksCanTerraformLand(m_host.OwnerID, new LLVector3(x, y, 0)))
{
World.Heightmap[x, y] = val;
return 1;
@@ -281,7 +281,7 @@ namespace OpenSim.Region.ScriptEngine.Common
public int osRegionRestart(double seconds)
{
m_host.AddScriptLPS(1);
- if (World.Permissions.CanRestartSim(m_host.OwnerID))
+ if (World.ExternalChecks.ExternalChecksCanRestartSim(m_host.OwnerID))
{
World.Restart((float)seconds);
return 1;
@@ -406,7 +406,7 @@ namespace OpenSim.Region.ScriptEngine.Common
if (config.Configs["LL-Functions"].GetBoolean("AllowosConsoleCommand", false))
{
- if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
+ if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID))
{
MainConsole.Instance.RunCommand(command);
return true;
--
cgit v1.1