aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs52
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Permissions.cs17
-rw-r--r--OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs22
3 files changed, 91 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index ab8fb51..8eee864 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -286,6 +286,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
286 286
287 scenePermissions.OnRezObject += CanRezObject; 287 scenePermissions.OnRezObject += CanRezObject;
288 scenePermissions.OnObjectEntry += CanObjectEntry; 288 scenePermissions.OnObjectEntry += CanObjectEntry;
289 scenePermissions.OnObjectEnterWithScripts += OnObjectEnterWithScripts;
289 290
290 scenePermissions.OnDuplicateObject += CanDuplicateObject; 291 scenePermissions.OnDuplicateObject += CanDuplicateObject;
291 scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs; 292 scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
@@ -381,6 +382,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
381 382
382 scenePermissions.OnRezObject -= CanRezObject; 383 scenePermissions.OnRezObject -= CanRezObject;
383 scenePermissions.OnObjectEntry -= CanObjectEntry; 384 scenePermissions.OnObjectEntry -= CanObjectEntry;
385 scenePermissions.OnObjectEnterWithScripts -= OnObjectEnterWithScripts;
386
384 scenePermissions.OnReturnObjects -= CanReturnObjects; 387 scenePermissions.OnReturnObjects -= CanReturnObjects;
385 388
386 scenePermissions.OnDuplicateObject -= CanDuplicateObject; 389 scenePermissions.OnDuplicateObject -= CanDuplicateObject;
@@ -1627,6 +1630,55 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1627 return false; 1630 return false;
1628 } 1631 }
1629 1632
1633 private bool OnObjectEnterWithScripts(SceneObjectGroup sog, ILandObject parcel)
1634 {
1635 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1636
1637 if(sog == null || sog.IsDeleted)
1638 return false;
1639
1640 if (m_bypassPermissions)
1641 return m_bypassPermissionsValue;
1642
1643 if (parcel == null)
1644 return true;
1645
1646 int checkflags = ((int)ParcelFlags.AllowAPrimitiveEntry);
1647 bool scripts = (sog.ScriptCount() > 0);
1648 if(scripts)
1649 checkflags |= ((int)ParcelFlags.AllowOtherScripts);
1650
1651 if ((parcel.LandData.Flags & checkflags) == checkflags)
1652 return true;
1653
1654 UUID userID = sog.OwnerID;
1655 LandData landdata = parcel.LandData;
1656
1657 if (landdata.OwnerID == userID)
1658 return true;
1659
1660 if (IsAdministrator(userID))
1661 return true;
1662
1663 UUID landGroupID = landdata.GroupID;
1664 if (landGroupID != UUID.Zero)
1665 {
1666 checkflags = (int)ParcelFlags.AllowGroupObjectEntry;
1667 if(scripts)
1668 checkflags |= ((int)ParcelFlags.AllowGroupScripts);
1669
1670 if ((parcel.LandData.Flags & checkflags) == checkflags)
1671 return IsGroupMember(landGroupID, userID, 0);
1672
1673 if (landdata.IsGroupOwned && IsGroupMember(landGroupID, userID, (ulong)GroupPowers.AllowRez))
1674 return true;
1675 }
1676
1677 //Otherwise, false!
1678 return false;
1679 }
1680
1681
1630 private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects) 1682 private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
1631 { 1683 {
1632 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1684 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index 7d69a9b..c55a7a6 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -56,6 +56,7 @@ namespace OpenSim.Region.Framework.Scenes
56 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID); 56 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
57 public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp); 57 public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
58 public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint); 58 public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
59 public delegate bool ObjectEnterWithScriptsHandler(SceneObjectGroup sog, ILandObject land);
59 public delegate bool ReturnObjectsHandler(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects); 60 public delegate bool ReturnObjectsHandler(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects);
60 public delegate bool InstantMessageHandler(UUID user, UUID target); 61 public delegate bool InstantMessageHandler(UUID user, UUID target);
61 public delegate bool InventoryTransferHandler(UUID user, UUID target); 62 public delegate bool InventoryTransferHandler(UUID user, UUID target);
@@ -135,6 +136,7 @@ namespace OpenSim.Region.Framework.Scenes
135 public event EditObjectInventoryHandler OnEditObjectInventory; 136 public event EditObjectInventoryHandler OnEditObjectInventory;
136 public event MoveObjectHandler OnMoveObject; 137 public event MoveObjectHandler OnMoveObject;
137 public event ObjectEntryHandler OnObjectEntry; 138 public event ObjectEntryHandler OnObjectEntry;
139 public event ObjectEnterWithScriptsHandler OnObjectEnterWithScripts;
138 public event ReturnObjectsHandler OnReturnObjects; 140 public event ReturnObjectsHandler OnReturnObjects;
139 public event InstantMessageHandler OnInstantMessage; 141 public event InstantMessageHandler OnInstantMessage;
140 public event InventoryTransferHandler OnInventoryTransfer; 142 public event InventoryTransferHandler OnInventoryTransfer;
@@ -565,6 +567,21 @@ namespace OpenSim.Region.Framework.Scenes
565 return true; 567 return true;
566 } 568 }
567 569
570 public bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject land)
571 {
572 ObjectEnterWithScriptsHandler handler = OnObjectEnterWithScripts;
573 if (handler != null)
574 {
575 Delegate[] list = handler.GetInvocationList();
576 foreach (ObjectEnterWithScriptsHandler h in list)
577 {
578 if (h(sog, land) == false)
579 return false;
580 }
581 }
582 return true;
583 }
584
568 #endregion 585 #endregion
569 586
570 #region RETURN OBJECT 587 #region RETURN OBJECT
diff --git a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
index af32d05..61b6d68 100644
--- a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
+++ b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs
@@ -83,6 +83,7 @@ namespace OpenSim.Region.OptionalModules
83 m_scene = scene; 83 m_scene = scene;
84 scene.Permissions.OnRezObject += CanRezObject; 84 scene.Permissions.OnRezObject += CanRezObject;
85 scene.Permissions.OnObjectEntry += CanObjectEnter; 85 scene.Permissions.OnObjectEntry += CanObjectEnter;
86 scene.Permissions.OnObjectEnterWithScripts += CanObjectEnterWithScripts;
86 scene.Permissions.OnDuplicateObject += CanDuplicateObject; 87 scene.Permissions.OnDuplicateObject += CanDuplicateObject;
87 88
88 m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName); 89 m_log.DebugFormat("[PRIM LIMITS]: Region {0} added", scene.RegionInfo.RegionName);
@@ -95,6 +96,7 @@ namespace OpenSim.Region.OptionalModules
95 96
96 m_scene.Permissions.OnRezObject -= CanRezObject; 97 m_scene.Permissions.OnRezObject -= CanRezObject;
97 m_scene.Permissions.OnObjectEntry -= CanObjectEnter; 98 m_scene.Permissions.OnObjectEntry -= CanObjectEnter;
99 scene.Permissions.OnObjectEnterWithScripts -= CanObjectEnterWithScripts;
98 m_scene.Permissions.OnDuplicateObject -= CanDuplicateObject; 100 m_scene.Permissions.OnDuplicateObject -= CanDuplicateObject;
99 } 101 }
100 102
@@ -173,6 +175,26 @@ namespace OpenSim.Region.OptionalModules
173 return true; 175 return true;
174 } 176 }
175 177
178 private bool CanObjectEnterWithScripts(SceneObjectGroup sog, ILandObject newParcel)
179 {
180 if (sog == null)
181 return false;
182
183 if (newParcel == null)
184 return true;
185
186 int objectCount = sog.PrimCount;
187
188 // TODO: Add Special Case here for temporary prims
189
190 string response = DoCommonChecks(objectCount, sog.OwnerID, newParcel);
191
192 if (response != null)
193 return false;
194
195 return true;
196 }
197
176 private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo) 198 private string DoCommonChecks(int objectCount, UUID ownerID, ILandObject lo)
177 { 199 {
178 string response = null; 200 string response = null;