From 037b31f9dbf446ffb770ed465e9c4b46600f43fa Mon Sep 17 00:00:00 2001 From: MW Date: Sun, 29 Jun 2008 12:33:45 +0000 Subject: patch from mantis #1632, thanks Melanie --- .../Region/Environment/Scenes/Scene.Inventory.cs | 21 +++++++++++++++------ .../ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 2 +- .../Shared/Api/Implementation/LSL_Api.cs | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index d134ea3..2b3ddaa 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -1905,7 +1905,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public virtual SceneObjectGroup RezObject(TaskInventoryItem item, LLVector3 pos, LLQuaternion rot, LLVector3 vel, int param) + public virtual SceneObjectGroup RezObject(SceneObjectPart sourcePart, TaskInventoryItem item, LLVector3 pos, LLQuaternion rot, LLVector3 vel, int param) { // Rez object if (item != null) @@ -1942,15 +1942,18 @@ namespace OpenSim.Region.Environment.Scenes if (rootPart.OwnerID != item.OwnerID) { - if ((item.OwnerMask & 8) != 0) + if (ExternalChecks.ExternalChecksPropagatePermissions()) { - foreach (SceneObjectPart part in partList) + if ((item.OwnerMask & 8) != 0) { - part.EveryoneMask = item.EveryoneMask; - part.NextOwnerMask = item.NextOwnerMask; + foreach (SceneObjectPart part in partList) + { + part.EveryoneMask = item.EveryoneMask; + part.NextOwnerMask = item.NextOwnerMask; + } } + group.ApplyNextOwnerPermissions(); } - group.ApplyNextOwnerPermissions(); } foreach (SceneObjectPart part in partList) @@ -1977,6 +1980,12 @@ namespace OpenSim.Region.Environment.Scenes group.Velocity = vel; group.CreateScriptInstances(param, true); rootPart.ScheduleFullUpdate(); + + if (!ExternalChecks.ExternalChecksBypassPermissions()) + { + if ((item.OwnerMask & (uint)PermissionMask.Copy) == 0) + sourcePart.RemoveInventoryItem(item.ItemID); + } return rootPart.ParentGroup; } } diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 69235c4..b65174e 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -1993,7 +1993,7 @@ namespace OpenSim.Region.ScriptEngine.Common // need the magnitude later float velmag = (float)Util.GetMagnitude(llvel); - SceneObjectGroup new_group = World.RezObject(inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); + SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); // If either of these are null, then there was an unknown error. if (new_group == null) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 0320857..235b657 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -1844,7 +1844,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // need the magnitude later float velmag = (float)Util.GetMagnitude(llvel); - SceneObjectGroup new_group = World.RezObject(inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); + SceneObjectGroup new_group = World.RezObject(m_host, inv.Value, llpos, new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), llvel, param); // If either of these are null, then there was an unknown error. if (new_group == null) -- cgit v1.1