aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-04-05 19:37:02 +0100
committerJustin Clark-Casey (justincc)2010-04-05 19:37:02 +0100
commit9ecad5041944ad51a815972ace5366430973503c (patch)
tree9506d7568dd215a21fc2b3aee5df1ba39b56a23c
parentUpdates to config files for groups (diff)
downloadopensim-SC_OLD-9ecad5041944ad51a815972ace5366430973503c.zip
opensim-SC_OLD-9ecad5041944ad51a815972ace5366430973503c.tar.gz
opensim-SC_OLD-9ecad5041944ad51a815972ace5366430973503c.tar.bz2
opensim-SC_OLD-9ecad5041944ad51a815972ace5366430973503c.tar.xz
Partially implement share with group option for object inventory items
If serverside permissions are off then this works as expected. Previously, it was impossible for more than one person to edit such items even if permissions were off. If serverside permissions are on then this works as expected if the object was created by an avatar who had the required group active. However, if the group for the object is later set then the contained item is still not editable. This may be linked to a wider bug where the object is still not modifiable by the group anyway
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs15
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs10
4 files changed, 22 insertions, 8 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 25f6ef0..7ccdd58 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -669,8 +669,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
669 public void ProcessSpecificPacketAsync(object state) 669 public void ProcessSpecificPacketAsync(object state)
670 { 670 {
671 AsyncPacketProcess packetObject = (AsyncPacketProcess)state; 671 AsyncPacketProcess packetObject = (AsyncPacketProcess)state;
672 packetObject.result = packetObject.Method(packetObject.ClientView, packetObject.Pack); 672 packetObject.result = packetObject.Method(packetObject.ClientView, packetObject.Pack);
673
674 } 673 }
675 674
676 #endregion Packet Handling 675 #endregion Packet Handling
@@ -7683,12 +7682,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7683 newTaskItem.GroupPermissions = updatetask.InventoryData.GroupMask; 7682 newTaskItem.GroupPermissions = updatetask.InventoryData.GroupMask;
7684 newTaskItem.EveryonePermissions = updatetask.InventoryData.EveryoneMask; 7683 newTaskItem.EveryonePermissions = updatetask.InventoryData.EveryoneMask;
7685 newTaskItem.NextPermissions = updatetask.InventoryData.NextOwnerMask; 7684 newTaskItem.NextPermissions = updatetask.InventoryData.NextOwnerMask;
7685
7686 // Unused? Clicking share with group sets GroupPermissions instead, so perhaps this is something
7687 // different
7686 //newTaskItem.GroupOwned=updatetask.InventoryData.GroupOwned; 7688 //newTaskItem.GroupOwned=updatetask.InventoryData.GroupOwned;
7687 newTaskItem.Type = updatetask.InventoryData.Type; 7689 newTaskItem.Type = updatetask.InventoryData.Type;
7688 newTaskItem.InvType = updatetask.InventoryData.InvType; 7690 newTaskItem.InvType = updatetask.InventoryData.InvType;
7689 newTaskItem.Flags = updatetask.InventoryData.Flags; 7691 newTaskItem.Flags = updatetask.InventoryData.Flags;
7690 //newTaskItem.SaleType=updatetask.InventoryData.SaleType; 7692 //newTaskItem.SaleType=updatetask.InventoryData.SaleType;
7691 //newTaskItem.SalePrice=updatetask.InventoryData.SalePrice;; 7693 //newTaskItem.SalePrice=updatetask.InventoryData.SalePrice;
7692 newTaskItem.Name = Util.FieldToString(updatetask.InventoryData.Name); 7694 newTaskItem.Name = Util.FieldToString(updatetask.InventoryData.Name);
7693 newTaskItem.Description = Util.FieldToString(updatetask.InventoryData.Description); 7695 newTaskItem.Description = Util.FieldToString(updatetask.InventoryData.Description);
7694 newTaskItem.CreationDate = (uint)updatetask.InventoryData.CreationDate; 7696 newTaskItem.CreationDate = (uint)updatetask.InventoryData.CreationDate;
@@ -7696,7 +7698,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7696 newTaskItem, updatetask.UpdateData.LocalID); 7698 newTaskItem, updatetask.UpdateData.LocalID);
7697 } 7699 }
7698 } 7700 }
7699 } 7701 }
7700 7702
7701 return true; 7703 return true;
7702 } 7704 }
@@ -11088,7 +11090,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11088 { 11090 {
11089 if (m_debugPacketLevel >= 255) 11091 if (m_debugPacketLevel >= 255)
11090 m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type); 11092 m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type);
11091 11093
11092 if (!ProcessPacketMethod(Pack)) 11094 if (!ProcessPacketMethod(Pack))
11093 m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type); 11095 m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type);
11094 11096
@@ -11615,6 +11617,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11615 public PacketMethod method; 11617 public PacketMethod method;
11616 public bool Async; 11618 public bool Async;
11617 } 11619 }
11620
11618 public class AsyncPacketProcess 11621 public class AsyncPacketProcess
11619 { 11622 {
11620 public bool result = false; 11623 public bool result = false;
@@ -11692,4 +11695,4 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11692 OutPacket(dialog, ThrottleOutPacketType.Task); 11695 OutPacket(dialog, ThrottleOutPacketType.Task);
11693 } 11696 }
11694 } 11697 }
11695} 11698} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 31c0be1..3b7f38e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1160,6 +1160,7 @@ namespace OpenSim.Region.Framework.Scenes
1160 item = LibraryService.LibraryRootFolder.FindItem(itemID); 1160 item = LibraryService.LibraryRootFolder.FindItem(itemID);
1161 } 1161 }
1162 1162
1163 // If we've found the item in the user's inventory or in the library
1163 if (item != null) 1164 if (item != null)
1164 { 1165 {
1165 part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID); 1166 part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 71354b4..4034744 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -173,7 +173,9 @@ namespace OpenSim.Region.Framework.Scenes
173 item.NextPermissions; 173 item.NextPermissions;
174 taskItem.NextPermissions = item.NextPermissions; 174 taskItem.NextPermissions = item.NextPermissions;
175 taskItem.CurrentPermissions |= 8; 175 taskItem.CurrentPermissions |= 8;
176 } else { 176 }
177 else
178 {
177 taskItem.BasePermissions = item.BasePermissions; 179 taskItem.BasePermissions = item.BasePermissions;
178 taskItem.CurrentPermissions = item.CurrentPermissions; 180 taskItem.CurrentPermissions = item.CurrentPermissions;
179 taskItem.CurrentPermissions |= 8; 181 taskItem.CurrentPermissions |= 8;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 77bf6fe..2e13f90 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -527,6 +527,7 @@ namespace OpenSim.Region.Framework.Scenes
527 item.ParentID = m_part.UUID; 527 item.ParentID = m_part.UUID;
528 item.ParentPartID = m_part.UUID; 528 item.ParentPartID = m_part.UUID;
529 item.Name = name; 529 item.Name = name;
530 item.GroupID = m_part.GroupID;
530 531
531 lock (m_items) 532 lock (m_items)
532 { 533 {
@@ -619,6 +620,12 @@ namespace OpenSim.Region.Framework.Scenes
619 item.ParentID = m_part.UUID; 620 item.ParentID = m_part.UUID;
620 item.ParentPartID = m_part.UUID; 621 item.ParentPartID = m_part.UUID;
621 item.Flags = m_items[item.ItemID].Flags; 622 item.Flags = m_items[item.ItemID].Flags;
623
624 // If group permissions have been set on, check that the groupID is up to date in case it has
625 // changed since permissions were last set.
626 if (item.GroupPermissions != (uint)PermissionMask.None)
627 item.GroupID = m_part.GroupID;
628
622 if (item.AssetID == UUID.Zero) 629 if (item.AssetID == UUID.Zero)
623 { 630 {
624 item.AssetID = m_items[item.ItemID].AssetID; 631 item.AssetID = m_items[item.ItemID].AssetID;
@@ -770,6 +777,7 @@ namespace OpenSim.Region.Framework.Scenes
770 uint everyoneMask = 0; 777 uint everyoneMask = 0;
771 uint baseMask = item.BasePermissions; 778 uint baseMask = item.BasePermissions;
772 uint ownerMask = item.CurrentPermissions; 779 uint ownerMask = item.CurrentPermissions;
780 uint groupMask = item.GroupPermissions;
773 781
774 invString.AddItemStart(); 782 invString.AddItemStart();
775 invString.AddNameValueLine("item_id", item.ItemID.ToString()); 783 invString.AddNameValueLine("item_id", item.ItemID.ToString());
@@ -779,7 +787,7 @@ namespace OpenSim.Region.Framework.Scenes
779 787
780 invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask)); 788 invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
781 invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask)); 789 invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
782 invString.AddNameValueLine("group_mask", Utils.UIntToHexString(0)); 790 invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
783 invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask)); 791 invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
784 invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions)); 792 invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
785 793