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(-)
(limited to 'OpenSim/Region')
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