add bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject land) permissions check
parent
44993550a8
commit
eb11505d19
|
@ -286,6 +286,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
|
|
||||||
scenePermissions.OnRezObject += CanRezObject;
|
scenePermissions.OnRezObject += CanRezObject;
|
||||||
scenePermissions.OnObjectEntry += CanObjectEntry;
|
scenePermissions.OnObjectEntry += CanObjectEntry;
|
||||||
|
scenePermissions.OnObjectEnterWithScripts += OnObjectEnterWithScripts;
|
||||||
|
|
||||||
scenePermissions.OnDuplicateObject += CanDuplicateObject;
|
scenePermissions.OnDuplicateObject += CanDuplicateObject;
|
||||||
scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
|
scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
|
||||||
|
@ -381,6 +382,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
|
|
||||||
scenePermissions.OnRezObject -= CanRezObject;
|
scenePermissions.OnRezObject -= CanRezObject;
|
||||||
scenePermissions.OnObjectEntry -= CanObjectEntry;
|
scenePermissions.OnObjectEntry -= CanObjectEntry;
|
||||||
|
scenePermissions.OnObjectEnterWithScripts -= OnObjectEnterWithScripts;
|
||||||
|
|
||||||
scenePermissions.OnReturnObjects -= CanReturnObjects;
|
scenePermissions.OnReturnObjects -= CanReturnObjects;
|
||||||
|
|
||||||
scenePermissions.OnDuplicateObject -= CanDuplicateObject;
|
scenePermissions.OnDuplicateObject -= CanDuplicateObject;
|
||||||
|
@ -1627,6 +1630,55 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool OnObjectEnterWithScripts(SceneObjectGroup sog, ILandObject parcel)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
|
||||||
|
if(sog == null || sog.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_bypassPermissions)
|
||||||
|
return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
if (parcel == null)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
int checkflags = ((int)ParcelFlags.AllowAPrimitiveEntry);
|
||||||
|
bool scripts = (sog.ScriptCount() > 0);
|
||||||
|
if(scripts)
|
||||||
|
checkflags |= ((int)ParcelFlags.AllowOtherScripts);
|
||||||
|
|
||||||
|
if ((parcel.LandData.Flags & checkflags) == checkflags)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
UUID userID = sog.OwnerID;
|
||||||
|
LandData landdata = parcel.LandData;
|
||||||
|
|
||||||
|
if (landdata.OwnerID == userID)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (IsAdministrator(userID))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
UUID landGroupID = landdata.GroupID;
|
||||||
|
if (landGroupID != UUID.Zero)
|
||||||
|
{
|
||||||
|
checkflags = (int)ParcelFlags.AllowGroupObjectEntry;
|
||||||
|
if(scripts)
|
||||||
|
checkflags |= ((int)ParcelFlags.AllowGroupScripts);
|
||||||
|
|
||||||
|
if ((parcel.LandData.Flags & checkflags) == checkflags)
|
||||||
|
return IsGroupMember(landGroupID, userID, 0);
|
||||||
|
|
||||||
|
if (landdata.IsGroupOwned && IsGroupMember(landGroupID, userID, (ulong)GroupPowers.AllowRez))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Otherwise, false!
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
|
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
|
|
@ -56,6 +56,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
|
public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
|
||||||
public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||||
public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
|
public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
|
||||||
|
public delegate bool ObjectEnterWithScriptsHandler(SceneObjectGroup sog, ILandObject land);
|
||||||
public delegate bool ReturnObjectsHandler(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects);
|
public delegate bool ReturnObjectsHandler(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects);
|
||||||
public delegate bool InstantMessageHandler(UUID user, UUID target);
|
public delegate bool InstantMessageHandler(UUID user, UUID target);
|
||||||
public delegate bool InventoryTransferHandler(UUID user, UUID target);
|
public delegate bool InventoryTransferHandler(UUID user, UUID target);
|
||||||
|
@ -135,6 +136,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public event EditObjectInventoryHandler OnEditObjectInventory;
|
public event EditObjectInventoryHandler OnEditObjectInventory;
|
||||||
public event MoveObjectHandler OnMoveObject;
|
public event MoveObjectHandler OnMoveObject;
|
||||||
public event ObjectEntryHandler OnObjectEntry;
|
public event ObjectEntryHandler OnObjectEntry;
|
||||||
|
public event ObjectEnterWithScriptsHandler OnObjectEnterWithScripts;
|
||||||
public event ReturnObjectsHandler OnReturnObjects;
|
public event ReturnObjectsHandler OnReturnObjects;
|
||||||
public event InstantMessageHandler OnInstantMessage;
|
public event InstantMessageHandler OnInstantMessage;
|
||||||
public event InventoryTransferHandler OnInventoryTransfer;
|
public event InventoryTransferHandler OnInventoryTransfer;
|
||||||
|
@ -565,6 +567,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject land)
|
||||||
|
{
|
||||||
|
ObjectEnterWithScriptsHandler handler = OnObjectEnterWithScripts;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
Delegate[] list = handler.GetInvocationList();
|
||||||
|
foreach (ObjectEnterWithScriptsHandler h in list)
|
||||||
|
{
|
||||||
|
if (h(sog, land) == false)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region RETURN OBJECT
|
#region RETURN OBJECT
|
||||||
|
|
|
@ -83,6 +83,7 @@ namespace OpenSim.Region.OptionalModules
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
scene.Permissions.OnRezObject += CanRezObject;
|
scene.Permissions.OnRezObject += CanRezObject;
|
||||||
scene.Permissions.OnObjectEntry += CanObjectEnter;
|
scene.Permissions.OnObjectEntry += CanObjectEnter;
|
||||||
|
scene.Permissions.OnObjectEnterWithScripts += CanObjectEnterWithScripts;
|
||||||
scene.Permissions.OnDuplicateObject += CanDuplicateObject;
|
scene.Permissions.OnDuplicateObject += CanDuplicateObject;
|
||||||
|
|
||||||
m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName);
|
m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName);
|
||||||
|
@ -95,6 +96,7 @@ namespace OpenSim.Region.OptionalModules
|
||||||
|
|
||||||
m_scene.Permissions.OnRezObject -= CanRezObject;
|
m_scene.Permissions.OnRezObject -= CanRezObject;
|
||||||
m_scene.Permissions.OnObjectEntry -= CanObjectEnter;
|
m_scene.Permissions.OnObjectEntry -= CanObjectEnter;
|
||||||
|
scene.Permissions.OnObjectEnterWithScripts -= CanObjectEnterWithScripts;
|
||||||
m_scene.Permissions.OnDuplicateObject -= CanDuplicateObject;
|
m_scene.Permissions.OnDuplicateObject -= CanDuplicateObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,6 +175,26 @@ namespace OpenSim.Region.OptionalModules
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject newParcel)
|
||||||
|
{
|
||||||
|
if (sog == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (newParcel == null)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
int objectCount = sog.PrimCount;
|
||||||
|
|
||||||
|
// TODO: Add Special Case here for temporary prims
|
||||||
|
|
||||||
|
string response = DoCommonChecks(objectCount, sog.OwnerID, newParcel);
|
||||||
|
|
||||||
|
if (response != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo)
|
private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo)
|
||||||
{
|
{
|
||||||
string response = null;
|
string response = null;
|
||||||
|
|
Loading…
Reference in New Issue