Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim
commit
2527aeb40c
|
@ -697,6 +697,7 @@ namespace OpenSim.Data.SQLite
|
|||
DataRow landRow = land.Rows.Find(globalID.ToString());
|
||||
if (landRow != null)
|
||||
{
|
||||
landRow.Delete();
|
||||
land.Rows.Remove(landRow);
|
||||
}
|
||||
List<DataRow> rowsToDelete = new List<DataRow>();
|
||||
|
@ -707,6 +708,7 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
for (int iter = 0; iter < rowsToDelete.Count; iter++)
|
||||
{
|
||||
rowsToDelete[iter].Delete();
|
||||
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
||||
}
|
||||
}
|
||||
|
@ -755,6 +757,7 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
for (int iter = 0; iter < rowsToDelete.Count; iter++)
|
||||
{
|
||||
rowsToDelete[iter].Delete();
|
||||
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
||||
}
|
||||
rowsToDelete.Clear();
|
||||
|
|
|
@ -657,6 +657,7 @@ namespace OpenSim.Data.SQLiteLegacy
|
|||
DataRow landRow = land.Rows.Find(globalID.ToString());
|
||||
if (landRow != null)
|
||||
{
|
||||
landRow.Delete();
|
||||
land.Rows.Remove(landRow);
|
||||
}
|
||||
List<DataRow> rowsToDelete = new List<DataRow>();
|
||||
|
@ -667,6 +668,7 @@ namespace OpenSim.Data.SQLiteLegacy
|
|||
}
|
||||
for (int iter = 0; iter < rowsToDelete.Count; iter++)
|
||||
{
|
||||
rowsToDelete[iter].Delete();
|
||||
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
||||
}
|
||||
|
||||
|
@ -717,6 +719,7 @@ namespace OpenSim.Data.SQLiteLegacy
|
|||
}
|
||||
for (int iter = 0; iter < rowsToDelete.Count; iter++)
|
||||
{
|
||||
rowsToDelete[iter].Delete();
|
||||
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
||||
}
|
||||
rowsToDelete.Clear();
|
||||
|
|
|
@ -117,7 +117,7 @@ namespace OpenSim.Framework
|
|||
}
|
||||
protected UUID m_creatorIdAsUuid = UUID.Zero;
|
||||
|
||||
protected string m_creatorData;
|
||||
protected string m_creatorData = string.Empty;
|
||||
public string CreatorData // = <profile url>;<name>
|
||||
{
|
||||
get { return m_creatorData; }
|
||||
|
|
|
@ -111,7 +111,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
return;
|
||||
|
||||
if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId))
|
||||
{
|
||||
remoteClient.SendAgentAlertMessage(
|
||||
"You don't have sufficient permissions to attach this object", false);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should
|
||||
// be removed when that functionality is implemented in opensim
|
||||
|
@ -141,8 +146,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
{
|
||||
Vector3 attachPos = group.AbsolutePosition;
|
||||
|
||||
if (m_scene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId))
|
||||
{
|
||||
// TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should
|
||||
// be removed when that functionality is implemented in opensim
|
||||
AttachmentPt &= 0x7f;
|
||||
|
@ -202,14 +205,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
ShowAttachInUserInventory(remoteClient, AttachmentPt, itemID, group);
|
||||
|
||||
AttachToAgent(sp, group, AttachmentPt, attachPos, silent);
|
||||
}
|
||||
else
|
||||
{
|
||||
remoteClient.SendAgentAlertMessage(
|
||||
"You don't have sufficient permissions to attach this object", false);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
|
||||
List<string> mainParams = ops.Parse(cmdparams);
|
||||
|
||||
if (cmdparams.Length > 2)
|
||||
if (mainParams.Count > 2)
|
||||
{
|
||||
ArchiveRegion(mainParams[2], options);
|
||||
}
|
||||
|
|
|
@ -1733,7 +1733,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// Autoreturn has a null client. Nothing else does. So
|
||||
// allow only returns
|
||||
if (action != DeRezAction.Return)
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[AGENT INVENTORY]: Ignoring attempt to {0} {1} {2} without a client",
|
||||
action, grp.Name, grp.UUID);
|
||||
return;
|
||||
}
|
||||
|
||||
permissionToTakeCopy = false;
|
||||
}
|
||||
|
@ -1741,13 +1746,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
if (!Permissions.CanTakeCopyObject(grp.UUID, remoteClient.AgentId))
|
||||
permissionToTakeCopy = false;
|
||||
|
||||
if (!Permissions.CanTakeObject(grp.UUID, remoteClient.AgentId))
|
||||
permissionToTake = false;
|
||||
|
||||
if (!Permissions.CanDeleteObject(grp.UUID, remoteClient.AgentId))
|
||||
permissionToDelete = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Handle god perms
|
||||
|
|
|
@ -27,7 +27,9 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
|
@ -88,6 +90,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public class ScenePermissions
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private Scene m_scene;
|
||||
|
||||
public ScenePermissions(Scene scene)
|
||||
|
@ -242,6 +246,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
#region DELETE OBJECT
|
||||
public bool CanDeleteObject(UUID objectID, UUID deleter)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
DeleteObjectHandler handler = OnDeleteObject;
|
||||
if (handler != null)
|
||||
{
|
||||
|
@ -249,10 +255,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (DeleteObjectHandler h in list)
|
||||
{
|
||||
if (h(objectID, deleter, m_scene) == false)
|
||||
return false;
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PERMISSIONS]: CanDeleteObject() fired for object {0}, deleter {1}, result {2}",
|
||||
// objectID, deleter, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -260,6 +274,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
#region TAKE OBJECT
|
||||
public bool CanTakeObject(UUID objectID, UUID AvatarTakingUUID)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
TakeObjectHandler handler = OnTakeObject;
|
||||
if (handler != null)
|
||||
{
|
||||
|
@ -267,10 +283,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (TakeObjectHandler h in list)
|
||||
{
|
||||
if (h(objectID, AvatarTakingUUID, m_scene) == false)
|
||||
return false;
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PERMISSIONS]: CanTakeObject() fired for object {0}, taker {1}, result {2}",
|
||||
// objectID, AvatarTakingUUID, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -278,6 +302,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
#region TAKE COPY OBJECT
|
||||
public bool CanTakeCopyObject(UUID objectID, UUID userID)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
TakeCopyObjectHandler handler = OnTakeCopyObject;
|
||||
if (handler != null)
|
||||
{
|
||||
|
@ -285,10 +311,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (TakeCopyObjectHandler h in list)
|
||||
{
|
||||
if (h(objectID, userID, m_scene) == false)
|
||||
return false;
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PERMISSIONS]: CanTakeCopyObject() fired for object {0}, user {1}, result {2}",
|
||||
// objectID, userID, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -383,6 +417,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
#region RETURN OBJECT
|
||||
public bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
ReturnObjectsHandler handler = OnReturnObjects;
|
||||
if (handler != null)
|
||||
{
|
||||
|
@ -390,10 +426,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (ReturnObjectsHandler h in list)
|
||||
{
|
||||
if (h(land, user, objects, m_scene) == false)
|
||||
return false;
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PERMISSIONS]: CanReturnObjects() fired for user {0} for {1} objects on {2}, result {3}",
|
||||
// user, objects.Count, land.LandData.Name, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -2607,6 +2607,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
//if (part.UUID != m_rootPart.UUID)
|
||||
|
||||
HasGroupChanged = true;
|
||||
part.TriggerScriptChangedEvent(Changed.SCALE);
|
||||
ScheduleGroupForFullUpdate();
|
||||
|
||||
//if (part.UUID == m_rootPart.UUID)
|
||||
|
@ -2758,6 +2759,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
part.IgnoreUndoUpdate = false;
|
||||
part.StoreUndoState();
|
||||
HasGroupChanged = true;
|
||||
m_rootPart.TriggerScriptChangedEvent(Changed.SCALE);
|
||||
ScheduleGroupForTerseUpdate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1002,21 +1002,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public PrimitiveBaseShape Shape
|
||||
{
|
||||
get { return m_shape; }
|
||||
set
|
||||
{
|
||||
bool shape_changed = false;
|
||||
// TODO: this should really be restricted to the right
|
||||
// set of attributes on shape change. For instance,
|
||||
// changing the lighting on a shape shouldn't cause
|
||||
// this.
|
||||
if (m_shape != null)
|
||||
shape_changed = true;
|
||||
|
||||
m_shape = value;
|
||||
|
||||
if (shape_changed)
|
||||
TriggerScriptChangedEvent(Changed.SHAPE);
|
||||
}
|
||||
set { m_shape = value; }
|
||||
}
|
||||
|
||||
public Vector3 Scale
|
||||
|
@ -4570,6 +4556,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ParentGroup.RootPart.Rezzed = DateTime.UtcNow;
|
||||
|
||||
ParentGroup.HasGroupChanged = true;
|
||||
TriggerScriptChangedEvent(Changed.SHAPE);
|
||||
ScheduleFullUpdate();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Nini.Config;
|
||||
using NUnit.Framework;
|
||||
using NUnit.Framework.SyntaxHelpers;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Communications;
|
||||
using OpenSim.Region.CoreModules.World.Permissions;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
using OpenSim.Tests.Common.Setup;
|
||||
|
||||
namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests manipulation of scene objects by users.
|
||||
/// </summary>
|
||||
///
|
||||
/// This is at a level above the SceneObjectBasicTests, which act on the scene directly.
|
||||
/// FIXME: These tests are very incomplete - they only test for a few conditions.
|
||||
[TestFixture]
|
||||
public class SceneObjectUserTests
|
||||
{
|
||||
/// <summary>
|
||||
/// Test deleting an object from a scene.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestDeRezSceneObject()
|
||||
{
|
||||
TestHelper.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
|
||||
|
||||
TestScene scene = SceneSetupHelpers.SetupScene();
|
||||
IConfigSource configSource = new IniConfigSource();
|
||||
IConfig config = configSource.AddConfig("Startup");
|
||||
config.Set("serverside_object_permissions", true);
|
||||
SceneSetupHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
|
||||
TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId);
|
||||
|
||||
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
|
||||
AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
|
||||
sogd.Enabled = false;
|
||||
|
||||
SceneObjectPart part
|
||||
= new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero);
|
||||
part.Name = "obj1";
|
||||
scene.AddNewSceneObject(new SceneObjectGroup(part), false);
|
||||
List<uint> localIds = new List<uint>();
|
||||
localIds.Add(part.LocalId);
|
||||
|
||||
scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
|
||||
sogd.InventoryDeQueueAndDelete();
|
||||
|
||||
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||
Assert.That(retrievedPart, Is.Null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test deleting an object from a scene where the deleter is not the owner
|
||||
/// </summary>
|
||||
///
|
||||
/// This test assumes that the deleter is not a god.
|
||||
[Test]
|
||||
public void TestDeRezSceneObjectNotOwner()
|
||||
{
|
||||
TestHelper.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
|
||||
UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001");
|
||||
|
||||
TestScene scene = SceneSetupHelpers.SetupScene();
|
||||
IConfigSource configSource = new IniConfigSource();
|
||||
IConfig config = configSource.AddConfig("Startup");
|
||||
config.Set("serverside_object_permissions", true);
|
||||
SceneSetupHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
|
||||
TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId);
|
||||
|
||||
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
|
||||
AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
|
||||
sogd.Enabled = false;
|
||||
|
||||
SceneObjectPart part
|
||||
= new SceneObjectPart(objectOwnerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero);
|
||||
part.Name = "obj1";
|
||||
scene.AddNewSceneObject(new SceneObjectGroup(part), false);
|
||||
List<uint> localIds = new List<uint>();
|
||||
localIds.Add(part.LocalId);
|
||||
|
||||
scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
|
||||
sogd.InventoryDeQueueAndDelete();
|
||||
|
||||
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||
Assert.That(retrievedPart.UUID, Is.EqualTo(part.UUID));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -65,6 +65,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
[TestFixtureSetUp]
|
||||
public void Init()
|
||||
{
|
||||
TestHelper.InMethod();
|
||||
|
||||
scene = SceneSetupHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000);
|
||||
scene2 = SceneSetupHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000);
|
||||
scene3 = SceneSetupHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000);
|
||||
|
|
Loading…
Reference in New Issue