From c4d741180f0c69db90c8ccb2a06857656e7b1082 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Wed, 8 Oct 2008 02:45:23 +0000 Subject: Add some permissions checks and fixes --- .../Region/Environment/Scenes/Scene.Inventory.cs | 27 +++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes/Scene.Inventory.cs') diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 204ba39..eb21221 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -928,6 +928,11 @@ namespace OpenSim.Region.Environment.Scenes return null; } + if ((destAgent != taskItem.OwnerID) && ((taskItem.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)) + { + return null; + } + InventoryItemBase agentItem = new InventoryItemBase(); agentItem.ID = UUID.Random(); @@ -943,7 +948,7 @@ namespace OpenSim.Region.Environment.Scenes if ((destAgent != taskItem.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions()) { agentItem.BasePermissions = taskItem.NextPermissions; - agentItem.CurrentPermissions = taskItem.NextPermissions; + agentItem.CurrentPermissions = taskItem.NextPermissions | 8; agentItem.NextPermissions = taskItem.NextPermissions; agentItem.EveryOnePermissions = taskItem.EveryonePermissions & taskItem.NextPermissions; } @@ -976,6 +981,9 @@ namespace OpenSim.Region.Environment.Scenes InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(remoteClient.AgentId, part, itemId); + if (agentItem == null) + return; + agentItem.Folder = folderId; AddInventoryItem(remoteClient, agentItem); } @@ -1045,6 +1053,10 @@ namespace OpenSim.Region.Environment.Scenes avatarId); } InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId); + + if (agentItem == null) + return; + agentItem.Folder = folderId; AddInventoryItem(avatarId, agentItem); @@ -1082,6 +1094,11 @@ namespace OpenSim.Region.Environment.Scenes return; } + // Can't transfer this + // + if ((part.OwnerID != destPart.OwnerID) && ((srcTaskItem.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)) + return; + if (part.OwnerID != destPart.OwnerID && (part.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0) { // object cannot copy items to an object owned by a different owner @@ -1166,9 +1183,13 @@ namespace OpenSim.Region.Environment.Scenes foreach (UUID itemID in items) { InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(destID, host, itemID); - agentItem.Folder = newFolderID; - AddInventoryItem(destID, agentItem); + if (agentItem != null) + { + agentItem.Folder = newFolderID; + + AddInventoryItem(destID, agentItem); + } } ScenePresence avatar; -- cgit v1.1