aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
authorMelanie2010-03-18 18:57:29 +0000
committerMelanie2010-03-18 18:58:37 +0000
commitf35eb8819c6a872e7c4727940ffc560f7d5d68bd (patch)
tree3b71a9aa31991d5b9b5c05ecc648d7d055f960c1 /OpenSim/Region/CoreModules
parentMerge branch 'master' of ssh://3dhosting.de/var/git/careminster (diff)
downloadopensim-SC-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.zip
opensim-SC-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.gz
opensim-SC-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.bz2
opensim-SC-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.xz
Unify a previous refactor of object return with the older solution. We
really don't need two methods doing the same thing, but differently.
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs71
2 files changed, 7 insertions, 66 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 1c65965..b8c35f7 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -915,7 +915,7 @@ namespace OpenSim.Region.CoreModules.World.Land
915 915
916 foreach (List<SceneObjectGroup> ol in returns.Values) 916 foreach (List<SceneObjectGroup> ol in returns.Values)
917 { 917 {
918 if (m_scene.Permissions.CanUseObjectReturn(this, type, remote_client, ol)) 918 if (m_scene.Permissions.CanReturnObjects(this, remote_client.AgentId, ol))
919 m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); 919 m_scene.returnObjects(ol.ToArray(), remote_client.AgentId);
920 } 920 }
921 } 921 }
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 1533462..7159dc6 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -200,7 +200,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
200 m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED 200 m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED
201 m_scene.Permissions.OnMoveObject += CanMoveObject; //MAYBE FULLY IMPLEMENTED 201 m_scene.Permissions.OnMoveObject += CanMoveObject; //MAYBE FULLY IMPLEMENTED
202 m_scene.Permissions.OnObjectEntry += CanObjectEntry; 202 m_scene.Permissions.OnObjectEntry += CanObjectEntry;
203 m_scene.Permissions.OnReturnObject += CanReturnObject; //NOT YET IMPLEMENTED 203 m_scene.Permissions.OnReturnObjects += CanReturnObjects; //NOT YET IMPLEMENTED
204 m_scene.Permissions.OnRezObject += CanRezObject; //MAYBE FULLY IMPLEMENTED 204 m_scene.Permissions.OnRezObject += CanRezObject; //MAYBE FULLY IMPLEMENTED
205 m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand; 205 m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand;
206 m_scene.Permissions.OnRunScript += CanRunScript; //NOT YET IMPLEMENTED 206 m_scene.Permissions.OnRunScript += CanRunScript; //NOT YET IMPLEMENTED
@@ -230,7 +230,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
230 m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED 230 m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED
231 231
232 m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED 232 m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED
233 m_scene.Permissions.OnUseObjectReturn += CanUseObjectReturn; //NOT YET IMPLEMENTED
234 233
235 m_scene.AddCommand(this, "bypass permissions", 234 m_scene.AddCommand(this, "bypass permissions",
236 "bypass permissions <true / false>", 235 "bypass permissions <true / false>",
@@ -1258,12 +1257,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1258 return false; 1257 return false;
1259 } 1258 }
1260 1259
1261 private bool CanReturnObject(UUID objectID, UUID returnerID, Scene scene) 1260 private bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects, Scene scene)
1262 { 1261 {
1262 if (objects.Count == 0)
1263 return false;
1264
1263 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1265 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1264 if (m_bypassPermissions) return m_bypassPermissionsValue; 1266 if (m_bypassPermissions) return m_bypassPermissionsValue;
1265 1267
1266 return GenericObjectPermission(returnerID, objectID, false); 1268 return GenericObjectPermission(user, objects[0].UUID, false);
1267 } 1269 }
1268 1270
1269 private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) 1271 private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene)
@@ -1730,67 +1732,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1730 return GenericObjectPermission(agentID, prim, false); 1732 return GenericObjectPermission(agentID, prim, false);
1731 } 1733 }
1732 1734
1733 private bool CanUseObjectReturn(ILandObject parcel, uint type, IClientAPI client, List<SceneObjectGroup> retlist, Scene scene)
1734 {
1735 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1736 if (m_bypassPermissions) return m_bypassPermissionsValue;
1737
1738 long powers = 0;
1739 if (parcel.LandData.GroupID != UUID.Zero)
1740 client.GetGroupPowers(parcel.LandData.GroupID);
1741
1742 switch (type)
1743 {
1744 case (uint)ObjectReturnType.Owner:
1745 // Don't let group members return owner's objects, ever
1746 //
1747 if (parcel.LandData.IsGroupOwned)
1748 {
1749 if ((powers & (long)GroupPowers.ReturnGroupOwned) != 0)
1750 return true;
1751 }
1752 else
1753 {
1754 if (parcel.LandData.OwnerID != client.AgentId)
1755 return false;
1756 }
1757 return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupOwned);
1758 case (uint)ObjectReturnType.Group:
1759 if (parcel.LandData.OwnerID != client.AgentId)
1760 {
1761 // If permissionis granted through a group...
1762 //
1763 if ((powers & (long)GroupPowers.ReturnGroupSet) != 0)
1764 {
1765 foreach (SceneObjectGroup g in new List<SceneObjectGroup>(retlist))
1766 {
1767 // check for and remove group owned objects unless
1768 // the user also has permissions to return those
1769 //
1770 if (g.OwnerID == g.GroupID &&
1771 ((powers & (long)GroupPowers.ReturnGroupOwned) == 0))
1772 {
1773 retlist.Remove(g);
1774 }
1775 }
1776 // And allow the operation
1777 //
1778 return true;
1779 }
1780 }
1781 return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupSet);
1782 case (uint)ObjectReturnType.Other:
1783 if ((powers & (long)GroupPowers.ReturnNonGroup) != 0)
1784 return true;
1785 return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnNonGroup);
1786 case (uint)ObjectReturnType.List:
1787 break;
1788 }
1789
1790 return GenericParcelOwnerPermission(client.AgentId, parcel, 0);
1791 // Is it correct to be less restrictive for lists of objects to be returned?
1792 }
1793
1794 private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) { 1735 private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) {
1795 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType); 1736 //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType);
1796 switch (scriptType) { 1737 switch (scriptType) {