*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 module0.6.0-stable
parent
4b924f2eb6
commit
6c71a04da8
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
/// <summary>
|
||||
/// Permissions check - can user delete an object?
|
||||
/// </summary>
|
||||
/// <param name="user">User attempting the delete</param>
|
||||
/// <param name="obj">Target object</param>
|
||||
/// <returns>Has permission?</returns>
|
||||
bool CanDeRezObject(LLUUID user, LLUUID obj);
|
||||
|
||||
bool CanCopyObject(LLUUID user, LLUUID obj);
|
||||
|
||||
bool CanEditObject(LLUUID user, LLUUID obj);
|
||||
|
||||
bool CanEditObjectPosition(LLUUID user, LLUUID obj);
|
||||
|
||||
/// <summary>
|
||||
/// Permissions check - can user enter an object?
|
||||
/// </summary>
|
||||
/// <param name="user">User attempting move an object</param>
|
||||
/// <param name="oldPos">Source object-position</param>
|
||||
/// <param name="newPos">Target object-position</param>
|
||||
/// <returns>Has permission?</returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<IScenePermissions>(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
|
|||
}
|
||||
|
||||
/// <see cref="Opensim.Region.Environment.Interfaces.IScenePermissions></see>
|
||||
public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
||||
public bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
||||
{
|
||||
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
||||
{
|
||||
|
@ -233,7 +247,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
|
||||
#region Object Permissions
|
||||
|
||||
public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
||||
public uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
||||
{
|
||||
// Here's the way this works,
|
||||
// ObjectFlags and Permission flags are two different enumerations
|
||||
|
@ -344,7 +358,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
return objectFlagsMask;
|
||||
}
|
||||
|
||||
protected virtual bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
||||
protected bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
||||
{
|
||||
// Default: deny
|
||||
bool permission = false;
|
||||
|
@ -414,17 +428,17 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
}
|
||||
|
||||
/// <see cref="Opensim.Region.Environment.Interfaces.IScenePermissions></see>
|
||||
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)
|
||||
{
|
||||
//External Checks!
|
||||
if (!m_scene.ExternalChecks.ExternalChecksCanRunScript(script, user)) return false;
|
||||
return IsAdministrator(user);
|
||||
}
|
||||
|
||||
public virtual bool CanRunConsoleCommand(LLUUID user)
|
||||
public bool CanRunScript(LLUUID script, LLUUID user, Scene scene)
|
||||
{
|
||||
return IsAdministrator(user);
|
||||
}
|
||||
|
||||
public virtual bool CanTerraform(LLUUID user, LLVector3 position)
|
||||
public bool CanRunConsoleCommand(LLUUID user, Scene scene)
|
||||
{
|
||||
return IsAdministrator(user);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,8 +43,10 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
m_scene = scene;
|
||||
}
|
||||
|
||||
#region Object Permission Checks
|
||||
|
||||
#region REZ OBJECT
|
||||
public delegate bool CanRezObject(int objectCount, LLUUID owner, IScene scene, LLVector3 objectPosition);
|
||||
public delegate bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene);
|
||||
private List<CanRezObject> CanRezObjectCheckFunctions = new List<CanRezObject>();
|
||||
|
||||
public void addCheckRezObject(CanRezObject delegateFunc)
|
||||
|
@ -61,7 +64,272 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
{
|
||||
foreach (CanRezObject check in CanRezObjectCheckFunctions)
|
||||
{
|
||||
if (check(objectCount, owner, m_scene, objectPosition) == false)
|
||||
if (check(objectCount, owner,objectPosition, m_scene) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region DEREZ OBJECT
|
||||
public delegate bool CanDeRezObject(LLUUID objectID, LLUUID deleter, Scene scene);
|
||||
private List<CanDeRezObject> CanDeRezObjectCheckFunctions = new List<CanDeRezObject>();
|
||||
|
||||
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<CanTakeObject> CanTakeObjectCheckFunctions = new List<CanTakeObject>();
|
||||
|
||||
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<CanCopyObject> CanCopyObjectCheckFunctions = new List<CanCopyObject>();
|
||||
|
||||
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<CanEditObject> CanEditObjectCheckFunctions = new List<CanEditObject>();
|
||||
|
||||
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<CanMoveObject> CanMoveObjectCheckFunctions = new List<CanMoveObject>();
|
||||
|
||||
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<CanReturnObject> CanReturnObjectCheckFunctions = new List<CanReturnObject>();
|
||||
|
||||
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 Misc Permission Checks
|
||||
|
||||
#region INSTANT MESSAGE
|
||||
public delegate bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene);
|
||||
private List<CanInstantMessage> CanInstantMessageCheckFunctions = new List<CanInstantMessage>();
|
||||
|
||||
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)
|
||||
{
|
||||
foreach (CanInstantMessage check in CanInstantMessageCheckFunctions)
|
||||
{
|
||||
if (check(user,target,m_scene) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INVENTORY TRANSFER
|
||||
public delegate bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene startScene);
|
||||
private List<CanInventoryTransfer> CanInventoryTransferCheckFunctions = new List<CanInventoryTransfer>();
|
||||
|
||||
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<CanEditScript> CanEditScriptCheckFunctions = new List<CanEditScript>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -72,7 +340,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
#endregion
|
||||
|
||||
#region RUN SCRIPT
|
||||
public delegate bool CanRunScript(LLUUID script, LLUUID owner, IScene scene);
|
||||
public delegate bool CanRunScript(LLUUID script, LLUUID user, Scene scene);
|
||||
private List<CanRunScript> CanRunScriptCheckFunctions = new List<CanRunScript>();
|
||||
|
||||
public void addCheckRunScript(CanRunScript delegateFunc)
|
||||
|
@ -86,11 +354,11 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
CanRunScriptCheckFunctions.Remove(delegateFunc);
|
||||
}
|
||||
|
||||
public bool ExternalChecksCanRunScript(LLUUID script, LLUUID owner)
|
||||
public bool ExternalChecksCanRunScript(LLUUID script, LLUUID user)
|
||||
{
|
||||
foreach (CanRunScript check in CanRunScriptCheckFunctions)
|
||||
{
|
||||
if (check(script,owner,m_scene) == false)
|
||||
if (check(script, user, m_scene) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -100,5 +368,238 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
#endregion
|
||||
|
||||
#region TERRAFORM LAND
|
||||
public delegate bool CanTerraformLandCommand(LLUUID user, LLVector3 position, Scene requestFromScene);
|
||||
private List<CanTerraformLandCommand> CanTerraformLandCommandCheckFunctions = new List<CanTerraformLandCommand>();
|
||||
|
||||
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<CanRunConsoleCommand> CanRunConsoleCommandCheckFunctions = new List<CanRunConsoleCommand>();
|
||||
|
||||
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<CanBeGodLike> CanBeGodLikeCheckFunctions = new List<CanBeGodLike>();
|
||||
|
||||
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<CanEditEstateTerrain> CanEditEstateTerrainCheckFunctions = new List<CanEditEstateTerrain>();
|
||||
|
||||
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<CanRestartSim> CanRestartSimCheckFunctions = new List<CanRestartSim>();
|
||||
|
||||
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<CanEditParcel> CanEditParcelCheckFunctions = new List<CanEditParcel>();
|
||||
|
||||
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<CanSellParcel> CanSellParcelCheckFunctions = new List<CanSellParcel>();
|
||||
|
||||
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<CanAbandonParcel> CanAbandonParcelCheckFunctions = new List<CanAbandonParcel>();
|
||||
|
||||
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
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue