From a5838cf0a689facd58bc17f11ed6c312ef541aab Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 11 Nov 2011 00:28:12 +0000 Subject: Prevent linking objects while they are deeded. On unlinking deeded objects, set LastOwnerID properly so the parts cannot be transferred, circumventing no trans perms --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index b2e5dc3..743fd50 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -1661,6 +1661,13 @@ namespace OpenSim.Region.Framework.Scenes /// protected internal void LinkObjects(SceneObjectPart root, List children) { + SceneObjectGroup parentGroup = root.ParentGroup; + if (parentGroup == null) return; + + // Cowardly refuse to link to a group owned root + if (parentGroup.OwnerID == parentGroup.GroupID) + return; + Monitor.Enter(m_updateLock); try { @@ -1683,11 +1690,14 @@ namespace OpenSim.Region.Framework.Scenes foreach (SceneObjectGroup child in childGroups) { - parentGroup.LinkToGroup(child); + if (parentGroup.OwnerID == child.OwnerID) + { + parentGroup.LinkToGroup(child); - // this is here so physics gets updated! - // Don't remove! Bad juju! Stay away! or fix physics! - child.AbsolutePosition = child.AbsolutePosition; + // this is here so physics gets updated! + // Don't remove! Bad juju! Stay away! or fix physics! + child.AbsolutePosition = child.AbsolutePosition; + } } // We need to explicitly resend the newly link prim's object properties since no other actions @@ -1725,9 +1735,14 @@ namespace OpenSim.Region.Framework.Scenes if (part.ParentGroup.PrimCount != 1) // Skip single { if (part.LinkNum < 2) // Root + { rootParts.Add(part); + } else + { + part.LastOwnerID = part.ParentGroup.RootPart.LastOwnerID; childParts.Add(part); + } SceneObjectGroup group = part.ParentGroup; if (!affectedGroups.Contains(group)) -- cgit v1.1