From fc365f2a31d46b9c6517159330c7f6953eb60e9f Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Fri, 15 Apr 2011 18:23:37 -0400
Subject: Thanks Snoopy for a patch that allows setting of perms on items given
to new avatars
---
.../RemoteController/RemoteAdminPlugin.cs | 35 +++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
(limited to 'OpenSim/ApplicationPlugins')
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 1b4d1ea..c6b34f9 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -1587,6 +1587,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
InventoryItemBase destinationItem = new InventoryItemBase(UUID.Random(), destination);
destinationItem.Name = item.Name;
+ destinationItem.Owner = destination;
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
@@ -1606,6 +1607,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Flags = item.Flags;
destinationItem.CreationDate = item.CreationDate;
destinationItem.Folder = destinationFolder.ID;
+ ApplyNextOwnerPermissions(destinationItem);
m_application.SceneManager.CurrentOrFirstScene.AddInventoryItem(destinationItem);
m_log.DebugFormat("[RADMIN]: Added item {0} to folder {1}", destinationItem.ID, destinationFolder.ID);
@@ -1640,6 +1642,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
InventoryItemBase destinationItem = new InventoryItemBase(UUID.Random(), destination);
destinationItem.Name = item.Name;
+ destinationItem.Owner = destination;
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
@@ -1659,6 +1662,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Flags = item.Flags;
destinationItem.CreationDate = item.CreationDate;
destinationItem.Folder = destinationFolder.ID;
+ ApplyNextOwnerPermissions(destinationItem);
m_application.SceneManager.CurrentOrFirstScene.AddInventoryItem(destinationItem);
m_log.DebugFormat("[RADMIN]: Added item {0} to folder {1}", destinationItem.ID, destinationFolder.ID);
@@ -1716,7 +1720,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
destinationFolder = new InventoryFolderBase();
destinationFolder.ID = UUID.Random();
- destinationFolder.Name = assetType.ToString();
+ if (assetType == AssetType.Clothing) {
+ destinationFolder.Name = "Clothing";
+ } else {
+ destinationFolder.Name = "Body Parts";
+ }
destinationFolder.Owner = destination;
destinationFolder.Type = (short)assetType;
destinationFolder.ParentID = inventoryService.GetRootFolder(destination).ID;
@@ -1748,6 +1756,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
InventoryItemBase destinationItem = new InventoryItemBase(UUID.Random(), destination);
destinationItem.Name = item.Name;
+ destinationItem.Owner = destination;
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
@@ -1767,6 +1776,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Flags = item.Flags;
destinationItem.CreationDate = item.CreationDate;
destinationItem.Folder = extraFolder.ID;
+ ApplyNextOwnerPermissions(destinationItem);
m_application.SceneManager.CurrentOrFirstScene.AddInventoryItem(destinationItem);
inventoryMap.Add(item.ID, destinationItem.ID);
@@ -1784,6 +1794,29 @@ namespace OpenSim.ApplicationPlugins.RemoteController
}
///
+ /// Apply next owner permissions.
+ ///
+
+ private void ApplyNextOwnerPermissions(InventoryItemBase item)
+ {
+ if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0)
+ {
+ if ((item.CurrentPermissions & ((uint)PermissionMask.Copy >> 13)) == 0)
+ item.CurrentPermissions &= ~(uint)PermissionMask.Copy;
+ if ((item.CurrentPermissions & ((uint)PermissionMask.Transfer >> 13)) == 0)
+ item.CurrentPermissions &= ~(uint)PermissionMask.Transfer;
+ if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0)
+ item.CurrentPermissions &= ~(uint)PermissionMask.Modify;
+ }
+ item.CurrentPermissions &= item.NextPermissions;
+ item.BasePermissions &= item.NextPermissions;
+ item.EveryOnePermissions &= item.NextPermissions;
+ // item.OwnerChanged = true;
+ // item.PermsMask = 0;
+ // item.PermsGranter = UUID.Zero;
+ }
+
+ ///
/// This method is called if a given model avatar name can not be found. If the external
/// file has already been loaded once, then control returns immediately. If not, then it
/// looks for a default appearance file. This file contains XML definitions of zero or more named
--
cgit v1.1