diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
index a62a2080c7..90545690c2 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
@@ -1329,6 +1329,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
rdata.writer.WriteStartElement(String.Empty, "Permissions", String.Empty);
rdata.writer.WriteAttributeString("current", String.Empty, i.CurrentPermissions.ToString("X"));
rdata.writer.WriteAttributeString("next", String.Empty, i.NextPermissions.ToString("X"));
+ rdata.writer.WriteAttributeString("group", String.Empty, i.GroupPermissions.ToString("X"));
rdata.writer.WriteAttributeString("everyone", String.Empty, i.EveryOnePermissions.ToString("X"));
rdata.writer.WriteAttributeString("base", String.Empty, i.BasePermissions.ToString("X"));
rdata.writer.WriteEndElement();
@@ -1950,6 +1951,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
case "next" :
ic.NextPermissions = UInt32.Parse(ic.xml.Value, System.Globalization.NumberStyles.HexNumber);
break;
+ case "group" :
+ ic.GroupPermissions = UInt32.Parse(ic.xml.Value, System.Globalization.NumberStyles.HexNumber);
+ break;
case "everyone" :
ic.EveryOnePermissions = UInt32.Parse(ic.xml.Value, System.Globalization.NumberStyles.HexNumber);
break;
@@ -2061,6 +2065,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
ic.Item.CurrentPermissions = ic.CurrentPermissions;
ic.Item.EveryOnePermissions = ic.EveryOnePermissions;
ic.Item.BasePermissions = ic.BasePermissions;
+ ic.Item.GroupPermissions = ic.GroupPermissions;
ic.Item.NextPermissions = ic.NextPermissions;
// If no type was specified for this item, we can attempt to
@@ -2258,11 +2263,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
internal /*static*/ const uint DefaultNext = 0x82000;
internal /*static*/ const uint DefaultBase = 0x7FFFFFFF;
internal /*static*/ const uint DefaultEveryOne = 0x0;
+ internal /*static*/ const uint DefaultGroup = 0x0;
internal uint CurrentPermissions = 0x00;
internal uint NextPermissions = 0x00;
internal uint BasePermissions = 0x00;
internal uint EveryOnePermissions = 0x00;
+ internal uint GroupPermissions = 0x00;
internal XmlInventoryCollection()
{
@@ -2286,6 +2293,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
CurrentPermissions = DefaultCurrent;
NextPermissions = DefaultNext;
BasePermissions = DefaultBase;
+ GroupPermissions = DefaultGroup;
EveryOnePermissions = DefaultEveryOne;
}
diff --git a/OpenSim/Data/MySQL/MySQLInventoryData.cs b/OpenSim/Data/MySQL/MySQLInventoryData.cs
index 755dbab777..efc781da2a 100644
--- a/OpenSim/Data/MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Data/MySQL/MySQLInventoryData.cs
@@ -333,6 +333,7 @@ namespace OpenSim.Data.MySQL
item.InvType = (int) reader["invType"];
item.BasePermissions = (uint) reader["inventoryBasePermissions"];
item.EveryOnePermissions = (uint) reader["inventoryEveryOnePermissions"];
+ item.GroupPermissions = (uint) reader["inventoryGroupPermissions"];
item.SalePrice = (int) reader["salePrice"];
item.SaleType = Convert.ToByte(reader["saleType"]);
item.CreationDate = (int) reader["creationDate"];
@@ -455,12 +456,12 @@ namespace OpenSim.Data.MySQL
string sql =
"REPLACE INTO inventoryitems (inventoryID, assetID, assetType, parentFolderID, avatarID, inventoryName"
+ ", inventoryDescription, inventoryNextPermissions, inventoryCurrentPermissions, invType"
- + ", creatorID, inventoryBasePermissions, inventoryEveryOnePermissions, salePrice, saleType"
+ + ", creatorID, inventoryBasePermissions, inventoryEveryOnePermissions, inventoryGroupPermissions, salePrice, saleType"
+ ", creationDate, groupID, groupOwned, flags) VALUES ";
sql +=
"(?inventoryID, ?assetID, ?assetType, ?parentFolderID, ?avatarID, ?inventoryName, ?inventoryDescription"
+ ", ?inventoryNextPermissions, ?inventoryCurrentPermissions, ?invType, ?creatorID"
- + ", ?inventoryBasePermissions, ?inventoryEveryOnePermissions, ?salePrice, ?saleType, ?creationDate"
+ + ", ?inventoryBasePermissions, ?inventoryEveryOnePermissions, ?inventoryGroupPermissions, ?salePrice, ?saleType, ?creationDate"
+ ", ?groupID, ?groupOwned, ?flags)";
try
@@ -482,6 +483,7 @@ namespace OpenSim.Data.MySQL
result.Parameters.AddWithValue("?creatorID", item.Creator.ToString());
result.Parameters.AddWithValue("?inventoryBasePermissions", item.BasePermissions);
result.Parameters.AddWithValue("?inventoryEveryOnePermissions", item.EveryOnePermissions);
+ result.Parameters.AddWithValue("?inventoryGroupPermissions", item.GroupPermissions);
result.Parameters.AddWithValue("?salePrice", item.SalePrice);
result.Parameters.AddWithValue("?saleType", item.SaleType);
result.Parameters.AddWithValue("?creationDate", item.CreationDate);
diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs
index 25cef3f350..cd96e01caa 100644
--- a/OpenSim/Framework/InventoryItemBase.cs
+++ b/OpenSim/Framework/InventoryItemBase.cs
@@ -74,6 +74,11 @@ namespace OpenSim.Framework
///
private uint _everyOnePermissions;
+ ///
+ ///
+ ///
+ private uint _groupPermissions;
+
///
/// The folder this item is contained in
///
@@ -190,6 +195,12 @@ namespace OpenSim.Framework
set { _everyOnePermissions = value; }
}
+ public uint GroupPermissions
+ {
+ get { return _groupPermissions; }
+ set { _groupPermissions = value; }
+ }
+
public int AssetType
{
get { return _assetType; }
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index c6a43ecf09..4b3f829382 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -48,6 +48,6 @@ namespace OpenSim
/// of the code that is too old.
///
///
- public readonly static int MajorInterfaceVersion = 0;
+ public readonly static int MajorInterfaceVersion = 1;
}
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index bb43750d8e..ea82a374f6 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -1561,10 +1561,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
descend.ItemData[i].OwnerID = item.Owner;
descend.ItemData[i].Type = (sbyte)item.AssetType;
- //descend.ItemData[i].GroupID = new UUID("00000000-0000-0000-0000-000000000000");
descend.ItemData[i].GroupID = item.GroupID;
descend.ItemData[i].GroupOwned = item.GroupOwned;
- descend.ItemData[i].GroupMask = 0;
+ descend.ItemData[i].GroupMask = item.GroupPermissions;
descend.ItemData[i].CreationDate = item.CreationDate;
descend.ItemData[i].SalePrice = item.SalePrice;
descend.ItemData[i].SaleType = item.SaleType;
@@ -1708,10 +1707,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
inventoryReply.InventoryData[0].OwnerMask = item.CurrentPermissions;
inventoryReply.InventoryData[0].Type = (sbyte)item.AssetType;
- //inventoryReply.InventoryData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000");
inventoryReply.InventoryData[0].GroupID = item.GroupID;
inventoryReply.InventoryData[0].GroupOwned = item.GroupOwned;
- inventoryReply.InventoryData[0].GroupMask = 0;
+ inventoryReply.InventoryData[0].GroupMask = item.GroupPermissions;
inventoryReply.InventoryData[0].Flags = item.Flags;
inventoryReply.InventoryData[0].SalePrice = item.SalePrice;
inventoryReply.InventoryData[0].SaleType = item.SaleType;
@@ -1763,10 +1761,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
bulkUpdate.ItemData[0].OwnerMask = item.CurrentPermissions;
bulkUpdate.ItemData[0].Type = (sbyte)item.AssetType;
- //bulkUpdate.ItemData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000");
bulkUpdate.ItemData[0].GroupID = item.GroupID;
bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned;
- bulkUpdate.ItemData[0].GroupMask = 0;
+ bulkUpdate.ItemData[0].GroupMask = item.GroupPermissions;
bulkUpdate.ItemData[0].Flags = item.Flags;
bulkUpdate.ItemData[0].SalePrice = item.SalePrice;
bulkUpdate.ItemData[0].SaleType = item.SaleType;
@@ -1811,10 +1808,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
InventoryReply.InventoryData[0].OwnerMask = Item.CurrentPermissions;
InventoryReply.InventoryData[0].Type = (sbyte)Item.AssetType;
- //InventoryReply.InventoryData[0].GroupID = new UUID("00000000-0000-0000-0000-000000000000");
InventoryReply.InventoryData[0].GroupID = Item.GroupID;
InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned;
- InventoryReply.InventoryData[0].GroupMask = 0;
+ InventoryReply.InventoryData[0].GroupMask = Item.GroupPermissions;
InventoryReply.InventoryData[0].Flags = Item.Flags;
InventoryReply.InventoryData[0].SalePrice = Item.SalePrice;
InventoryReply.InventoryData[0].SaleType = Item.SaleType;
@@ -5213,6 +5209,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
itemUpd.Description = Util.FieldToString(update.InventoryData[i].Description);
itemUpd.GroupID = update.InventoryData[i].GroupID;
itemUpd.GroupOwned = update.InventoryData[i].GroupOwned;
+ itemUpd.GroupPermissions = update.InventoryData[i].GroupMask;
itemUpd.NextPermissions = update.InventoryData[i].NextOwnerMask;
itemUpd.EveryOnePermissions = update.InventoryData[i].EveryoneMask;
itemUpd.CreationDate = update.InventoryData[i].CreationDate;
@@ -5419,6 +5416,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
item.CurrentPermissions = rezScriptx.InventoryBlock.OwnerMask;
item.EveryOnePermissions = rezScriptx.InventoryBlock.EveryoneMask;
item.NextPermissions = rezScriptx.InventoryBlock.NextOwnerMask;
+ item.GroupPermissions = rezScriptx.InventoryBlock.GroupMask;
item.GroupOwned = rezScriptx.InventoryBlock.GroupOwned;
item.GroupID = rezScriptx.InventoryBlock.GroupID;
item.AssetType = rezScriptx.InventoryBlock.Type;
diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetXferUploader.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetXferUploader.cs
index 2bac3c7e57..05b7fa3eb5 100644
--- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetXferUploader.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetXferUploader.cs
@@ -293,6 +293,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
item.Folder = InventFolder;
item.BasePermissions = 0x7fffffff;
item.CurrentPermissions = 0x7fffffff;
+ item.GroupPermissions=0;
item.EveryOnePermissions=0;
item.NextPermissions = nextPerm;
item.Flags = (uint) wearableType;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index 2c0c872fac..74392cc995 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -355,11 +355,11 @@ namespace OpenSim.Region.Environment.Scenes
item.NextPermissions = itemUpd.NextPermissions;
item.CurrentPermissions |= 8; // Slam!
item.EveryOnePermissions = itemUpd.EveryOnePermissions;
+ item.GroupPermissions = itemUpd.GroupPermissions;
- // TODO: Requires sanity checks
- //item.GroupID = itemUpd.GroupID;
- //item.GroupOwned = itemUpd.GroupOwned;
- //item.CreationDate = itemUpd.CreationDate;
+ item.GroupID = itemUpd.GroupID;
+ item.GroupOwned = itemUpd.GroupOwned;
+ item.CreationDate = itemUpd.CreationDate;
// The client sends zero if its newly created?
if (itemUpd.CreationDate == 0)
@@ -480,12 +480,14 @@ namespace OpenSim.Region.Environment.Scenes
itemCopy.NextPermissions = item.NextPermissions;
itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions;
+ itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions;
}
else
{
itemCopy.CurrentPermissions = item.CurrentPermissions;
itemCopy.NextPermissions = item.NextPermissions;
itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions;
+ itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions;
itemCopy.BasePermissions = item.BasePermissions;
}
itemCopy.GroupID = UUID.Zero;
@@ -584,13 +586,13 @@ namespace OpenSim.Region.Environment.Scenes
{
CreateNewInventoryItem(
remoteClient, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType,
- item.BasePermissions, item.CurrentPermissions, item.EveryOnePermissions, item.NextPermissions, Util.UnixTimeSinceEpoch());
+ item.BasePermissions, item.CurrentPermissions, item.EveryOnePermissions, item.NextPermissions, item.GroupPermissions, Util.UnixTimeSinceEpoch());
}
else
{
CreateNewInventoryItem(
remoteClient, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType,
- item.NextPermissions, item.NextPermissions, item.EveryOnePermissions & item.NextPermissions, item.NextPermissions, Util.UnixTimeSinceEpoch());
+ item.NextPermissions, item.NextPermissions, item.EveryOnePermissions & item.NextPermissions, item.NextPermissions, item.GroupPermissions, Util.UnixTimeSinceEpoch());
}
}
else
@@ -690,7 +692,7 @@ namespace OpenSim.Region.Environment.Scenes
{
CreateNewInventoryItem(
remoteClient, folderID, name, flags, callbackID, asset, invType,
- (uint)PermissionMask.All, (uint)PermissionMask.All, 0, nextOwnerMask, creationDate);
+ (uint)PermissionMask.All, (uint)PermissionMask.All, 0, nextOwnerMask, 0, creationDate);
}
///
@@ -705,7 +707,7 @@ namespace OpenSim.Region.Environment.Scenes
///
private void CreateNewInventoryItem(
IClientAPI remoteClient, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType,
- uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, int creationDate)
+ uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate)
{
CachedUserInfo userInfo
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
@@ -726,6 +728,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = currentMask;
item.NextPermissions = nextOwnerMask;
item.EveryOnePermissions = everyoneMask;
+ item.GroupPermissions = groupMask;
item.BasePermissions = baseMask;
item.CreationDate = creationDate;
@@ -978,6 +981,7 @@ namespace OpenSim.Region.Environment.Scenes
agentItem.CurrentPermissions = taskItem.NextPermissions | 8;
agentItem.NextPermissions = taskItem.NextPermissions;
agentItem.EveryOnePermissions = taskItem.EveryonePermissions & taskItem.NextPermissions;
+ agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions;
}
else
{
@@ -985,6 +989,7 @@ namespace OpenSim.Region.Environment.Scenes
agentItem.CurrentPermissions = taskItem.CurrentPermissions;
agentItem.NextPermissions = taskItem.NextPermissions;
agentItem.EveryOnePermissions = taskItem.EveryonePermissions;
+ agentItem.GroupPermissions = taskItem.GroupPermissions;
}
if (!ExternalChecks.ExternalChecksBypassPermissions())
@@ -1416,6 +1421,7 @@ namespace OpenSim.Region.Environment.Scenes
taskItem.BasePermissions = itemBase.BasePermissions;
taskItem.CurrentPermissions = itemBase.CurrentPermissions;
taskItem.EveryonePermissions = itemBase.EveryOnePermissions;
+ taskItem.GroupPermissions = itemBase.GroupPermissions;
taskItem.NextPermissions = itemBase.NextPermissions;
taskItem.GroupID = itemBase.GroupID;
taskItem.GroupPermissions = 0;
@@ -1728,6 +1734,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = item.BasePermissions;
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask & objectGroup.RootPart.NextOwnerMask;
+ item.GroupPermissions = objectGroup.RootPart.GroupMask & objectGroup.RootPart.NextOwnerMask;
item.CurrentPermissions |= 8; // Slam!
}
else
@@ -1736,6 +1743,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = objectGroup.GetEffectivePermissions();
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
+ item.GroupPermissions = objectGroup.RootPart.GroupMask;
}
// TODO: add the new fields (Flags, Sale info, etc)
@@ -1876,6 +1884,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = grp.RootPart.NextOwnerMask;
item.NextPermissions = grp.RootPart.NextOwnerMask;
item.EveryOnePermissions = grp.RootPart.EveryoneMask & grp.RootPart.NextOwnerMask;
+ item.GroupPermissions = grp.RootPart.GroupMask & grp.RootPart.NextOwnerMask;
}
else
{
@@ -1883,6 +1892,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = grp.RootPart.OwnerMask;
item.NextPermissions = grp.RootPart.NextOwnerMask;
item.EveryOnePermissions = grp.RootPart.EveryoneMask;
+ item.GroupPermissions = grp.RootPart.GroupMask;
}
item.CreationDate = Util.UnixTimeSinceEpoch();
@@ -2041,6 +2051,7 @@ namespace OpenSim.Region.Environment.Scenes
{
part.EveryoneMask = item.EveryOnePermissions;
part.NextOwnerMask = item.NextPermissions;
+ part.GroupMask = 0; // DO NOT propagate here
}
}
group.ApplyNextOwnerPermissions();
@@ -2059,6 +2070,8 @@ namespace OpenSim.Region.Environment.Scenes
{
part.EveryoneMask = item.EveryOnePermissions;
part.NextOwnerMask = item.NextPermissions;
+
+ part.GroupMask = 0; // DO NOT propagate here
}
}
@@ -2282,6 +2295,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = item.BasePermissions;
item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask;
item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask & returnobjects[i].RootPart.NextOwnerMask;
+ item.GroupPermissions = returnobjects[i].RootPart.GroupMask & returnobjects[i].RootPart.NextOwnerMask;
item.CurrentPermissions |= 8; // Slam!
}
else
@@ -2290,6 +2304,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CurrentPermissions = returnobjects[i].GetEffectivePermissions();
item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask;
item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask;
+ item.GroupPermissions = returnobjects[i].RootPart.GroupMask;
}
// TODO: add the new fields (Flags, Sale info, etc)
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 5550140c8f..71acc9f919 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -4301,6 +4301,8 @@ namespace OpenSim.Region.Environment.Scenes
item.NextPermissions = part.NextOwnerMask;
item.EveryOnePermissions = part.EveryoneMask &
part.NextOwnerMask;
+ item.GroupPermissions = part.GroupMask &
+ part.NextOwnerMask;
item.CurrentPermissions |= 8; // Slam!
item.CreationDate = Util.UnixTimeSinceEpoch();
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
index 225f7cf954..442720ae2b 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
@@ -166,6 +166,8 @@ namespace OpenSim.Region.Environment.Scenes
item.NextPermissions;
taskItem.EveryonePermissions = item.EveryOnePermissions &
item.NextPermissions;
+ taskItem.GroupPermissions = item.GroupPermissions &
+ item.NextPermissions;
taskItem.NextPermissions = item.NextPermissions;
taskItem.CurrentPermissions |= 8;
} else {
@@ -173,6 +175,7 @@ namespace OpenSim.Region.Environment.Scenes
taskItem.CurrentPermissions = item.CurrentPermissions;
taskItem.CurrentPermissions |= 8;
taskItem.EveryonePermissions = item.EveryOnePermissions;
+ taskItem.GroupPermissions = item.GroupPermissions;
taskItem.NextPermissions = item.NextPermissions;
}