From 3b01c209b2931fdb2e39890f9ad14e0c6c870288 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 25 Apr 2017 16:24:07 -0700 Subject: Update libOMV --- bin/CSJ2K.dll | Bin 502784 -> 483328 bytes bin/OpenMetaverse.Rendering.Meshmerizer.dll | Bin 20480 -> 20480 bytes bin/OpenMetaverse.StructuredData.dll | Bin 102400 -> 102400 bytes bin/OpenMetaverse.dll | Bin 2199552 -> 2199552 bytes bin/OpenMetaverseTypes.dll | Bin 110592 -> 110592 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/CSJ2K.dll b/bin/CSJ2K.dll index 238291f..e882e4c 100755 Binary files a/bin/CSJ2K.dll and b/bin/CSJ2K.dll differ diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll index 1a12a1e..7087584 100755 Binary files a/bin/OpenMetaverse.Rendering.Meshmerizer.dll and b/bin/OpenMetaverse.Rendering.Meshmerizer.dll differ diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll index 7aeb089..dd3113d 100755 Binary files a/bin/OpenMetaverse.StructuredData.dll and b/bin/OpenMetaverse.StructuredData.dll differ diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll index 5c576a7..1a63a9f 100755 Binary files a/bin/OpenMetaverse.dll and b/bin/OpenMetaverse.dll differ diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll index a07cc1d..cf5080d 100755 Binary files a/bin/OpenMetaverseTypes.dll and b/bin/OpenMetaverseTypes.dll differ -- cgit v1.1 From 2b8cdb2a754b269aa8d0a2be230466806d52611a Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 25 Apr 2017 20:08:06 -0700 Subject: If we're going to show regions twice (in standalone) at least make the formatting consistent... --- OpenSim/Services/GridService/GridService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 6153f5e..a5c7d34 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -909,9 +909,9 @@ namespace OpenSim.Services.GridService private void OutputRegionsToConsoleSummary(List regions) { ConsoleDisplayTable dispTable = new ConsoleDisplayTable(); - dispTable.AddColumn("Name", 44); - dispTable.AddColumn("ID", 36); - dispTable.AddColumn("Position", 11); + dispTable.AddColumn("Name", ConsoleDisplayUtil.RegionNameSize); + dispTable.AddColumn("ID", ConsoleDisplayUtil.UuidSize); + dispTable.AddColumn("Position", ConsoleDisplayUtil.CoordTupleSize); dispTable.AddColumn("Size", 11); dispTable.AddColumn("Flags", 60); -- cgit v1.1 From ce3af94a693aa05e90416649f832f36b62630c69 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 26 Apr 2017 07:19:44 +0100 Subject: mantis 6738: change parsing of the HTTP_CUSTOM_HEADER parameter and ignore entries in excess of 8 on the request --- .../Scripting/HttpRequest/ScriptsHttpRequests.cs | 12 ++++-------- .../ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 13 ++++++++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs index 09891f7..035097f 100644 --- a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs @@ -223,20 +223,16 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest if (parms.Length - i < 2) break; - //Have we reached the end of the list of headers? - //End is marked by a string with a single digit. - //We already know we have at least one parameter - //so it is safe to do this check at top of loop. - if (Char.IsDigit(parms[i][0])) - break; - if (htc.HttpCustomHeaders == null) htc.HttpCustomHeaders = new List(); htc.HttpCustomHeaders.Add(parms[i]); htc.HttpCustomHeaders.Add(parms[i+1]); + int nexti = i + 2; + if (nexti >= parms.Length || Char.IsDigit(parms[nexti][0])) + break; - i += 2; + i = nexti; } break; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 47c3cb8..2000c44 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -13405,6 +13405,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api List param = new List(); bool ok; Int32 flag; + int nCustomHeaders = 0; for (int i = 0; i < parameters.Data.Length; i += 2) { @@ -13431,6 +13432,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api //Second Life documentation for llHTTPRequest. for (int count = 1; count <= 8; ++count) { + if(nCustomHeaders >= 8) + { + Error("llHTTPRequest", "Max number of custom headers is 8, excess ignored"); + break; + } + //Enough parameters remaining for (another) header? if (parameters.Data.Length - i < 2) { @@ -13445,15 +13452,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api param.Add(parameters.Data[i].ToString()); param.Add(parameters.Data[i+1].ToString()); + nCustomHeaders++; //Have we reached the end of the list of headers? //End is marked by a string with a single digit. - if (i+2 >= parameters.Data.Length || - Char.IsDigit(parameters.Data[i].ToString()[0])) + if (i + 2 >= parameters.Data.Length || + Char.IsDigit(parameters.Data[i + 2].ToString()[0])) { break; } - i += 2; } } -- cgit v1.1 From 1b8c71c965c82a79011290c2cfbcbc8eb1e409c4 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 26 Apr 2017 16:15:33 +0100 Subject: give more information on Fatal Error during region startup --- OpenSim/Framework/Servers/BaseOpenSimServer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index f761813..62cd543 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs @@ -163,8 +163,7 @@ namespace OpenSim.Framework.Servers } catch(Exception e) { - m_log.FatalFormat("Fatal error: {0}", - (e.Message == null || e.Message == String.Empty) ? "Unknown reason":e.Message ); + m_log.Fatal("Fatal error: " + e.ToString()); Environment.Exit(1); } -- cgit v1.1 From 8dfab8757ca4d8b8af6213f2d3b3bf1fd1d2f18e Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Wed, 26 Apr 2017 09:58:15 -0700 Subject: Fill out Current Outfit folder with links when creating the initial avatar appearance. Some viewers (e.g. Singularity 1.8.7) get seriously confused when the avatar has no current outfit links. --- .../UserAccountService/UserAccountService.cs | 43 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs index f6b003a..a22754f 100644 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs @@ -640,9 +640,11 @@ namespace OpenSim.Services.UserAccountService m_log.DebugFormat("[USER ACCOUNT SERVICE]: Creating default appearance items for {0}", principalID); InventoryFolderBase bodyPartsFolder = m_InventoryService.GetFolderForType(principalID, FolderType.BodyPart); + // Get Current Outfit folder + InventoryFolderBase currentOutfitFolder = m_InventoryService.GetFolderForType(principalID, FolderType.CurrentOutfit); InventoryItemBase eyes = new InventoryItemBase(UUID.Random(), principalID); - eyes.AssetID = new UUID("4bb6fa4d-1cd2-498a-a84c-95c1a0e745a7"); + eyes.AssetID = AvatarWearable.DEFAULT_EYES_ASSET; eyes.Name = "Default Eyes"; eyes.CreatorId = principalID.ToString(); eyes.AssetType = (int)AssetType.Bodypart; @@ -655,6 +657,7 @@ namespace OpenSim.Services.UserAccountService eyes.NextPermissions = (uint)PermissionMask.All; eyes.Flags = (uint)WearableType.Eyes; m_InventoryService.AddItem(eyes); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Eyes, eyes.Name, eyes.ID, principalID, currentOutfitFolder.ID); InventoryItemBase shape = new InventoryItemBase(UUID.Random(), principalID); shape.AssetID = AvatarWearable.DEFAULT_BODY_ASSET; @@ -670,6 +673,7 @@ namespace OpenSim.Services.UserAccountService shape.NextPermissions = (uint)PermissionMask.All; shape.Flags = (uint)WearableType.Shape; m_InventoryService.AddItem(shape); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Shape, shape.Name, shape.ID, principalID, currentOutfitFolder.ID); InventoryItemBase skin = new InventoryItemBase(UUID.Random(), principalID); skin.AssetID = AvatarWearable.DEFAULT_SKIN_ASSET; @@ -685,6 +689,7 @@ namespace OpenSim.Services.UserAccountService skin.NextPermissions = (uint)PermissionMask.All; skin.Flags = (uint)WearableType.Skin; m_InventoryService.AddItem(skin); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Skin, skin.Name, skin.ID, principalID, currentOutfitFolder.ID); InventoryItemBase hair = new InventoryItemBase(UUID.Random(), principalID); hair.AssetID = AvatarWearable.DEFAULT_HAIR_ASSET; @@ -700,6 +705,7 @@ namespace OpenSim.Services.UserAccountService hair.NextPermissions = (uint)PermissionMask.All; hair.Flags = (uint)WearableType.Hair; m_InventoryService.AddItem(hair); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Hair, hair.Name, hair.ID, principalID, currentOutfitFolder.ID); InventoryFolderBase clothingFolder = m_InventoryService.GetFolderForType(principalID, FolderType.Clothing); @@ -717,6 +723,7 @@ namespace OpenSim.Services.UserAccountService shirt.NextPermissions = (uint)PermissionMask.All; shirt.Flags = (uint)WearableType.Shirt; m_InventoryService.AddItem(shirt); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Shirt, shirt.Name, shirt.ID, principalID, currentOutfitFolder.ID); InventoryItemBase pants = new InventoryItemBase(UUID.Random(), principalID); pants.AssetID = AvatarWearable.DEFAULT_PANTS_ASSET; @@ -732,6 +739,7 @@ namespace OpenSim.Services.UserAccountService pants.NextPermissions = (uint)PermissionMask.All; pants.Flags = (uint)WearableType.Pants; m_InventoryService.AddItem(pants); + CreateCurrentOutfitLink((int)InventoryType.Wearable, (uint)WearableType.Pants, pants.Name, pants.ID, principalID, currentOutfitFolder.ID); if (m_AvatarService != null) { @@ -815,6 +823,8 @@ namespace OpenSim.Services.UserAccountService { // Get Clothing folder of receiver InventoryFolderBase destinationFolder = m_InventoryService.GetFolderForType(destination, FolderType.Clothing); + // Get Current Outfit folder + InventoryFolderBase currentOutfitFolder = m_InventoryService.GetFolderForType(destination, FolderType.CurrentOutfit); if (destinationFolder == null) throw new Exception("Cannot locate folder(s)"); @@ -841,6 +851,7 @@ namespace OpenSim.Services.UserAccountService for (int i = 0; i < wearables.Length; i++) { wearable = wearables[i]; + m_log.DebugFormat("[XXX]: Getting item {0} from avie {1}", wearable[0].ItemID, source); if (wearable[0].ItemID != UUID.Zero) { // Get inventory item and copy it @@ -878,6 +889,9 @@ namespace OpenSim.Services.UserAccountService AvatarWearable newWearable = new AvatarWearable(); newWearable.Wear(destinationItem.ID, wearable[0].AssetID); avatarAppearance.SetWearable(i, newWearable); + + // Add to Current Outfit + CreateCurrentOutfitLink((int)InventoryType.Wearable, item.Flags, item.Name, destinationItem.ID, destination, currentOutfitFolder.ID); } else { @@ -930,6 +944,9 @@ namespace OpenSim.Services.UserAccountService // Attach item avatarAppearance.SetAttachment(attachpoint, destinationItem.ID, destinationItem.AssetID); m_log.DebugFormat("[USER ACCOUNT SERVICE]: Attached {0}", destinationItem.ID); + + // Add to Current Outfit + CreateCurrentOutfitLink(destinationItem.InvType, item.Flags, item.Name, destinationItem.ID, destination, currentOutfitFolder.ID); } else { @@ -939,6 +956,30 @@ namespace OpenSim.Services.UserAccountService } } + protected void CreateCurrentOutfitLink(int invType, uint itemType, string name, UUID itemID, UUID userID, UUID currentOutfitFolderUUID) + { + UUID LinkInvItem = UUID.Random(); + InventoryItemBase itembase = new InventoryItemBase(LinkInvItem, userID) + { + AssetID = itemID, + AssetType = (int)AssetType.Link, + CreatorId = userID.ToString(), + InvType = invType, + Description = "", + //Folder = m_InventoryService.GetFolderForType(userID, FolderType.CurrentOutfit).ID, + Folder = currentOutfitFolderUUID, + Flags = itemType, + Name = name, + BasePermissions = (uint)PermissionMask.Copy, + CurrentPermissions = (uint)PermissionMask.Copy, + EveryOnePermissions = (uint)PermissionMask.Copy, + GroupPermissions = (uint)PermissionMask.Copy, + NextPermissions = (uint)PermissionMask.Copy + }; + + m_InventoryService.AddItem(itembase); + } + /// /// Apply next owner permissions. /// -- cgit v1.1 From ce655056cab400c0d0705861cef03eef541875c5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 26 Apr 2017 18:21:35 +0100 Subject: ubMeshmerizer: fix the orientation of last triangle on top/bottom faces of hollow cylinders plz delete contents of bin/MeshCache to remove defective entries" --- OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs index 10facf2..e93175f 100644 --- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs +++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs @@ -755,8 +755,8 @@ namespace PrimMesher if (hollowAngles.angles[0].angle - angles.angles[i].angle < angles.angles[i].angle - hollowAngles.angles[maxJ].angle + 0.000001f) { newFace.v1 = 0; - newFace.v2 = numTotalVerts - maxJ - 1; - newFace.v3 = numTotalVerts - 1; + newFace.v2 = numTotalVerts - 1; + newFace.v3 = numTotalVerts - maxJ - 1; faces.Add(newFace); } -- cgit v1.1 From 8d3d87e0b2be0fdaf06e1a6309cd1f1249dcf024 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 27 Apr 2017 00:02:01 +0100 Subject: add a usefull taint and update --- .../Framework/Scenes/SceneObjectGroup.Inventory.cs | 94 +++++++++++++++------- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 + 2 files changed, 69 insertions(+), 27 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index 12e53a8..081281e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs @@ -252,18 +252,26 @@ namespace OpenSim.Region.Framework.Scenes } // new test code, to place in better place later - private object PermissionsLock = new object(); + private object m_PermissionsLock = new object(); + private bool m_EffectivePermsInvalid = true; + + public void InvalidateEffectivePerms() + { + lock(m_PermissionsLock) + m_EffectivePermsInvalid = true; + } private uint m_EffectiveEveryOnePerms; public uint EffectiveEveryOnePerms { get { - // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc) - // bc this is on heavy duty code paths - // but for now we need to test the concept -// AggregateDeepPerms(); - return m_EffectiveEveryOnePerms; + lock(m_PermissionsLock) + { + if(m_EffectivePermsInvalid) + AggregatePerms(); + return m_EffectiveEveryOnePerms; + } } } @@ -272,11 +280,12 @@ namespace OpenSim.Region.Framework.Scenes { get { - // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc) - // bc this is on heavy duty code paths - // but for now we need to test the concept -// AggregateDeepPerms(); - return m_EffectiveGroupPerms; + lock(m_PermissionsLock) + { + if(m_EffectivePermsInvalid) + AggregatePerms(); + return m_EffectiveGroupPerms; + } } } @@ -285,11 +294,12 @@ namespace OpenSim.Region.Framework.Scenes { get { - // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc) - // bc this is on heavy duty code paths - // but for now we need to test the concept -// AggregateDeepPerms(); - return m_EffectiveGroupOrEveryOnePerms; + lock(m_PermissionsLock) + { + if(m_EffectivePermsInvalid) + AggregatePerms(); + return m_EffectiveGroupOrEveryOnePerms; + } } } @@ -298,11 +308,12 @@ namespace OpenSim.Region.Framework.Scenes { get { - // this can't be done here but on every place where a change may happen (rez, (de)link, contents , perms, etc) - // bc this is on heavy duty code paths - // but for now we need to test the concept - // AggregateDeepPerms(); - return m_EffectiveOwnerPerms; + lock(m_PermissionsLock) + { + if(m_EffectivePermsInvalid) + AggregatePerms(); + return m_EffectiveOwnerPerms; + } } } @@ -310,7 +321,7 @@ namespace OpenSim.Region.Framework.Scenes // AggregatePerms does same using cached parts content perms public void AggregateDeepPerms() { - lock(PermissionsLock) + lock(m_PermissionsLock) { // aux const uint allmask = (uint)PermissionMask.AllEffective; @@ -370,6 +381,7 @@ namespace OpenSim.Region.Framework.Scenes m_EffectiveEveryOnePerms = everyone & owner; m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner; + m_EffectivePermsInvalid = false; } } @@ -377,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes // ie is AggregateDeepPerms without the part.AggregateInnerPerms() call on parts loop public void AggregatePerms() { - lock(PermissionsLock) + lock(m_PermissionsLock) { // aux const uint allmask = (uint)PermissionMask.AllEffective; @@ -394,6 +406,8 @@ namespace OpenSim.Region.Framework.Scenes uint rootEveryonePerms = RootPart.EveryoneMask; uint everyone = rootEveryonePerms; + bool needUpdate = false; + SceneObjectPart[] parts = m_parts.GetArray(); for (int i = 0; i < parts.Length; i++) { @@ -409,7 +423,12 @@ namespace OpenSim.Region.Framework.Scenes owner |= (uint)PermissionMask.Transfer; owner &= basePerms; - m_EffectiveOwnerPerms = owner; + if(owner != m_EffectiveOwnerPerms) + { + needUpdate = true; + m_EffectiveOwnerPerms = owner; + } + uint ownertransfermask = owner & (uint)PermissionMask.Transfer; // recover modify and move @@ -421,7 +440,12 @@ namespace OpenSim.Region.Framework.Scenes group |= ownertransfermask; uint groupOrEveryone = group; - m_EffectiveGroupPerms = group & owner; + uint tmpPerms = group & owner; + if(tmpPerms != m_EffectiveGroupPerms) + { + needUpdate = true; + m_EffectiveGroupPerms = tmpPerms; + } // recover move rootEveryonePerms &= (uint)PermissionMask.Move; @@ -434,8 +458,24 @@ namespace OpenSim.Region.Framework.Scenes groupOrEveryone |= everyone; - m_EffectiveEveryOnePerms = everyone & owner; - m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner; + tmpPerms = everyone & owner; + if(tmpPerms != m_EffectiveEveryOnePerms) + { + needUpdate = true; + m_EffectiveEveryOnePerms = tmpPerms; + } + + tmpPerms = groupOrEveryone & owner; + if(tmpPerms != m_EffectiveGroupOrEveryOnePerms) + { + needUpdate = true; + m_EffectiveGroupOrEveryOnePerms = tmpPerms; + } + + m_EffectivePermsInvalid = false; + + if(needUpdate) + RootPart.ScheduleFullUpdate(); } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 19bf53f..e4f18d9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -2579,6 +2579,8 @@ namespace OpenSim.Region.Framework.Scenes AggregatedInnerOwnerPerms = owner & mask; AggregatedInnerGroupPerms = group & mask; AggregatedInnerEveryonePerms = everyone & mask; + if(ParentGroup != null) + ParentGroup.InvalidateEffectivePerms(); } } -- cgit v1.1 From ba4e13ef55c378db13b6aa97316e99d651762a02 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 28 Apr 2017 20:03:44 +0100 Subject: a few changes to permissions folding... we are testing. at this point only use master for TESTING also --- OpenSim/Framework/Util.cs | 5 ++- .../InventoryAccess/InventoryAccessModule.cs | 35 +++++++++------- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 13 ++++-- .../Framework/Scenes/SceneObjectGroup.Inventory.cs | 25 +++--------- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 +- .../Framework/Scenes/SceneObjectPartInventory.cs | 46 +++++++++++++--------- 6 files changed, 69 insertions(+), 59 deletions(-) diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 0ec24e6..4d025a9 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -79,7 +79,9 @@ namespace OpenSim.Framework FoldedMask = 0x0f, - // + FoldingShift = 13 , // number of bit shifts from normal perm to folded or back (same as Transfer shift below) + // when doing as a block + Transfer = 1 << 13, // 0x02000 Modify = 1 << 14, // 0x04000 Copy = 1 << 15, // 0x08000 @@ -91,6 +93,7 @@ namespace OpenSim.Framework All = 0x8e000, AllAndExport = 0x9e000, AllEffective = 0x9e000 + } /// diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 67c847b..eb7211c 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -574,8 +574,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess IClientAPI remoteClient) { uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7; - uint allObjectsNextOwnerPerms = 0x7fffffff; - + // For the porposes of inventory, an object is modify if the prims // are modify. This allows renaming an object that contains no // mod items. @@ -591,21 +590,27 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions()) { - uint perms = effectivePerms; - uint nextPerms = (perms & 7) << 13; - if ((nextPerms & (uint)PermissionMask.Copy) == 0) - perms &= ~(uint)PermissionMask.Copy; - if ((nextPerms & (uint)PermissionMask.Transfer) == 0) - perms &= ~(uint)PermissionMask.Transfer; - if ((nextPerms & (uint)PermissionMask.Modify) == 0) - perms &= ~(uint)PermissionMask.Modify; + if ((effectivePerms & (uint)PermissionMask.FoldedCopy) == 0) + effectivePerms &= ~(uint)PermissionMask.Copy; + if ((effectivePerms & (uint)PermissionMask.FoldedTransfer) == 0) + effectivePerms &= ~(uint)PermissionMask.Transfer; + if ((effectivePerms & (uint)PermissionMask.FoldedExport) == 0) + effectivePerms &= ~(uint)PermissionMask.Export; -// item.BasePermissions = perms & so.RootPart.NextOwnerMask; + uint basePerms = effectivePerms & so.RootPart.NextOwnerMask; - uint nextp = so.RootPart.NextOwnerMask | (uint)PermissionMask.FoldedMask; - item.BasePermissions = perms & nextp; + if((basePerms & (uint)PermissionMask.Copy) == 0) + basePerms |= (uint)PermissionMask.Transfer; + + // unlock + basePerms |= (uint)PermissionMask.Move; + + basePerms &= ~(uint)PermissionMask.FoldedMask; + basePerms |= ((basePerms >> (int)PermissionMask.FoldingShift) & (uint)PermissionMask.FoldedMask); + + item.BasePermissions = basePerms; item.CurrentPermissions = item.BasePermissions; - item.NextPermissions = perms & so.RootPart.NextOwnerMask; + item.NextPermissions = effectivePerms & so.RootPart.NextOwnerMask; item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask; item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask; @@ -626,7 +631,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess (uint)PermissionMask.Modify | (uint)PermissionMask.Move | (uint)PermissionMask.Export | - 7); // Preserve folded permissions + (uint)PermissionMask.FoldedMask); // Preserve folded permissions ?? } return item; diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 2f016fa..edf8cb6 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -682,19 +682,19 @@ namespace OpenSim.Region.Framework.Scenes // These will be applied to the root prim at next rez. // The legacy slam bit (bit 3) and folded permission (bits 0-2) // are preserved due to the above mangling - ownerPerms &= nextPerms; +// ownerPerms &= nextPerms; // Mask the base permissions. This is a conservative // approach altering only the three main perms - basePerms &= nextPerms; +// basePerms &= nextPerms; // Mask out the folded portion of the base mask. // While the owner mask carries the actual folded // permissions, the base mask carries the original // base mask, before masking with the folded perms. // We need this later for rezzing. - basePerms &= ~(uint)PermissionMask.FoldedMask; - basePerms |= ((basePerms >> 13) & 7) | (((basePerms & (uint)PermissionMask.Export) != 0) ? (uint)PermissionMask.FoldedExport : 0); +// basePerms &= ~(uint)PermissionMask.FoldedMask; +// basePerms |= ((basePerms >> 13) & 7) | (((basePerms & (uint)PermissionMask.Export) != 0) ? (uint)PermissionMask.FoldedExport : 0); // If this is an object, root prim perms may be more // permissive than folded perms. Use folded perms as @@ -729,6 +729,11 @@ namespace OpenSim.Region.Framework.Scenes } } + // move here so nextperms are mandatory + ownerPerms &= nextPerms; + basePerms &= nextPerms; + basePerms &= ~(uint)PermissionMask.FoldedMask; + basePerms |= ((basePerms >> 13) & 7) | (((basePerms & (uint)PermissionMask.Export) != 0) ? (uint)PermissionMask.FoldedExport : 0); // Assign to the actual item. Make sure the slam bit is // set, if it wasn't set before. itemCopy.BasePermissions = basePerms; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index 081281e..42f47b5 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs @@ -326,7 +326,7 @@ namespace OpenSim.Region.Framework.Scenes // aux const uint allmask = (uint)PermissionMask.AllEffective; const uint movemodmask = (uint)(PermissionMask.Move | PermissionMask.Modify); - const uint copytransfermast = (uint)(PermissionMask.Copy | PermissionMask.Transfer); + const uint copytransfermask = (uint)(PermissionMask.Copy | PermissionMask.Transfer); uint basePerms = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move; bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0; @@ -350,7 +350,7 @@ namespace OpenSim.Region.Framework.Scenes // recover modify and move rootOwnerPerms &= movemodmask; owner |= rootOwnerPerms; - if((owner & copytransfermast) == 0) + if((owner & copytransfermask) == 0) owner |= (uint)PermissionMask.Transfer; owner &= basePerms; @@ -479,17 +479,13 @@ namespace OpenSim.Region.Framework.Scenes } } - public uint GetEffectivePermissions() - { - return GetEffectivePermissions(false); - } - public uint GetEffectivePermissions(bool useBase) { uint perms=(uint)(PermissionMask.Modify | PermissionMask.Copy | PermissionMask.Move | - PermissionMask.Transfer) | 7; + PermissionMask.Transfer | + PermissionMask.FoldedMask); uint ownerMask = 0x7fffffff; @@ -512,17 +508,8 @@ namespace OpenSim.Region.Framework.Scenes perms &= ~(uint)PermissionMask.Copy; if ((ownerMask & (uint)PermissionMask.Transfer) == 0) perms &= ~(uint)PermissionMask.Transfer; - - // If root prim permissions are applied here, this would screw - // with in-inventory manipulation of the next owner perms - // in a major way. So, let's move this to the give itself. - // Yes. I know. Evil. -// if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) -// perms &= ~((uint)PermissionMask.Modify >> 13); -// if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) -// perms &= ~((uint)PermissionMask.Copy >> 13); -// if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) -// perms &= ~((uint)PermissionMask.Transfer >> 13); + if ((ownerMask & (uint)PermissionMask.Export) == 0) + perms &= ~(uint)PermissionMask.Export; return perms; } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index e4f18d9..f948336 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -5288,9 +5288,9 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter // Export needs to be preserved in the base and everyone // mask, but removed in the owner mask as a next owner // can never change the export status - BaseMask &= NextOwnerMask | (uint)PermissionMask.Export; + BaseMask &= (NextOwnerMask | (uint)PermissionMask.Export); OwnerMask &= NextOwnerMask; - EveryoneMask &= NextOwnerMask | (uint)PermissionMask.Export; + EveryoneMask &= (NextOwnerMask | (uint)PermissionMask.Export); GroupMask = 0; // Giving an object zaps group permissions Inventory.ApplyNextOwnerPermissions(); diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index b53c355..894078d 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -1340,33 +1340,38 @@ namespace OpenSim.Region.Framework.Scenes public uint MaskEffectivePermissions() { + // used to propagate permissions restrictions outwards + // Modify does not propagate outwards. uint mask=0x7fffffff; - + foreach (TaskInventoryItem item in m_items.Values) { if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Copy) == 0) - mask &= ~((uint)PermissionMask.Copy >> 13); + mask &= ~((uint)PermissionMask.FoldedCopy); if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Transfer) == 0) - mask &= ~((uint)PermissionMask.Transfer >> 13); - if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Modify) == 0) - mask &= ~((uint)PermissionMask.Modify >> 13); + mask &= ~((uint)PermissionMask.FoldedTransfer); + if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Export) == 0) + mask &= ~((uint)PermissionMask.FoldedExport); + // this breaks some SL legal use cases + // there should be no folding from task inventory +/* if (item.InvType == (int)InventoryType.Object) { - if ((item.CurrentPermissions & ((uint)PermissionMask.Copy >> 13)) == 0) - mask &= ~((uint)PermissionMask.Copy >> 13); - if ((item.CurrentPermissions & ((uint)PermissionMask.Transfer >> 13)) == 0) - mask &= ~((uint)PermissionMask.Transfer >> 13); - if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0) - mask &= ~((uint)PermissionMask.Modify >> 13); + if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedCopy)) == 0) + mask &= ~((uint)PermissionMask.FoldedCopy); + if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedTransfer)) == 0) + mask &= ~((uint)PermissionMask.FoldedTransfer); + if ((item.CurrentPermissions & (uint)PermissionMask.FoldedExport) == 0) + mask &= ~((uint)PermissionMask.FoldedExport); } - +*/ if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) mask &= ~(uint)PermissionMask.Copy; if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) mask &= ~(uint)PermissionMask.Transfer; - if ((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0) - mask &= ~(uint)PermissionMask.Modify; + if ((item.CurrentPermissions & (uint)PermissionMask.Export) == 0) + mask &= ~((uint)PermissionMask.Export); } return mask; } @@ -1375,19 +1380,24 @@ namespace OpenSim.Region.Framework.Scenes { foreach (TaskInventoryItem item in m_items.Values) { - if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0) + + // this breaks legal SL use cases + // there should be no unfold into task inventory +/* + if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & (uint)PermissionMask.FoldedMask) != 0) { // m_log.DebugFormat ( // "[SCENE OBJECT PART INVENTORY]: Applying next permissions {0} to {1} in {2} with current {3}, base {4}, everyone {5}", // item.NextPermissions, item.Name, m_part.Name, item.CurrentPermissions, item.BasePermissions, item.EveryonePermissions); - if ((item.CurrentPermissions & ((uint)PermissionMask.Copy >> 13)) == 0) + if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedCopy)) == 0) item.CurrentPermissions &= ~(uint)PermissionMask.Copy; - if ((item.CurrentPermissions & ((uint)PermissionMask.Transfer >> 13)) == 0) + if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedTransfer)) == 0) item.CurrentPermissions &= ~(uint)PermissionMask.Transfer; - if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0) + if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedModify)) == 0) item.CurrentPermissions &= ~(uint)PermissionMask.Modify; } +*/ item.CurrentPermissions &= item.NextPermissions; item.BasePermissions &= item.NextPermissions; item.EveryonePermissions &= item.NextPermissions; -- cgit v1.1 From 00091f1fb9dbe8926e467a844d2035fc83a00c80 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 28 Apr 2017 20:13:53 +0100 Subject: forgot a change... --- .../CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index eb7211c..d916cc2 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -581,8 +581,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess foreach (SceneObjectGroup grp in objsForEffectivePermissions) { uint groupPerms = grp.GetEffectivePermissions(true); - if ((grp.RootPart.BaseMask & (uint)PermissionMask.Modify) != 0) - groupPerms |= (uint)PermissionMask.Modify; +// if ((grp.RootPart.BaseMask & (uint)PermissionMask.Modify) != 0) +// groupPerms |= (uint)PermissionMask.Modify; effectivePerms &= groupPerms; } -- cgit v1.1 From 019b34ea390998f4d51c0cc6d05f79b37aa558eb Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 28 Apr 2017 23:05:14 +0100 Subject: BuySell: bug fix, use all object permitions for sold item, and not the operation rights one --- .../World/Objects/BuySell/BuySellModule.cs | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 90d65c7..f90285d 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -205,15 +205,20 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell item.AssetType = asset.Type; item.InvType = (int)InventoryType.Object; item.Folder = categoryID; - - uint nextPerms=(perms & 7) << 13; - if ((nextPerms & (uint)PermissionMask.Copy) == 0) - perms &= ~(uint)PermissionMask.Copy; - if ((nextPerms & (uint)PermissionMask.Transfer) == 0) - perms &= ~(uint)PermissionMask.Transfer; - if ((nextPerms & (uint)PermissionMask.Modify) == 0) - perms &= ~(uint)PermissionMask.Modify; - + + perms = group.GetEffectivePermissions(false); + +// if((perms & (uint)PermissionMask.FoldedMask) != 0) + { + if ((perms & (uint)PermissionMask.FoldedCopy) == 0) + perms &= ~(uint)PermissionMask.Copy; + if ((perms & (uint)PermissionMask.FoldedTransfer) == 0) + perms &= ~(uint)PermissionMask.Transfer; + if ((perms & (uint)PermissionMask.FoldedModify) == 0) + perms &= ~(uint)PermissionMask.Modify; + if ((perms & (uint)PermissionMask.FoldedExport) == 0) + perms &= ~(uint)PermissionMask.Export; + } item.BasePermissions = perms & part.NextOwnerMask; item.CurrentPermissions = perms & part.NextOwnerMask; item.NextPermissions = part.NextOwnerMask; -- cgit v1.1 From 74f0ffbda6bf59d246d4fcc98fa2fa5fc3a06f5c Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 02:45:26 +0100 Subject: fix chain of contents sells --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index edf8cb6..668766b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1273,11 +1273,16 @@ namespace OpenSim.Region.Framework.Scenes { agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); if (taskItem.InvType == (int)InventoryType.Object) - agentItem.CurrentPermissions = agentItem.BasePermissions & (((taskItem.CurrentPermissions & 7) << 13) | (taskItem.CurrentPermissions & (uint)PermissionMask.Move)); + { + if((taskItem.CurrentPermissions & (uint)PermissionMask.FoldedMask) != 0) + agentItem.BasePermissions &= + (((taskItem.CurrentPermissions & (uint)PermissionMask.FoldedMask ) << (int)PermissionMask.FoldingShift) | + (taskItem.CurrentPermissions & (uint)PermissionMask.Move)); + } else - agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions; + agentItem.BasePermissions &= taskItem.CurrentPermissions; - agentItem.BasePermissions = agentItem.CurrentPermissions; + agentItem.CurrentPermissions = agentItem.BasePermissions; agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); -- cgit v1.1 From 725ccbb4774043be83fbaa26f3657acfa5313ebe Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 16:58:43 +0100 Subject: add check for valid folded perms --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 668766b..a6f6aa3 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -699,13 +699,9 @@ namespace OpenSim.Region.Framework.Scenes // If this is an object, root prim perms may be more // permissive than folded perms. Use folded perms as // a mask - if (item.InvType == (int)InventoryType.Object) + uint foldedPerms = (item.CurrentPermissions & (uint)PermissionMask.FoldedMask) << (int)PermissionMask.FoldingShift; + if (foldedPerms != 0 && item.InvType == (int)InventoryType.Object) { - // Create a safe mask for the current perms - uint foldedPerms = (item.CurrentPermissions & 7) << 13; - if ((item.CurrentPermissions & (uint)PermissionMask.FoldedExport) != 0) - foldedPerms |= (uint)PermissionMask.Export; - foldedPerms |= permsMask; bool isRootMod = (item.CurrentPermissions & -- cgit v1.1 From 04117d9f75ca278a921be9ce09c8c859f81cd428 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 19:07:04 +0100 Subject: recover PermissionsUtil.ApplyFoldedPermissions (well my version). its use easys code readability --- .../RemoteController/RemoteAdminPlugin.cs | 12 ++++---- OpenSim/Framework/PermissionsUtil.cs | 32 ++++++++++++++++++++++ OpenSim/Framework/Util.cs | 4 +-- .../InventoryAccess/InventoryAccessModule.cs | 17 +++++------- .../World/Objects/BuySell/BuySellModule.cs | 18 ++++-------- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 12 ++++---- 6 files changed, 59 insertions(+), 36 deletions(-) diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 1ee2468..510905f 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -3087,15 +3087,13 @@ namespace OpenSim.ApplicationPlugins.RemoteController /// private void ApplyNextOwnerPermissions(InventoryItemBase item) { - if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0) + if (item.InvType == (int)InventoryType.Object) { - 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; + uint perms = item.CurrentPermissions; + PermissionsUtil.ApplyFoldedPermissions(item.CurrentPermissions, ref perms); + item.CurrentPermissions = perms; } + item.CurrentPermissions &= item.NextPermissions; item.BasePermissions &= item.NextPermissions; item.EveryOnePermissions &= item.NextPermissions; diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs index 3dce04d..a7f933c 100644 --- a/OpenSim/Framework/PermissionsUtil.cs +++ b/OpenSim/Framework/PermissionsUtil.cs @@ -64,5 +64,37 @@ namespace OpenSim.Framework str = "."; return str; } + + public static void ApplyFoldedPermissions(uint source, ref uint target) + { + uint folded = source & (uint)PermissionMask.FoldedMask; + if(folded == 0) // invalid we need to ignore + return; + + folded <<= (int)PermissionMask.FoldingShift; + folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well + folded |= ~(uint)PermissionMask.UnfoldedMask; + + uint tmp = target; + tmp &= folded; + target = tmp; + } + + // do not touch MOD + public static void ApplyNoModFoldedPermissions(uint source, ref uint target) + { + uint folded = source & (uint)PermissionMask.FoldedMask; + if(folded == 0) // invalid we need to ignore + return; + + folded <<= (int)PermissionMask.FoldingShift; + folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well + folded |= (~(uint)PermissionMask.UnfoldedMask | (uint)PermissionMask.Modify); + + uint tmp = target; + tmp &= folded; + target = tmp; + } + } } diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 4d025a9..f6ded04 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -92,8 +92,8 @@ namespace OpenSim.Framework // explicitly given All = 0x8e000, AllAndExport = 0x9e000, - AllEffective = 0x9e000 - + AllEffective = 0x9e000, + UnfoldedMask = 0x1e000 } /// diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index d916cc2..bce0610 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -573,7 +573,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess InventoryItemBase item, SceneObjectGroup so, List objsForEffectivePermissions, IClientAPI remoteClient) { - uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7; + uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export | PermissionMask.FoldedMask); // For the porposes of inventory, an object is modify if the prims // are modify. This allows renaming an object that contains no @@ -586,19 +586,16 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess effectivePerms &= groupPerms; } - effectivePerms |= (uint)PermissionMask.Move; - + if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions()) { - if ((effectivePerms & (uint)PermissionMask.FoldedCopy) == 0) - effectivePerms &= ~(uint)PermissionMask.Copy; - if ((effectivePerms & (uint)PermissionMask.FoldedTransfer) == 0) - effectivePerms &= ~(uint)PermissionMask.Transfer; - if ((effectivePerms & (uint)PermissionMask.FoldedExport) == 0) - effectivePerms &= ~(uint)PermissionMask.Export; - + PermissionsUtil.ApplyNoModFoldedPermissions(effectivePerms, ref effectivePerms); + uint basePerms = effectivePerms & so.RootPart.NextOwnerMask; + // rebuild folded perms since we don't have then on inworld objects + // possible existent ones where already unfolded + if((basePerms & (uint)PermissionMask.Copy) == 0) basePerms |= (uint)PermissionMask.Transfer; diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index f90285d..84f33d1 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -208,19 +208,13 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell perms = group.GetEffectivePermissions(false); -// if((perms & (uint)PermissionMask.FoldedMask) != 0) - { - if ((perms & (uint)PermissionMask.FoldedCopy) == 0) - perms &= ~(uint)PermissionMask.Copy; - if ((perms & (uint)PermissionMask.FoldedTransfer) == 0) - perms &= ~(uint)PermissionMask.Transfer; - if ((perms & (uint)PermissionMask.FoldedModify) == 0) - perms &= ~(uint)PermissionMask.Modify; - if ((perms & (uint)PermissionMask.FoldedExport) == 0) - perms &= ~(uint)PermissionMask.Export; - } + PermissionsUtil.ApplyFoldedPermissions(perms, ref perms); + item.BasePermissions = perms & part.NextOwnerMask; - item.CurrentPermissions = perms & part.NextOwnerMask; + +// we need to rebuild folded here + + item.CurrentPermissions = item.BasePermissions; item.NextPermissions = part.NextOwnerMask; item.EveryOnePermissions = part.EveryoneMask & part.NextOwnerMask; diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a6f6aa3..5e19a8a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1267,17 +1267,19 @@ namespace OpenSim.Region.Framework.Scenes // TODO: Fix this after the inventory fixer exists and has beenr run if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) { - agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); + agentItem.BasePermissions = taskItem.BasePermissions & taskItem.NextPermissions; if (taskItem.InvType == (int)InventoryType.Object) { - if((taskItem.CurrentPermissions & (uint)PermissionMask.FoldedMask) != 0) - agentItem.BasePermissions &= - (((taskItem.CurrentPermissions & (uint)PermissionMask.FoldedMask ) << (int)PermissionMask.FoldingShift) | - (taskItem.CurrentPermissions & (uint)PermissionMask.Move)); + uint perms = agentItem.BasePermissions; + PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms ); + agentItem.BasePermissions = perms; } else agentItem.BasePermissions &= taskItem.CurrentPermissions; + // always unlock + agentItem.BasePermissions |= (uint)PermissionMask.Move; + agentItem.CurrentPermissions = agentItem.BasePermissions; agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; -- cgit v1.1 From 522695c821c9f68d6c13533220de428f0d036dd7 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 22:09:45 +0100 Subject: update folded permitions if taking from world, or after unfold --- OpenSim/Framework/PermissionsUtil.cs | 28 +++++++++++++++++----- .../InventoryAccess/InventoryAccessModule.cs | 15 ++---------- .../World/Objects/BuySell/BuySellModule.cs | 4 ++-- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 6 +++-- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs index a7f933c..39ccaba 100644 --- a/OpenSim/Framework/PermissionsUtil.cs +++ b/OpenSim/Framework/PermissionsUtil.cs @@ -65,9 +65,9 @@ namespace OpenSim.Framework return str; } - public static void ApplyFoldedPermissions(uint source, ref uint target) + public static void ApplyFoldedPermissions(uint foldedSourcePerms, ref uint targetPerms) { - uint folded = source & (uint)PermissionMask.FoldedMask; + uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask; if(folded == 0) // invalid we need to ignore return; @@ -75,15 +75,15 @@ namespace OpenSim.Framework folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well folded |= ~(uint)PermissionMask.UnfoldedMask; - uint tmp = target; + uint tmp = targetPerms; tmp &= folded; - target = tmp; + targetPerms = tmp; } // do not touch MOD - public static void ApplyNoModFoldedPermissions(uint source, ref uint target) + public static void ApplyNoModFoldedPermissions(uint foldedSourcePerms, ref uint target) { - uint folded = source & (uint)PermissionMask.FoldedMask; + uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask; if(folded == 0) // invalid we need to ignore return; @@ -96,5 +96,21 @@ namespace OpenSim.Framework target = tmp; } + public static uint FixAndFoldPermissions(uint perms) + { + uint tmp = perms; + + // C & T rule + if((tmp & (uint)(PermissionMask.Copy | PermissionMask.Transfer)) == 0) + tmp |= (uint)PermissionMask.Transfer; + + // unlock + tmp |= (uint)PermissionMask.Move; + + tmp &= ~(uint)PermissionMask.FoldedMask; + tmp |= ((tmp >> (int)PermissionMask.FoldingShift) & (uint)PermissionMask.FoldedMask); + + return tmp; + } } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index bce0610..d4f9c16 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -594,16 +594,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess uint basePerms = effectivePerms & so.RootPart.NextOwnerMask; // rebuild folded perms since we don't have then on inworld objects - // possible existent ones where already unfolded - - if((basePerms & (uint)PermissionMask.Copy) == 0) - basePerms |= (uint)PermissionMask.Transfer; - - // unlock - basePerms |= (uint)PermissionMask.Move; - - basePerms &= ~(uint)PermissionMask.FoldedMask; - basePerms |= ((basePerms >> (int)PermissionMask.FoldingShift) & (uint)PermissionMask.FoldedMask); + basePerms = PermissionsUtil.FixAndFoldPermissions(basePerms); item.BasePermissions = basePerms; item.CurrentPermissions = item.BasePermissions; @@ -1146,9 +1137,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if ((item.BasePermissions & (uint)PermissionMask.FoldedMask) != 0) { // We have permissions stored there so use them - part.NextOwnerMask = ((item.BasePermissions & 7) << 13); - if ((item.BasePermissions & (uint)PermissionMask.FoldedExport) != 0) - part.NextOwnerMask |= (uint)PermissionMask.Export; + part.NextOwnerMask = ((item.BasePermissions & (uint)PermissionMask.FoldedMask) << (int)PermissionMask.FoldingShift); part.NextOwnerMask |= (uint)PermissionMask.Move; } else diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 84f33d1..af53aa3 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -210,9 +210,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell PermissionsUtil.ApplyFoldedPermissions(perms, ref perms); - item.BasePermissions = perms & part.NextOwnerMask; + perms &= part.NextOwnerMask; -// we need to rebuild folded here + item.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms); item.CurrentPermissions = item.BasePermissions; item.NextPermissions = part.NextOwnerMask; diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 5e19a8a..0549571 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1272,14 +1272,16 @@ namespace OpenSim.Region.Framework.Scenes { uint perms = agentItem.BasePermissions; PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms ); - agentItem.BasePermissions = perms; +// perms |= (uint)PermissionMask.Move; +// agentItem.BasePermissions = perms; + agentItem.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms); } else agentItem.BasePermissions &= taskItem.CurrentPermissions; // always unlock agentItem.BasePermissions |= (uint)PermissionMask.Move; - + agentItem.CurrentPermissions = agentItem.BasePermissions; agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; -- cgit v1.1 From fedd1a93d28c86459e66a05f8ce189498b7ab354 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 23:09:32 +0100 Subject: buysell: fix permissions masks hierachy --- .../CoreModules/World/Objects/BuySell/BuySellModule.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index af53aa3..ca392b8 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -208,18 +208,20 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell perms = group.GetEffectivePermissions(false); - PermissionsUtil.ApplyFoldedPermissions(perms, ref perms); + PermissionsUtil.ApplyNoModFoldedPermissions(perms, ref perms); perms &= part.NextOwnerMask; - item.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms); + perms = PermissionsUtil.FixAndFoldPermissions(perms); - item.CurrentPermissions = item.BasePermissions; - item.NextPermissions = part.NextOwnerMask; - item.EveryOnePermissions = part.EveryoneMask & - part.NextOwnerMask; - item.GroupPermissions = part.GroupMask & - part.NextOwnerMask; + item.BasePermissions = perms; + item.CurrentPermissions = perms; + + perms &= part.NextOwnerMask; + item.NextPermissions = perms; + + item.EveryOnePermissions = part.EveryoneMask & perms; + item.GroupPermissions = part.GroupMask & perms; item.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; item.CreationDate = Util.UnixTimeSinceEpoch(); -- cgit v1.1 From d8341588b3b7d855c381831ddf6ca5656a6be9c3 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Apr 2017 23:59:56 +0100 Subject: nore permissions masks hierachy --- .../InventoryAccess/InventoryAccessModule.cs | 8 +++---- .../World/Objects/BuySell/BuySellModule.cs | 6 ++--- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 26 ++++++++++------------ 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index d4f9c16..a32d7dc 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -597,10 +597,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess basePerms = PermissionsUtil.FixAndFoldPermissions(basePerms); item.BasePermissions = basePerms; - item.CurrentPermissions = item.BasePermissions; - item.NextPermissions = effectivePerms & so.RootPart.NextOwnerMask; - item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask; - item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask; + item.CurrentPermissions = basePerms; + item.NextPermissions = basePerms & so.RootPart.NextOwnerMask; + item.EveryOnePermissions = basePerms & so.RootPart.EveryoneMask; + item.GroupPermissions = basePerms & so.RootPart.GroupMask; // apply next owner perms on rez item.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index ca392b8..6854b53 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -216,12 +216,10 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell item.BasePermissions = perms; item.CurrentPermissions = perms; - - perms &= part.NextOwnerMask; - item.NextPermissions = perms; - + item.NextPermissions = part.NextOwnerMask & perms; item.EveryOnePermissions = part.EveryoneMask & perms; item.GroupPermissions = part.GroupMask & perms; + item.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; item.CreationDate = Util.UnixTimeSinceEpoch(); diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 0549571..a2cee81 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1267,29 +1267,27 @@ namespace OpenSim.Region.Framework.Scenes // TODO: Fix this after the inventory fixer exists and has beenr run if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) { - agentItem.BasePermissions = taskItem.BasePermissions & taskItem.NextPermissions; + uint perms = taskItem.BasePermissions & taskItem.NextPermissions; if (taskItem.InvType == (int)InventoryType.Object) { - uint perms = agentItem.BasePermissions; - PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms ); -// perms |= (uint)PermissionMask.Move; -// agentItem.BasePermissions = perms; - agentItem.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms); + PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms ); + perms = PermissionsUtil.FixAndFoldPermissions(perms); } else - agentItem.BasePermissions &= taskItem.CurrentPermissions; + perms &= taskItem.CurrentPermissions; // always unlock - agentItem.BasePermissions |= (uint)PermissionMask.Move; + perms |= (uint)PermissionMask.Move; - agentItem.CurrentPermissions = agentItem.BasePermissions; - - agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; - agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); - agentItem.NextPermissions = taskItem.NextPermissions; - agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); + agentItem.BasePermissions = perms; + agentItem.CurrentPermissions = perms; + agentItem.NextPermissions = perms & taskItem.NextPermissions; + agentItem.EveryOnePermissions = perms & taskItem.EveryonePermissions; // Group permissions make no sense here agentItem.GroupPermissions = 0; + + agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; + agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); } else { -- cgit v1.1 From 116d32d947e3c1446ce98dca0be62ea74055216d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 00:14:45 +0100 Subject: don't break groups permission mask --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a2cee81..afdd99e 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1283,8 +1283,7 @@ namespace OpenSim.Region.Framework.Scenes agentItem.CurrentPermissions = perms; agentItem.NextPermissions = perms & taskItem.NextPermissions; agentItem.EveryOnePermissions = perms & taskItem.EveryonePermissions; - // Group permissions make no sense here - agentItem.GroupPermissions = 0; + agentItem.GroupPermissions = perms & taskItem.GroupPermissions; agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); @@ -1295,7 +1294,7 @@ namespace OpenSim.Region.Framework.Scenes agentItem.CurrentPermissions = taskItem.CurrentPermissions; agentItem.NextPermissions = taskItem.NextPermissions; agentItem.EveryOnePermissions = taskItem.EveryonePermissions; - agentItem.GroupPermissions = 0; + agentItem.GroupPermissions = taskItem.GroupPermissions; } message = null; -- cgit v1.1 From 514249e80ec527c79157bce80f39b8adb1b344c1 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 12:43:09 +0100 Subject: fix new landmarks default permissions --- .../Framework/InventoryAccess/InventoryAccessModule.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index a32d7dc..916ddb0 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -212,6 +212,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out presence)) { byte[] data = null; + uint everyonemask = 0; + uint groupmask = 0; if (invType == (sbyte)InventoryType.Landmark && presence != null) { @@ -220,6 +222,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess data = Encoding.ASCII.GetBytes(strdata); name = prefix + name; description += suffix; + groupmask = (uint)PermissionMask.AllAndExport; + everyonemask = (uint)(PermissionMask.AllAndExport & ~PermissionMask.Modify); } AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); @@ -227,9 +231,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess m_Scene.CreateNewInventoryItem( remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, name, description, 0, callbackID, asset.FullID, asset.Type, invType, - (uint)PermissionMask.All | (uint)PermissionMask.Export, // Base - (uint)PermissionMask.All | (uint)PermissionMask.Export, // Current - 0, nextOwnerMask, 0, creationDate, false); // Data from viewer + (uint)PermissionMask.AllAndExport, // Base + (uint)PermissionMask.AllAndExport, // Current + everyonemask, + nextOwnerMask, groupmask, creationDate, false); // Data from viewer } else { -- cgit v1.1 From 10922c2a1a129050e9b29fe1193d48edc1822fe9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 12:51:12 +0100 Subject: exclude lms from permissions checks. They are full rights, and broken on all dbs --- .../Framework/Scenes/SceneObjectPartInventory.cs | 36 +++------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 894078d..946ed09 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -1332,6 +1332,8 @@ namespace OpenSim.Region.Framework.Scenes { foreach (TaskInventoryItem item in m_items.Values) { + if(item.InvType == (sbyte)InventoryType.Landmark) + continue; owner &= item.CurrentPermissions; group &= item.GroupPermissions; everyone &= item.EveryonePermissions; @@ -1346,6 +1348,9 @@ namespace OpenSim.Region.Framework.Scenes foreach (TaskInventoryItem item in m_items.Values) { + if(item.InvType == (sbyte)InventoryType.Landmark) + continue; + if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Copy) == 0) mask &= ~((uint)PermissionMask.FoldedCopy); if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Transfer) == 0) @@ -1353,19 +1358,6 @@ namespace OpenSim.Region.Framework.Scenes if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Export) == 0) mask &= ~((uint)PermissionMask.FoldedExport); - // this breaks some SL legal use cases - // there should be no folding from task inventory -/* - if (item.InvType == (int)InventoryType.Object) - { - if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedCopy)) == 0) - mask &= ~((uint)PermissionMask.FoldedCopy); - if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedTransfer)) == 0) - mask &= ~((uint)PermissionMask.FoldedTransfer); - if ((item.CurrentPermissions & (uint)PermissionMask.FoldedExport) == 0) - mask &= ~((uint)PermissionMask.FoldedExport); - } -*/ if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) mask &= ~(uint)PermissionMask.Copy; if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) @@ -1380,24 +1372,6 @@ namespace OpenSim.Region.Framework.Scenes { foreach (TaskInventoryItem item in m_items.Values) { - - // this breaks legal SL use cases - // there should be no unfold into task inventory -/* - if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & (uint)PermissionMask.FoldedMask) != 0) - { -// m_log.DebugFormat ( -// "[SCENE OBJECT PART INVENTORY]: Applying next permissions {0} to {1} in {2} with current {3}, base {4}, everyone {5}", -// item.NextPermissions, item.Name, m_part.Name, item.CurrentPermissions, item.BasePermissions, item.EveryonePermissions); - - if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedCopy)) == 0) - item.CurrentPermissions &= ~(uint)PermissionMask.Copy; - if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedTransfer)) == 0) - item.CurrentPermissions &= ~(uint)PermissionMask.Transfer; - if ((item.CurrentPermissions & ((uint)PermissionMask.FoldedModify)) == 0) - item.CurrentPermissions &= ~(uint)PermissionMask.Modify; - } -*/ item.CurrentPermissions &= item.NextPermissions; item.BasePermissions &= item.NextPermissions; item.EveryonePermissions &= item.NextPermissions; -- cgit v1.1 From cf1064a2451271011d8575fba56f8aec361a9dc9 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sun, 30 Apr 2017 13:24:48 +0100 Subject: Add a missing viewer-relevant message to the perms module --- OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 8eee864..18d164f 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -2022,7 +2022,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions uint perms = GetObjectPermissions(sp, sog, true); if((perms & (uint)PermissionMask.Copy) == 0) + { + sp.ControllingClient.SendAgentAlertMessage("Copying this item has been denied by the permissions system", false); return false; + } if(sog.OwnerID != sp.UUID && (perms & (uint)PermissionMask.Transfer) == 0) return false; -- cgit v1.1 From b67904a6510d4827e8219a3534b8bc07a5115ec3 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 14:31:46 +0100 Subject: remove a redundant operation --- OpenSim/Framework/PermissionsUtil.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs index 39ccaba..aba8320 100644 --- a/OpenSim/Framework/PermissionsUtil.cs +++ b/OpenSim/Framework/PermissionsUtil.cs @@ -72,7 +72,6 @@ namespace OpenSim.Framework return; folded <<= (int)PermissionMask.FoldingShift; - folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well folded |= ~(uint)PermissionMask.UnfoldedMask; uint tmp = targetPerms; @@ -88,7 +87,6 @@ namespace OpenSim.Framework return; folded <<= (int)PermissionMask.FoldingShift; - folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well folded |= (~(uint)PermissionMask.UnfoldedMask | (uint)PermissionMask.Modify); uint tmp = target; -- cgit v1.1 From 0d59a29dc7c6f732da266a4ed4fddb5b39521ddf Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 14:39:20 +0100 Subject: save some nanoseconds if unfolding will not change anything ( export default mks it rare, but looks nice) --- OpenSim/Framework/PermissionsUtil.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs index aba8320..cf93323 100644 --- a/OpenSim/Framework/PermissionsUtil.cs +++ b/OpenSim/Framework/PermissionsUtil.cs @@ -68,7 +68,7 @@ namespace OpenSim.Framework public static void ApplyFoldedPermissions(uint foldedSourcePerms, ref uint targetPerms) { uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask; - if(folded == 0) // invalid we need to ignore + if(folded == 0 || folded == (uint)PermissionMask.FoldedMask) // invalid we need to ignore, or nothing to do return; folded <<= (int)PermissionMask.FoldingShift; @@ -83,7 +83,7 @@ namespace OpenSim.Framework public static void ApplyNoModFoldedPermissions(uint foldedSourcePerms, ref uint target) { uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask; - if(folded == 0) // invalid we need to ignore + if(folded == 0 || folded == (uint)PermissionMask.FoldedMask) // invalid we need to ignore, or nothing to do return; folded <<= (int)PermissionMask.FoldingShift; -- cgit v1.1 From a96c0f760a3df08217794e71ec450abddf3c3ef0 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 14:42:20 +0100 Subject: having the file open then let PermissionsToString know about Export --- OpenSim/Framework/PermissionsUtil.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs index cf93323..e50d4df 100644 --- a/OpenSim/Framework/PermissionsUtil.cs +++ b/OpenSim/Framework/PermissionsUtil.cs @@ -60,6 +60,8 @@ namespace OpenSim.Framework str += "C"; if ((perms & (int)PermissionMask.Transfer) != 0) str += "T"; + if ((perms & (int)PermissionMask.Export) != 0) + str += "X"; if (str == "") str = "."; return str; -- cgit v1.1 From 2dbf96593cf216595a1528afa2a668c0f38e1791 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 30 Apr 2017 19:44:49 +0100 Subject: Permissions compatibility hack 1: anyone copy - new permissions require that all items in all object parts contents have anyone copy set. Old code only required it on object. This hack tries to allow objects older than today to still work as before on this. (this is a test, we may need to change it) --- OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index 42f47b5..66c9013 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs @@ -338,6 +338,8 @@ namespace OpenSim.Region.Framework.Scenes uint rootEveryonePerms = RootPart.EveryoneMask; uint everyone = rootEveryonePerms; + // date is time of writing april 30th 2017 + bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994); SceneObjectPart[] parts = m_parts.GetArray(); for (int i = 0; i < parts.Length; i++) { @@ -345,7 +347,8 @@ namespace OpenSim.Region.Framework.Scenes part.AggregateInnerPerms(); owner &= part.AggregatedInnerOwnerPerms; group &= part.AggregatedInnerGroupPerms; - everyone &= part.AggregatedInnerEveryonePerms; + if(newObject) + everyone &= part.AggregatedInnerEveryonePerms; } // recover modify and move rootOwnerPerms &= movemodmask; @@ -407,14 +410,16 @@ namespace OpenSim.Region.Framework.Scenes uint everyone = rootEveryonePerms; bool needUpdate = false; - + // date is time of writing april 30th 2017 + bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994); SceneObjectPart[] parts = m_parts.GetArray(); for (int i = 0; i < parts.Length; i++) { SceneObjectPart part = parts[i]; owner &= part.AggregatedInnerOwnerPerms; group &= part.AggregatedInnerGroupPerms; - everyone &= part.AggregatedInnerEveryonePerms; + if(newObject) + everyone &= part.AggregatedInnerEveryonePerms; } // recover modify and move rootOwnerPerms &= movemodmask; -- cgit v1.1 From 442a736a4c3394ca0bc6cea9d9b6c2602d2b0b13 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 30 Apr 2017 21:11:30 -0700 Subject: Add Permission tests project --- prebuild.xml | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/prebuild.xml b/prebuild.xml index c087def..52fb74a 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -3300,7 +3300,46 @@ - + + + + ../../../bin/ + + + + + ../../../bin/ + + + + ../../../bin/ + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.1 From 60dc124872c52fb50cbf2f4413bd8813e50c527b Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 1 May 2017 14:18:59 +0100 Subject: rename sog.GetEffectivePermissions() since its use is now limited to more specific task, and no longer on current effective(full) path. Note that change ownermask start to be current ownermask, and filter it to all parts basemask --- .../Framework/InventoryAccess/InventoryAccessModule.cs | 17 +++++------------ .../CoreModules/World/Objects/BuySell/BuySellModule.cs | 10 +++++----- .../Framework/Scenes/SceneObjectGroup.Inventory.cs | 11 +++-------- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 916ddb0..f1885da 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -579,26 +579,19 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess IClientAPI remoteClient) { uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export | PermissionMask.FoldedMask); - - // For the porposes of inventory, an object is modify if the prims - // are modify. This allows renaming an object that contains no - // mod items. + foreach (SceneObjectGroup grp in objsForEffectivePermissions) { - uint groupPerms = grp.GetEffectivePermissions(true); -// if ((grp.RootPart.BaseMask & (uint)PermissionMask.Modify) != 0) -// groupPerms |= (uint)PermissionMask.Modify; - - effectivePerms &= groupPerms; + effectivePerms &= grp.CurrentAndFoldedNextPermissions(); } if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions()) { + // apply parts inventory items next owner PermissionsUtil.ApplyNoModFoldedPermissions(effectivePerms, ref effectivePerms); - + // change to next owner uint basePerms = effectivePerms & so.RootPart.NextOwnerMask; - - // rebuild folded perms since we don't have then on inworld objects + // fix and update folded basePerms = PermissionsUtil.FixAndFoldPermissions(basePerms); item.BasePermissions = basePerms; diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 6854b53..d1a109e 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -206,12 +206,12 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell item.InvType = (int)InventoryType.Object; item.Folder = categoryID; - perms = group.GetEffectivePermissions(false); - + perms = group.CurrentAndFoldedNextPermissions(); + // apply parts inventory next perms PermissionsUtil.ApplyNoModFoldedPermissions(perms, ref perms); - - perms &= part.NextOwnerMask; - + // change to next owner perms + perms &= part.NextOwnerMask; + // update folded perms = PermissionsUtil.FixAndFoldPermissions(perms); item.BasePermissions = perms; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index 66c9013..36844a9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs @@ -484,7 +484,7 @@ namespace OpenSim.Region.Framework.Scenes } } - public uint GetEffectivePermissions(bool useBase) + public uint CurrentAndFoldedNextPermissions() { uint perms=(uint)(PermissionMask.Modify | PermissionMask.Copy | @@ -492,18 +492,13 @@ namespace OpenSim.Region.Framework.Scenes PermissionMask.Transfer | PermissionMask.FoldedMask); - uint ownerMask = 0x7fffffff; + uint ownerMask = RootPart.OwnerMask; SceneObjectPart[] parts = m_parts.GetArray(); for (int i = 0; i < parts.Length; i++) { SceneObjectPart part = parts[i]; - - if (useBase) - ownerMask &= part.BaseMask; - else - ownerMask &= part.OwnerMask; - + ownerMask &= part.BaseMask; perms &= part.Inventory.MaskEffectivePermissions(); } -- cgit v1.1 From 28d8eda768a64e1eff9edf3006f494d4f0d62bc3 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 1 May 2017 14:42:38 +0100 Subject: buysell: make sure we dont buy child parts, dont mess with absolute position its useless with variable size regions, and its a rezing job --- .../World/Objects/BuySell/BuySellModule.cs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index d1a109e..a7a9d1d 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -118,6 +118,11 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell return false; SceneObjectGroup group = part.ParentGroup; + if(group == null || group.IsDeleted || group.inTransit) + return false; + + // make sure we are not buying a child part + part = group.RootPart; switch (saleType) { @@ -157,18 +162,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell break; case 2: // Sell a copy - Vector3 inventoryStoredPosition = new Vector3( - Math.Min(group.AbsolutePosition.X, m_scene.RegionInfo.RegionSizeX - 6), - Math.Min(group.AbsolutePosition.Y, m_scene.RegionInfo.RegionSizeY - 6), - group.AbsolutePosition.Z); - - Vector3 originalPosition = group.AbsolutePosition; - - group.AbsolutePosition = inventoryStoredPosition; - - string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group); - group.AbsolutePosition = originalPosition; - uint perms = group.EffectiveOwnerPerms; if ((perms & (uint)PermissionMask.Transfer) == 0) @@ -185,6 +178,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell return false; } + string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group); + AssetBase asset = m_scene.CreateAsset( group.GetPartName(localID), group.GetPartDescription(localID), -- cgit v1.1 From 45096b6238a3b6335429a680fa0bae0a6c0ce190 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 1 May 2017 07:06:50 -0700 Subject: Initial commit of the emerging test suite for permissions and more. --- OpenSim/Tests/Permissions/DirectTransferTests.cs | 252 +++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 OpenSim/Tests/Permissions/DirectTransferTests.cs diff --git a/OpenSim/Tests/Permissions/DirectTransferTests.cs b/OpenSim/Tests/Permissions/DirectTransferTests.cs new file mode 100644 index 0000000..7716776 --- /dev/null +++ b/OpenSim/Tests/Permissions/DirectTransferTests.cs @@ -0,0 +1,252 @@ +/* + * 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 System.Threading; +using Nini.Config; +using NUnit.Framework; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.CoreModules.World.Permissions; +using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer; +using OpenSim.Region.CoreModules.Framework.InventoryAccess; +using OpenSim.Region.Framework.Scenes.Serialization; +using OpenSim.Services.Interfaces; +using OpenSim.Tests.Common; +using PermissionMask = OpenSim.Framework.PermissionMask; + +namespace OpenSim.Tests.Permissions +{ + /// + /// Basic scene object tests (create, read and delete but not update). + /// + [TestFixture] + public class DirectTransferTests : OpenSimTestCase + { + private static string Perms = "Owner: {0}; Group: {1}; Everyone: {2}; Next: {3}"; + protected TestScene m_Scene; + private ScenePresence[] m_Avatars = new ScenePresence[3]; + + [SetUp] + public override void SetUp() + { + base.SetUp(); + TestHelpers.EnableLogging(); + + IConfigSource config = new IniConfigSource(); + config.AddConfig("Messaging"); + config.Configs["Messaging"].Set("InventoryTransferModule", "InventoryTransferModule"); + config.AddConfig("Modules"); + config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); + config.AddConfig("InventoryService"); + config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:XInventoryService"); + config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll:TestXInventoryDataPlugin"); + + m_Scene = new SceneHelpers().SetupScene("Test", UUID.Random(), 1000, 1000, config); + // Add modules + SceneHelpers.SetupSceneModules(m_Scene, config, new DefaultPermissionsModule(), new InventoryTransferModule(), new BasicInventoryAccessModule()); + + // Add 3 avatars + for (int i = 0; i < 3; i++) + { + UUID id = TestHelpers.ParseTail(i+1); + + m_Avatars[i] = AddScenePresence("Bot", "Bot_" + i, id); + Assert.That(m_Avatars[i], Is.Not.Null); + Assert.That(m_Avatars[i].IsChildAgent, Is.False); + Assert.That(m_Avatars[i].UUID, Is.EqualTo(id)); + + Assert.That(m_Scene.GetScenePresences().Count, Is.EqualTo(i+1)); + } + } + + /// + /// Test adding an object to a scene. + /// + [Test] + public void TestGiveCBox() + { + TestHelpers.InMethod(); + + // Create a C Box + SceneObjectGroup boxC = AddSceneObject("Box C", 10, 1, m_Avatars[0].UUID); + + // field = 16 is NextOwner + // set = 1 means add the permission; set = 0 means remove permission + m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, + ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, boxC.LocalId, (uint)PermissionMask.Copy, 1); + + m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, + ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, boxC.LocalId, (uint)PermissionMask.Transfer, 0); + PrintPerms(boxC); + + Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Copy) != 0); + Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Modify) == 0); + Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Transfer) == 0); + + InventoryItemBase item = TakeCopyToInventory(boxC); + + GiveInventoryItem(item.ID, m_Avatars[0], m_Avatars[1]); + + item = GetItemFromInventory(m_Avatars[1].UUID, "Objects", "Box C"); + + // Check the receiver + PrintPerms(item); + Assert.True((item.BasePermissions & (int)PermissionMask.Copy) != 0); + Assert.True((item.BasePermissions & (int)PermissionMask.Modify) == 0); + Assert.True((item.BasePermissions & (int)PermissionMask.Transfer) == 0); + + // Rez it and check perms in scene too + m_Scene.RezObject(m_Avatars[1].ControllingClient, item.ID, UUID.Zero, Vector3.One, Vector3.Zero, UUID.Zero, 0, false, false, false, UUID.Zero); + Assert.That(m_Scene.GetSceneObjectGroups().Count, Is.EqualTo(2)); + SceneObjectGroup copyBoxC = m_Scene.GetSceneObjectGroups().Find(sog => sog.OwnerID == m_Avatars[1].UUID); + PrintPerms(copyBoxC); + Assert.That(copyBoxC, Is.Not.Null); + + } + + #region Helper Functions + + private void PrintPerms(SceneObjectGroup sog) + { + Console.WriteLine("SOG " + sog.Name + ": " + String.Format(Perms, (PermissionMask)sog.EffectiveOwnerPerms, + (PermissionMask)sog.EffectiveGroupPerms, (PermissionMask)sog.EffectiveEveryOnePerms, (PermissionMask)sog.RootPart.NextOwnerMask)); + + } + + private void PrintPerms(InventoryItemBase item) + { + Console.WriteLine("Inv " + item.Name + ": " + String.Format(Perms, (PermissionMask)item.BasePermissions, + (PermissionMask)item.GroupPermissions, (PermissionMask)item.EveryOnePermissions, (PermissionMask)item.NextPermissions)); + + } + + private ScenePresence AddScenePresence(string first, string last, UUID id) + { + UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_Scene, first, last, id, "pw"); + ScenePresence sp = SceneHelpers.AddScenePresence(m_Scene, id); + Assert.That(m_Scene.AuthenticateHandler.GetAgentCircuitData(id), Is.Not.Null); + + return sp; + } + + private SceneObjectGroup AddSceneObject(string name, int suffix, int partsToTestCount, UUID ownerID) + { + TestHelpers.InMethod(); + + SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, ownerID, name, suffix); + so.Name = name; + so.Description = name; + + Assert.That(m_Scene.AddNewSceneObject(so, false), Is.True); + SceneObjectGroup retrievedSo = m_Scene.GetSceneObjectGroup(so.UUID); + + // If the parts have the same UUID then we will consider them as one and the same + Assert.That(retrievedSo.PrimCount, Is.EqualTo(partsToTestCount)); + + return so; + } + + private InventoryItemBase TakeCopyToInventory(SceneObjectGroup sog) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, sog.OwnerID, "Objects"); + Assert.That(objsFolder, Is.Not.Null); + + List localIds = new List(); localIds.Add(sog.LocalId); + m_Scene.DeRezObjects((IClientAPI)m_Avatars[0].ClientView, localIds, sog.UUID, DeRezAction.TakeCopy, objsFolder.ID); + Thread.Sleep(5000); + + List items = m_Scene.InventoryService.GetFolderItems(sog.OwnerID, objsFolder.ID); + InventoryItemBase item = items.Find(i => i.Name == sog.Name); + Assert.That(item, Is.Not.Null); + + return item; + + } + + private InventoryItemBase GetItemFromInventory(UUID userID, string folderName, string itemName) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, userID, folderName); + Assert.That(objsFolder, Is.Not.Null); + List items = m_Scene.InventoryService.GetFolderItems(userID, objsFolder.ID); + InventoryItemBase item = items.Find(i => i.Name == itemName); + Assert.That(item, Is.Not.Null); + + return item; + } + + private void GiveInventoryItem(UUID itemId, ScenePresence giverSp, ScenePresence receiverSp) + { + TestClient giverClient = (TestClient)giverSp.ControllingClient; + TestClient receiverClient = (TestClient)receiverSp.ControllingClient; + + UUID initialSessionId = TestHelpers.ParseTail(0x10); + byte[] giveImBinaryBucket = new byte[17]; + byte[] itemIdBytes = itemId.GetBytes(); + Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length); + + GridInstantMessage giveIm + = new GridInstantMessage( + m_Scene, + giverSp.UUID, + giverSp.Name, + receiverSp.UUID, + (byte)InstantMessageDialog.InventoryOffered, + false, + "inventory offered msg", + initialSessionId, + false, + Vector3.Zero, + giveImBinaryBucket, + true); + + giverClient.HandleImprovedInstantMessage(giveIm); + + // These details might not all be correct. + GridInstantMessage acceptIm + = new GridInstantMessage( + m_Scene, + receiverSp.UUID, + receiverSp.Name, + giverSp.UUID, + (byte)InstantMessageDialog.InventoryAccepted, + false, + "inventory accepted msg", + initialSessionId, + false, + Vector3.Zero, + null, + true); + + receiverClient.HandleImprovedInstantMessage(acceptIm); + } + #endregion + } +} \ No newline at end of file -- cgit v1.1 From 9c6dd5d967d44d2eb222a2382d9f19572b871d87 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 1 May 2017 10:09:31 -0700 Subject: Perms test framework: make a lot of things more generic. --- OpenSim/Tests/Permissions/Common.cs | 259 +++++++++++++++++++++++ OpenSim/Tests/Permissions/DirectTransferTests.cs | 208 +++--------------- 2 files changed, 293 insertions(+), 174 deletions(-) create mode 100644 OpenSim/Tests/Permissions/Common.cs diff --git a/OpenSim/Tests/Permissions/Common.cs b/OpenSim/Tests/Permissions/Common.cs new file mode 100644 index 0000000..63b91b6 --- /dev/null +++ b/OpenSim/Tests/Permissions/Common.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Threading; +using Nini.Config; +using NUnit.Framework; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.CoreModules.World.Permissions; +using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer; +using OpenSim.Region.CoreModules.Framework.InventoryAccess; +using OpenSim.Region.Framework.Scenes.Serialization; +using OpenSim.Services.Interfaces; +using OpenSim.Tests.Common; +using PermissionMask = OpenSim.Framework.PermissionMask; + +namespace OpenSim.Tests.Permissions +{ + [SetUpFixture] + public class Common : OpenSimTestCase + { + public static Common TheInstance; + + public static TestScene TheScene + { + get { return TheInstance.m_Scene; } + } + + public static ScenePresence[] TheAvatars + { + get { return TheInstance.m_Avatars; } + } + + private static string Perms = "Owner: {0}; Group: {1}; Everyone: {2}; Next: {3}"; + private TestScene m_Scene; + private ScenePresence[] m_Avatars = new ScenePresence[3]; + + [SetUp] + public override void SetUp() + { + if (TheInstance == null) + TheInstance = this; + + base.SetUp(); + TestHelpers.EnableLogging(); + + IConfigSource config = new IniConfigSource(); + config.AddConfig("Messaging"); + config.Configs["Messaging"].Set("InventoryTransferModule", "InventoryTransferModule"); + config.AddConfig("Modules"); + config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); + config.AddConfig("InventoryService"); + config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:XInventoryService"); + config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll:TestXInventoryDataPlugin"); + + m_Scene = new SceneHelpers().SetupScene("Test", UUID.Random(), 1000, 1000, config); + // Add modules + SceneHelpers.SetupSceneModules(m_Scene, config, new DefaultPermissionsModule(), new InventoryTransferModule(), new BasicInventoryAccessModule()); + + SetUpBasicEnvironment(); + } + + /// + /// The basic environment consists of: + /// - 3 avatars: A1, A2, A3 + /// - 6 simple boxes inworld belonging to A0 and with Next Owner perms: + /// C, CT, MC, MCT, MT, T + /// - Copies of all of these boxes in A0's inventory in the Objects folder + /// - One additional box in A0's inventory which is a copy of MCT, but + /// with C removed in inventory. This one is called MCT-C + /// + private void SetUpBasicEnvironment() + { + Console.WriteLine("===> SetUpBasicEnvironment <==="); + + // Add 3 avatars + for (int i = 0; i < 3; i++) + { + UUID id = TestHelpers.ParseTail(i + 1); + + m_Avatars[i] = AddScenePresence("Bot", "Bot_" + (i+1), id); + Assert.That(m_Avatars[i], Is.Not.Null); + Assert.That(m_Avatars[i].IsChildAgent, Is.False); + Assert.That(m_Avatars[i].UUID, Is.EqualTo(id)); + Assert.That(m_Scene.GetScenePresences().Count, Is.EqualTo(i + 1)); + } + + AddA1Object("Box C", 10, PermissionMask.Copy); + AddA1Object("Box CT", 11, PermissionMask.Copy | PermissionMask.Transfer); + AddA1Object("Box MC", 12, PermissionMask.Modify | PermissionMask.Copy); + AddA1Object("Box MCT", 13, PermissionMask.Modify | PermissionMask.Copy | PermissionMask.Transfer); + AddA1Object("Box MT", 14, PermissionMask.Modify | PermissionMask.Transfer); + AddA1Object("Box T", 15, PermissionMask.Transfer); + + Thread.Sleep(5000); + + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, m_Avatars[0].UUID, "Objects"); + List items = m_Scene.InventoryService.GetFolderItems(m_Avatars[0].UUID, objsFolder.ID); + Assert.That(items.Count, Is.EqualTo(6)); + } + + private ScenePresence AddScenePresence(string first, string last, UUID id) + { + UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_Scene, first, last, id, "pw"); + ScenePresence sp = SceneHelpers.AddScenePresence(m_Scene, id); + Assert.That(m_Scene.AuthenticateHandler.GetAgentCircuitData(id), Is.Not.Null); + + return sp; + } + + private void AddA1Object(string name, int suffix, PermissionMask nextOwnerPerms) + { + // Create a Box. Default permissions are just T + SceneObjectGroup box = AddSceneObject(name, suffix, 1, m_Avatars[0].UUID); + Assert.True((box.RootPart.NextOwnerMask & (int)PermissionMask.Copy) == 0); + Assert.True((box.RootPart.NextOwnerMask & (int)PermissionMask.Modify) == 0); + Assert.True((box.RootPart.NextOwnerMask & (int)PermissionMask.Transfer) != 0); + + // field = 16 is NextOwner + // set = 1 means add the permission; set = 0 means remove permission + + if ((nextOwnerPerms & PermissionMask.Copy) != 0) + m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, + ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, box.LocalId, (uint)PermissionMask.Copy, 1); + + if ((nextOwnerPerms & PermissionMask.Modify) != 0) + m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, + ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, box.LocalId, (uint)PermissionMask.Modify, 1); + + if ((nextOwnerPerms & PermissionMask.Transfer) == 0) + m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, + ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, box.LocalId, (uint)PermissionMask.Transfer, 0); + + PrintPerms(box); + AssertPermissions(nextOwnerPerms, (PermissionMask)box.RootPart.NextOwnerMask, box.OwnerID.ToString().Substring(34) + " : " + box.Name); + + TakeCopyToInventory(box); + + } + + public void PrintPerms(SceneObjectGroup sog) + { + Console.WriteLine("SOG " + sog.Name + " (" + sog.OwnerID.ToString().Substring(34) + "): " + + String.Format(Perms, (PermissionMask)sog.EffectiveOwnerPerms, + (PermissionMask)sog.EffectiveGroupPerms, (PermissionMask)sog.EffectiveEveryOnePerms, (PermissionMask)sog.RootPart.NextOwnerMask)); + + } + + public void PrintPerms(InventoryItemBase item) + { + Console.WriteLine("Inv " + item.Name + " (" + item.Owner.ToString().Substring(34) + "): " + + String.Format(Perms, (PermissionMask)item.BasePermissions, + (PermissionMask)item.GroupPermissions, (PermissionMask)item.EveryOnePermissions, (PermissionMask)item.NextPermissions)); + + } + + public void AssertPermissions(PermissionMask desired, PermissionMask actual, string message) + { + if ((desired & PermissionMask.Copy) != 0) + Assert.True((actual & PermissionMask.Copy) != 0, message); + else + Assert.True((actual & PermissionMask.Copy) == 0, message); + + if ((desired & PermissionMask.Modify) != 0) + Assert.True((actual & PermissionMask.Modify) != 0, message); + else + Assert.True((actual & PermissionMask.Modify) == 0, message); + + if ((desired & PermissionMask.Transfer) != 0) + Assert.True((actual & PermissionMask.Transfer) != 0, message); + else + Assert.True((actual & PermissionMask.Transfer) == 0, message); + + } + + public SceneObjectGroup AddSceneObject(string name, int suffix, int partsToTestCount, UUID ownerID) + { + SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, ownerID, name, suffix); + so.Name = name; + so.Description = name; + + Assert.That(m_Scene.AddNewSceneObject(so, false), Is.True); + SceneObjectGroup retrievedSo = m_Scene.GetSceneObjectGroup(so.UUID); + + // If the parts have the same UUID then we will consider them as one and the same + Assert.That(retrievedSo.PrimCount, Is.EqualTo(partsToTestCount)); + + return so; + } + + public void TakeCopyToInventory(SceneObjectGroup sog) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, sog.OwnerID, "Objects"); + Assert.That(objsFolder, Is.Not.Null); + + List localIds = new List(); localIds.Add(sog.LocalId); + // This is an async operation + m_Scene.DeRezObjects((IClientAPI)m_Avatars[0].ClientView, localIds, sog.UUID, DeRezAction.TakeCopy, objsFolder.ID); + } + + public InventoryItemBase GetItemFromInventory(UUID userID, string folderName, string itemName) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, userID, folderName); + Assert.That(objsFolder, Is.Not.Null); + List items = m_Scene.InventoryService.GetFolderItems(userID, objsFolder.ID); + InventoryItemBase item = items.Find(i => i.Name == itemName); + Assert.That(item, Is.Not.Null); + + return item; + } + + public void GiveInventoryItem(UUID itemId, ScenePresence giverSp, ScenePresence receiverSp) + { + TestClient giverClient = (TestClient)giverSp.ControllingClient; + TestClient receiverClient = (TestClient)receiverSp.ControllingClient; + + UUID initialSessionId = TestHelpers.ParseTail(0x10); + byte[] giveImBinaryBucket = new byte[17]; + byte[] itemIdBytes = itemId.GetBytes(); + Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length); + + GridInstantMessage giveIm + = new GridInstantMessage( + m_Scene, + giverSp.UUID, + giverSp.Name, + receiverSp.UUID, + (byte)InstantMessageDialog.InventoryOffered, + false, + "inventory offered msg", + initialSessionId, + false, + Vector3.Zero, + giveImBinaryBucket, + true); + + giverClient.HandleImprovedInstantMessage(giveIm); + + // These details might not all be correct. + GridInstantMessage acceptIm + = new GridInstantMessage( + m_Scene, + receiverSp.UUID, + receiverSp.Name, + giverSp.UUID, + (byte)InstantMessageDialog.InventoryAccepted, + false, + "inventory accepted msg", + initialSessionId, + false, + Vector3.Zero, + null, + true); + + receiverClient.HandleImprovedInstantMessage(acceptIm); + } + } +} diff --git a/OpenSim/Tests/Permissions/DirectTransferTests.cs b/OpenSim/Tests/Permissions/DirectTransferTests.cs index 7716776..e103d01 100644 --- a/OpenSim/Tests/Permissions/DirectTransferTests.cs +++ b/OpenSim/Tests/Permissions/DirectTransferTests.cs @@ -48,205 +48,65 @@ namespace OpenSim.Tests.Permissions /// Basic scene object tests (create, read and delete but not update). /// [TestFixture] - public class DirectTransferTests : OpenSimTestCase + public class DirectTransferTests { - private static string Perms = "Owner: {0}; Group: {1}; Everyone: {2}; Next: {3}"; - protected TestScene m_Scene; - private ScenePresence[] m_Avatars = new ScenePresence[3]; [SetUp] - public override void SetUp() + public void SetUp() { - base.SetUp(); - TestHelpers.EnableLogging(); - - IConfigSource config = new IniConfigSource(); - config.AddConfig("Messaging"); - config.Configs["Messaging"].Set("InventoryTransferModule", "InventoryTransferModule"); - config.AddConfig("Modules"); - config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); - config.AddConfig("InventoryService"); - config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:XInventoryService"); - config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll:TestXInventoryDataPlugin"); - - m_Scene = new SceneHelpers().SetupScene("Test", UUID.Random(), 1000, 1000, config); - // Add modules - SceneHelpers.SetupSceneModules(m_Scene, config, new DefaultPermissionsModule(), new InventoryTransferModule(), new BasicInventoryAccessModule()); - - // Add 3 avatars - for (int i = 0; i < 3; i++) - { - UUID id = TestHelpers.ParseTail(i+1); - - m_Avatars[i] = AddScenePresence("Bot", "Bot_" + i, id); - Assert.That(m_Avatars[i], Is.Not.Null); - Assert.That(m_Avatars[i].IsChildAgent, Is.False); - Assert.That(m_Avatars[i].UUID, Is.EqualTo(id)); - - Assert.That(m_Scene.GetScenePresences().Count, Is.EqualTo(i+1)); - } } /// - /// Test adding an object to a scene. + /// Test giving a C object. /// [Test] public void TestGiveCBox() { TestHelpers.InMethod(); - // Create a C Box - SceneObjectGroup boxC = AddSceneObject("Box C", 10, 1, m_Avatars[0].UUID); - - // field = 16 is NextOwner - // set = 1 means add the permission; set = 0 means remove permission - m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, - ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, boxC.LocalId, (uint)PermissionMask.Copy, 1); - - m_Scene.HandleObjectPermissionsUpdate((IClientAPI)m_Avatars[0].ClientView, m_Avatars[0].UUID, - ((IClientAPI)(m_Avatars[0].ClientView)).SessionId, 16, boxC.LocalId, (uint)PermissionMask.Transfer, 0); - PrintPerms(boxC); - - Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Copy) != 0); - Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Modify) == 0); - Assert.True((boxC.RootPart.NextOwnerMask & (int)PermissionMask.Transfer) == 0); - - InventoryItemBase item = TakeCopyToInventory(boxC); - - GiveInventoryItem(item.ID, m_Avatars[0], m_Avatars[1]); - - item = GetItemFromInventory(m_Avatars[1].UUID, "Objects", "Box C"); - - // Check the receiver - PrintPerms(item); - Assert.True((item.BasePermissions & (int)PermissionMask.Copy) != 0); - Assert.True((item.BasePermissions & (int)PermissionMask.Modify) == 0); - Assert.True((item.BasePermissions & (int)PermissionMask.Transfer) == 0); - - // Rez it and check perms in scene too - m_Scene.RezObject(m_Avatars[1].ControllingClient, item.ID, UUID.Zero, Vector3.One, Vector3.Zero, UUID.Zero, 0, false, false, false, UUID.Zero); - Assert.That(m_Scene.GetSceneObjectGroups().Count, Is.EqualTo(2)); - SceneObjectGroup copyBoxC = m_Scene.GetSceneObjectGroups().Find(sog => sog.OwnerID == m_Avatars[1].UUID); - PrintPerms(copyBoxC); - Assert.That(copyBoxC, Is.Not.Null); - - } - - #region Helper Functions - - private void PrintPerms(SceneObjectGroup sog) - { - Console.WriteLine("SOG " + sog.Name + ": " + String.Format(Perms, (PermissionMask)sog.EffectiveOwnerPerms, - (PermissionMask)sog.EffectiveGroupPerms, (PermissionMask)sog.EffectiveEveryOnePerms, (PermissionMask)sog.RootPart.NextOwnerMask)); - - } - - private void PrintPerms(InventoryItemBase item) - { - Console.WriteLine("Inv " + item.Name + ": " + String.Format(Perms, (PermissionMask)item.BasePermissions, - (PermissionMask)item.GroupPermissions, (PermissionMask)item.EveryOnePermissions, (PermissionMask)item.NextPermissions)); - + // C, CT, MC, MCT, MT, T + string[] names = new string[6] { "Box C", "Box CT", "Box MC", "Box MCT", "Box MT", "Box T"}; + PermissionMask[] perms = new PermissionMask[6] { + PermissionMask.Copy, + PermissionMask.Copy | PermissionMask.Transfer, + PermissionMask.Modify | PermissionMask.Copy, + PermissionMask.Modify | PermissionMask.Copy | PermissionMask.Transfer, + PermissionMask.Modify | PermissionMask.Transfer, + PermissionMask.Transfer + }; + + for (int i = 0; i < 6; i++) + TestOneBox(names[i], perms[i]); } - private ScenePresence AddScenePresence(string first, string last, UUID id) + private void TestOneBox(string name, PermissionMask mask) { - UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_Scene, first, last, id, "pw"); - ScenePresence sp = SceneHelpers.AddScenePresence(m_Scene, id); - Assert.That(m_Scene.AuthenticateHandler.GetAgentCircuitData(id), Is.Not.Null); - - return sp; - } - - private SceneObjectGroup AddSceneObject(string name, int suffix, int partsToTestCount, UUID ownerID) - { - TestHelpers.InMethod(); - - SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, ownerID, name, suffix); - so.Name = name; - so.Description = name; - - Assert.That(m_Scene.AddNewSceneObject(so, false), Is.True); - SceneObjectGroup retrievedSo = m_Scene.GetSceneObjectGroup(so.UUID); + InventoryItemBase item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[0].UUID, "Objects", name); - // If the parts have the same UUID then we will consider them as one and the same - Assert.That(retrievedSo.PrimCount, Is.EqualTo(partsToTestCount)); + Common.TheInstance.GiveInventoryItem(item.ID, Common.TheAvatars[0], Common.TheAvatars[1]); - return so; - } + item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[1].UUID, "Objects", name); - private InventoryItemBase TakeCopyToInventory(SceneObjectGroup sog) - { - InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, sog.OwnerID, "Objects"); - Assert.That(objsFolder, Is.Not.Null); + // Check the receiver + Common.TheInstance.PrintPerms(item); + Common.TheInstance.AssertPermissions(mask, (PermissionMask)item.BasePermissions, item.Owner.ToString().Substring(34) + " : " + item.Name); - List localIds = new List(); localIds.Add(sog.LocalId); - m_Scene.DeRezObjects((IClientAPI)m_Avatars[0].ClientView, localIds, sog.UUID, DeRezAction.TakeCopy, objsFolder.ID); - Thread.Sleep(5000); + int nObjects = Common.TheScene.GetSceneObjectGroups().Count; + // Rez it and check perms in scene too + Common.TheScene.RezObject(Common.TheAvatars[1].ControllingClient, item.ID, UUID.Zero, Vector3.One, Vector3.Zero, UUID.Zero, 0, false, false, false, UUID.Zero); + Assert.That(Common.TheScene.GetSceneObjectGroups().Count, Is.EqualTo(nObjects + 1)); - List items = m_Scene.InventoryService.GetFolderItems(sog.OwnerID, objsFolder.ID); - InventoryItemBase item = items.Find(i => i.Name == sog.Name); - Assert.That(item, Is.Not.Null); + SceneObjectGroup box = Common.TheScene.GetSceneObjectGroups().Find(sog => sog.OwnerID == Common.TheAvatars[1].UUID && sog.Name == name); + Common.TheInstance.PrintPerms(box); + Assert.That(box, Is.Not.Null); - return item; + // Check Owner permissions + Common.TheInstance.AssertPermissions(mask, (PermissionMask)box.EffectiveOwnerPerms, box.OwnerID.ToString().Substring(34) + " : " + box.Name); - } + // Check Next Owner permissions + Common.TheInstance.AssertPermissions(mask, (PermissionMask)box.RootPart.NextOwnerMask, box.OwnerID.ToString().Substring(34) + " : " + box.Name); - private InventoryItemBase GetItemFromInventory(UUID userID, string folderName, string itemName) - { - InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, userID, folderName); - Assert.That(objsFolder, Is.Not.Null); - List items = m_Scene.InventoryService.GetFolderItems(userID, objsFolder.ID); - InventoryItemBase item = items.Find(i => i.Name == itemName); - Assert.That(item, Is.Not.Null); - - return item; } - private void GiveInventoryItem(UUID itemId, ScenePresence giverSp, ScenePresence receiverSp) - { - TestClient giverClient = (TestClient)giverSp.ControllingClient; - TestClient receiverClient = (TestClient)receiverSp.ControllingClient; - - UUID initialSessionId = TestHelpers.ParseTail(0x10); - byte[] giveImBinaryBucket = new byte[17]; - byte[] itemIdBytes = itemId.GetBytes(); - Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length); - - GridInstantMessage giveIm - = new GridInstantMessage( - m_Scene, - giverSp.UUID, - giverSp.Name, - receiverSp.UUID, - (byte)InstantMessageDialog.InventoryOffered, - false, - "inventory offered msg", - initialSessionId, - false, - Vector3.Zero, - giveImBinaryBucket, - true); - - giverClient.HandleImprovedInstantMessage(giveIm); - - // These details might not all be correct. - GridInstantMessage acceptIm - = new GridInstantMessage( - m_Scene, - receiverSp.UUID, - receiverSp.Name, - giverSp.UUID, - (byte)InstantMessageDialog.InventoryAccepted, - false, - "inventory accepted msg", - initialSessionId, - false, - Vector3.Zero, - null, - true); - - receiverClient.HandleImprovedInstantMessage(acceptIm); - } - #endregion } } \ No newline at end of file -- cgit v1.1 From 1ca2a7937ebf246bb2ebe4b1355f8068912ea4b0 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 1 May 2017 14:58:03 -0700 Subject: Permissions tests: added test with 2 direct transfers with permission changes in between (in inventory) --- OpenSim/Tests/Permissions/Common.cs | 64 +++++++++++++++++++++++- OpenSim/Tests/Permissions/DirectTransferTests.cs | 51 +++++++++++++++++-- 2 files changed, 110 insertions(+), 5 deletions(-) diff --git a/OpenSim/Tests/Permissions/Common.cs b/OpenSim/Tests/Permissions/Common.cs index 63b91b6..84dadf2 100644 --- a/OpenSim/Tests/Permissions/Common.cs +++ b/OpenSim/Tests/Permissions/Common.cs @@ -93,11 +93,16 @@ namespace OpenSim.Tests.Permissions AddA1Object("Box MT", 14, PermissionMask.Modify | PermissionMask.Transfer); AddA1Object("Box T", 15, PermissionMask.Transfer); + // MCT-C + AddA1Object("Box MCT-C", 16, PermissionMask.Modify | PermissionMask.Copy | PermissionMask.Transfer); + Thread.Sleep(5000); InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, m_Avatars[0].UUID, "Objects"); List items = m_Scene.InventoryService.GetFolderItems(m_Avatars[0].UUID, objsFolder.ID); - Assert.That(items.Count, Is.EqualTo(6)); + Assert.That(items.Count, Is.EqualTo(7)); + + RevokePermission(0, "Box MCT-C", PermissionMask.Copy); } private ScenePresence AddScenePresence(string first, string last, UUID id) @@ -139,6 +144,30 @@ namespace OpenSim.Tests.Permissions } + public void RevokePermission(int ownerIndex, string name, PermissionMask perm) + { + InventoryItemBase item = Common.TheInstance.GetItemFromInventory(m_Avatars[ownerIndex].UUID, "Objects", name); + Assert.That(item, Is.Not.Null); + + // Clone it, so to avoid aliasing -- just like the viewer does. + InventoryItemBase clone = Common.TheInstance.CloneInventoryItem(item); + // Revoke the permission in this copy + clone.NextPermissions &= ~(uint)perm; + Common.TheInstance.AssertPermissions((PermissionMask)clone.NextPermissions & ~perm, + (PermissionMask)clone.NextPermissions, Common.TheInstance.IdStr(clone)); + Assert.That(clone.ID == item.ID); + + // Update properties of the item in inventory. This should affect the original item above. + Common.TheScene.UpdateInventoryItemAsset(m_Avatars[ownerIndex].ControllingClient, UUID.Zero, clone.ID, clone); + + item = Common.TheInstance.GetItemFromInventory(m_Avatars[ownerIndex].UUID, "Objects", name); + Assert.That(item, Is.Not.Null); + Common.TheInstance.PrintPerms(item); + Common.TheInstance.AssertPermissions((PermissionMask)item.NextPermissions & ~perm, + (PermissionMask)item.NextPermissions, Common.TheInstance.IdStr(item)); + + } + public void PrintPerms(SceneObjectGroup sog) { Console.WriteLine("SOG " + sog.Name + " (" + sog.OwnerID.ToString().Substring(34) + "): " + @@ -210,6 +239,39 @@ namespace OpenSim.Tests.Permissions return item; } + public InventoryItemBase CloneInventoryItem(InventoryItemBase item) + { + InventoryItemBase clone = new InventoryItemBase(item.ID); + clone.Name = item.Name; + clone.Description = item.Description; + clone.AssetID = item.AssetID; + clone.AssetType = item.AssetType; + clone.BasePermissions = item.BasePermissions; + clone.CreatorId = item.CreatorId; + clone.CurrentPermissions = item.CurrentPermissions; + clone.EveryOnePermissions = item.EveryOnePermissions; + clone.Flags = item.Flags; + clone.Folder = item.Folder; + clone.GroupID = item.GroupID; + clone.GroupOwned = item.GroupOwned; + clone.GroupPermissions = item.GroupPermissions; + clone.InvType = item.InvType; + clone.NextPermissions = item.NextPermissions; + clone.Owner = item.Owner; + + return clone; + } + + public string IdStr(InventoryItemBase item) + { + return item.Owner.ToString().Substring(34) + " : " + item.Name; + } + + public string IdStr(SceneObjectGroup sog) + { + return sog.OwnerID.ToString().Substring(34) + " : " + sog.Name; + } + public void GiveInventoryItem(UUID itemId, ScenePresence giverSp, ScenePresence receiverSp) { TestClient giverClient = (TestClient)giverSp.ControllingClient; diff --git a/OpenSim/Tests/Permissions/DirectTransferTests.cs b/OpenSim/Tests/Permissions/DirectTransferTests.cs index e103d01..3ca711a 100644 --- a/OpenSim/Tests/Permissions/DirectTransferTests.cs +++ b/OpenSim/Tests/Permissions/DirectTransferTests.cs @@ -48,7 +48,7 @@ namespace OpenSim.Tests.Permissions /// Basic scene object tests (create, read and delete but not update). /// [TestFixture] - public class DirectTransferTests + public class DirectTransferTests { [SetUp] @@ -57,15 +57,15 @@ namespace OpenSim.Tests.Permissions } /// - /// Test giving a C object. + /// Test giving simple objecta with various combinations of next owner perms. /// [Test] - public void TestGiveCBox() + public void TestGiveBox() { TestHelpers.InMethod(); // C, CT, MC, MCT, MT, T - string[] names = new string[6] { "Box C", "Box CT", "Box MC", "Box MCT", "Box MT", "Box T"}; + string[] names = new string[6] { "Box C", "Box CT", "Box MC", "Box MCT", "Box MT", "Box T" }; PermissionMask[] perms = new PermissionMask[6] { PermissionMask.Copy, PermissionMask.Copy | PermissionMask.Transfer, @@ -108,5 +108,48 @@ namespace OpenSim.Tests.Permissions } + /// + /// Test giving simple objecta with variour combinations of next owner perms. + /// + [Test] + public void TestDoubleGiveWithChange() + { + TestHelpers.InMethod(); + + string name = "Box MCT-C"; + InventoryItemBase item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[0].UUID, "Objects", name); + + // Now give the item to A2. We give the original item, not a clone. + // The giving methods are supposed to duplicate it. + Common.TheInstance.GiveInventoryItem(item.ID, Common.TheAvatars[0], Common.TheAvatars[1]); + + item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[1].UUID, "Objects", name); + + // Check the receiver + Common.TheInstance.PrintPerms(item); + Common.TheInstance.AssertPermissions(PermissionMask.Modify | PermissionMask.Transfer, + (PermissionMask)item.BasePermissions, Common.TheInstance.IdStr(item)); + + // --------------------------- + // Second transfer + //---------------------------- + + // A2 revokes M + Common.TheInstance.RevokePermission(1, name, PermissionMask.Modify); + + item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[1].UUID, "Objects", name); + + // Now give the item to A3. We give the original item, not a clone. + // The giving methods are supposed to duplicate it. + Common.TheInstance.GiveInventoryItem(item.ID, Common.TheAvatars[1], Common.TheAvatars[2]); + + item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[2].UUID, "Objects", name); + + // Check the receiver + Common.TheInstance.PrintPerms(item); + Common.TheInstance.AssertPermissions(PermissionMask.Transfer, + (PermissionMask)item.BasePermissions, Common.TheInstance.IdStr(item)); + + } } } \ No newline at end of file -- cgit v1.1 From 8498cc2f02ef61e93d603dac28c21df4321609a1 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 1 May 2017 23:07:57 +0100 Subject: save a few nanoseconds --- .../Framework/Scenes/SceneObjectPartInventory.cs | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 946ed09..8c9d0bb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -1351,19 +1351,26 @@ namespace OpenSim.Region.Framework.Scenes if(item.InvType == (sbyte)InventoryType.Landmark) continue; - if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Copy) == 0) - mask &= ~((uint)PermissionMask.FoldedCopy); - if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Transfer) == 0) - mask &= ~((uint)PermissionMask.FoldedTransfer); - if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Export) == 0) - mask &= ~((uint)PermissionMask.FoldedExport); + // apply current to normal permission bits + uint newperms = item.CurrentPermissions; - if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) + if ((newperms & (uint)PermissionMask.Copy) == 0) mask &= ~(uint)PermissionMask.Copy; - if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) + if ((newperms & (uint)PermissionMask.Transfer) == 0) mask &= ~(uint)PermissionMask.Transfer; - if ((item.CurrentPermissions & (uint)PermissionMask.Export) == 0) + if ((newperms & (uint)PermissionMask.Export) == 0) mask &= ~((uint)PermissionMask.Export); + + // apply next owner restricted by current to folded bits + newperms &= item.NextPermissions; + + if ((newperms & (uint)PermissionMask.Copy) == 0) + mask &= ~((uint)PermissionMask.FoldedCopy); + if ((newperms & (uint)PermissionMask.Transfer) == 0) + mask &= ~((uint)PermissionMask.FoldedTransfer); + if ((newperms & (uint)PermissionMask.Export) == 0) + mask &= ~((uint)PermissionMask.FoldedExport); + } return mask; } -- cgit v1.1 From 3c43cdbbcc2687e2f5d4319c5c3c3cbad4930fab Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 1 May 2017 16:42:47 -0700 Subject: Added some indirect transfer tests -- Take Copy by another avatar --- OpenSim/Tests/Permissions/Common.cs | 40 ++++-- OpenSim/Tests/Permissions/DirectTransferTests.cs | 10 -- OpenSim/Tests/Permissions/IndirectTransferTests.cs | 137 +++++++++++++++++++++ 3 files changed, 169 insertions(+), 18 deletions(-) create mode 100644 OpenSim/Tests/Permissions/IndirectTransferTests.cs diff --git a/OpenSim/Tests/Permissions/Common.cs b/OpenSim/Tests/Permissions/Common.cs index 84dadf2..e62991b 100644 --- a/OpenSim/Tests/Permissions/Common.cs +++ b/OpenSim/Tests/Permissions/Common.cs @@ -1,6 +1,31 @@ -using System; +/* + * 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 System.Threading; using Nini.Config; using NUnit.Framework; @@ -10,7 +35,6 @@ using OpenSim.Region.Framework.Scenes; using OpenSim.Region.CoreModules.World.Permissions; using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer; using OpenSim.Region.CoreModules.Framework.InventoryAccess; -using OpenSim.Region.Framework.Scenes.Serialization; using OpenSim.Services.Interfaces; using OpenSim.Tests.Common; using PermissionMask = OpenSim.Framework.PermissionMask; @@ -67,7 +91,7 @@ namespace OpenSim.Tests.Permissions /// - 6 simple boxes inworld belonging to A0 and with Next Owner perms: /// C, CT, MC, MCT, MT, T /// - Copies of all of these boxes in A0's inventory in the Objects folder - /// - One additional box in A0's inventory which is a copy of MCT, but + /// - One additional box inworld and in A0's inventory which is a copy of MCT, but /// with C removed in inventory. This one is called MCT-C /// private void SetUpBasicEnvironment() @@ -140,7 +164,7 @@ namespace OpenSim.Tests.Permissions PrintPerms(box); AssertPermissions(nextOwnerPerms, (PermissionMask)box.RootPart.NextOwnerMask, box.OwnerID.ToString().Substring(34) + " : " + box.Name); - TakeCopyToInventory(box); + TakeCopyToInventory(0, box); } @@ -218,14 +242,14 @@ namespace OpenSim.Tests.Permissions return so; } - public void TakeCopyToInventory(SceneObjectGroup sog) + public void TakeCopyToInventory(int userIndex, SceneObjectGroup sog) { - InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, sog.OwnerID, "Objects"); + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(m_Scene.InventoryService, m_Avatars[userIndex].UUID, "Objects"); Assert.That(objsFolder, Is.Not.Null); List localIds = new List(); localIds.Add(sog.LocalId); // This is an async operation - m_Scene.DeRezObjects((IClientAPI)m_Avatars[0].ClientView, localIds, sog.UUID, DeRezAction.TakeCopy, objsFolder.ID); + m_Scene.DeRezObjects((IClientAPI)m_Avatars[userIndex].ClientView, localIds, m_Avatars[userIndex].UUID, DeRezAction.TakeCopy, objsFolder.ID); } public InventoryItemBase GetItemFromInventory(UUID userID, string folderName, string itemName) diff --git a/OpenSim/Tests/Permissions/DirectTransferTests.cs b/OpenSim/Tests/Permissions/DirectTransferTests.cs index 3ca711a..3b711a1 100644 --- a/OpenSim/Tests/Permissions/DirectTransferTests.cs +++ b/OpenSim/Tests/Permissions/DirectTransferTests.cs @@ -25,20 +25,10 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Threading; -using Nini.Config; using NUnit.Framework; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Framework.Scenes; -using OpenSim.Region.CoreModules.World.Permissions; -using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer; -using OpenSim.Region.CoreModules.Framework.InventoryAccess; -using OpenSim.Region.Framework.Scenes.Serialization; -using OpenSim.Services.Interfaces; using OpenSim.Tests.Common; using PermissionMask = OpenSim.Framework.PermissionMask; diff --git a/OpenSim/Tests/Permissions/IndirectTransferTests.cs b/OpenSim/Tests/Permissions/IndirectTransferTests.cs new file mode 100644 index 0000000..6a6ba2f --- /dev/null +++ b/OpenSim/Tests/Permissions/IndirectTransferTests.cs @@ -0,0 +1,137 @@ +/* + * 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.Collections.Generic; +using System.Threading; +using NUnit.Framework; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Tests.Common; +using PermissionMask = OpenSim.Framework.PermissionMask; + +namespace OpenSim.Tests.Permissions +{ + /// + /// Basic scene object tests (create, read and delete but not update). + /// + [TestFixture] + public class IndirectTransferTests + { + + [SetUp] + public void SetUp() + { + // Delete everything in A2 and A3's Objects folders from previous tests + for (int i = 1; i < 3; i++) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(Common.TheScene.InventoryService, Common.TheAvatars[i].UUID, "Objects"); + Assert.That(objsFolder, Is.Not.Null); + + List items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); + List ids = new List(); + foreach (InventoryItemBase it in items) + ids.Add(it.ID); + + Common.TheScene.InventoryService.DeleteItems(Common.TheAvatars[i].UUID, ids); + items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); + Assert.That(items.Count, Is.EqualTo(0), "A" + (i+1)); + } + } + + /// + /// Test giving simple objecta with various combinations of next owner perms. + /// + [Test] + public void SimpleTakeCopy() + { + TestHelpers.InMethod(); + + // The Objects folder of A2 + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(Common.TheScene.InventoryService, Common.TheAvatars[1].UUID, "Objects"); + + // C, CT, MC, MCT, MT, T + string[] names = new string[6] { "Box C", "Box CT", "Box MC", "Box MCT", "Box MT", "Box T" }; + PermissionMask[] perms = new PermissionMask[6] { + PermissionMask.Copy, + PermissionMask.Copy | PermissionMask.Transfer, + PermissionMask.Modify | PermissionMask.Copy, + PermissionMask.Modify | PermissionMask.Copy | PermissionMask.Transfer, + PermissionMask.Modify | PermissionMask.Transfer, + PermissionMask.Transfer + }; + + // Try A2 takes copies of objects that cannot be copied. + for (int i = 0; i < 6; i++) + TakeOneBox(Common.TheScene.GetSceneObjectGroups(), names[i], perms[i]); + Thread.Sleep(5000); + + List items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[1].UUID, objsFolder.ID); + Assert.That(items.Count, Is.EqualTo(0)); + + // A1 makes the objects copyable + for (int i = 0; i < 6; i++) + MakeCopyable(Common.TheScene.GetSceneObjectGroups(), names[i]); + + // Try A2 takes copies of objects that can be copied. + for (int i = 0; i < 6; i++) + TakeOneBox(Common.TheScene.GetSceneObjectGroups(), names[i], perms[i]); + Thread.Sleep(5000); + + items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[1].UUID, objsFolder.ID); + Assert.That(items.Count, Is.EqualTo(6)); + + for (int i = 0; i < 6; i++) + { + InventoryItemBase item = Common.TheInstance.GetItemFromInventory(Common.TheAvatars[1].UUID, "Objects", names[i]); + Assert.That(item, Is.Not.Null); + Common.TheInstance.AssertPermissions(perms[i], (PermissionMask)item.BasePermissions, Common.TheInstance.IdStr(item)); + } + } + + private void TakeOneBox(List objs, string name, PermissionMask mask) + { + SceneObjectGroup box = objs.Find(sog => sog.Name == name && sog.OwnerID == Common.TheAvatars[0].UUID); + Assert.That(box, Is.Not.Null, name); + + // A2's inventory (index 1) + Common.TheInstance.TakeCopyToInventory(1, box); + } + + private void MakeCopyable(List objs, string name) + { + SceneObjectGroup box = objs.Find(sog => sog.Name == name && sog.OwnerID == Common.TheAvatars[0].UUID); + Assert.That(box, Is.Not.Null, name); + + // field = 8 is Everyone + // set = 1 means add the permission; set = 0 means remove permission + Common.TheScene.HandleObjectPermissionsUpdate((IClientAPI)Common.TheAvatars[0].ClientView, Common.TheAvatars[0].UUID, + Common.TheAvatars[0].ControllingClient.SessionId, 8, box.LocalId, (uint)PermissionMask.Copy, 1); + Common.TheInstance.PrintPerms(box); + } + } +} \ No newline at end of file -- cgit v1.1 From 9c82ff76730c9eff80cace1ddece0148d8d0a7ee Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 1 May 2017 16:49:42 -0700 Subject: Shuffle some code around --- OpenSim/Tests/Permissions/Common.cs | 20 ++++++++++++++++++++ OpenSim/Tests/Permissions/DirectTransferTests.cs | 1 + OpenSim/Tests/Permissions/IndirectTransferTests.cs | 16 +--------------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/OpenSim/Tests/Permissions/Common.cs b/OpenSim/Tests/Permissions/Common.cs index e62991b..f93c120 100644 --- a/OpenSim/Tests/Permissions/Common.cs +++ b/OpenSim/Tests/Permissions/Common.cs @@ -286,6 +286,26 @@ namespace OpenSim.Tests.Permissions return clone; } + public void DeleteObjectsFolders() + { + // Delete everything in A2 and A3's Objects folders, so we can restart + for (int i = 1; i < 3; i++) + { + InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(Common.TheScene.InventoryService, Common.TheAvatars[i].UUID, "Objects"); + Assert.That(objsFolder, Is.Not.Null); + + List items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); + List ids = new List(); + foreach (InventoryItemBase it in items) + ids.Add(it.ID); + + Common.TheScene.InventoryService.DeleteItems(Common.TheAvatars[i].UUID, ids); + items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); + Assert.That(items.Count, Is.EqualTo(0), "A" + (i + 1)); + } + + } + public string IdStr(InventoryItemBase item) { return item.Owner.ToString().Substring(34) + " : " + item.Name; diff --git a/OpenSim/Tests/Permissions/DirectTransferTests.cs b/OpenSim/Tests/Permissions/DirectTransferTests.cs index 3b711a1..c68bbdf 100644 --- a/OpenSim/Tests/Permissions/DirectTransferTests.cs +++ b/OpenSim/Tests/Permissions/DirectTransferTests.cs @@ -44,6 +44,7 @@ namespace OpenSim.Tests.Permissions [SetUp] public void SetUp() { + Common.TheInstance.DeleteObjectsFolders(); } /// diff --git a/OpenSim/Tests/Permissions/IndirectTransferTests.cs b/OpenSim/Tests/Permissions/IndirectTransferTests.cs index 6a6ba2f..7d8027f 100644 --- a/OpenSim/Tests/Permissions/IndirectTransferTests.cs +++ b/OpenSim/Tests/Permissions/IndirectTransferTests.cs @@ -46,21 +46,7 @@ namespace OpenSim.Tests.Permissions [SetUp] public void SetUp() { - // Delete everything in A2 and A3's Objects folders from previous tests - for (int i = 1; i < 3; i++) - { - InventoryFolderBase objsFolder = UserInventoryHelpers.GetInventoryFolder(Common.TheScene.InventoryService, Common.TheAvatars[i].UUID, "Objects"); - Assert.That(objsFolder, Is.Not.Null); - - List items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); - List ids = new List(); - foreach (InventoryItemBase it in items) - ids.Add(it.ID); - - Common.TheScene.InventoryService.DeleteItems(Common.TheAvatars[i].UUID, ids); - items = Common.TheScene.InventoryService.GetFolderItems(Common.TheAvatars[i].UUID, objsFolder.ID); - Assert.That(items.Count, Is.EqualTo(0), "A" + (i+1)); - } + Common.TheInstance.DeleteObjectsFolders(); } /// -- cgit v1.1 From a890ea312b56821c88bec69cfd36b799733f7a41 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 11:23:41 +0100 Subject: disable LSL http listener (llRequestURL/llRequestSecureURL) if ExternalHostNameForLSL is not set in cofiguration or does not resolve --- .../CoreModules/Scripting/LSLHttp/UrlModule.cs | 69 +++++++++++++++++++--- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index 311deab..895020c 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs @@ -26,15 +26,15 @@ */ using System; -using System.Threading; using System.Collections.Generic; using System.Collections; using System.Reflection; +using System.Net; +using System.Net.Sockets; using log4net; using Mono.Addins; using Nini.Config; using OpenMetaverse; -using OpenSim.Framework; using OpenSim.Framework.Servers; using OpenSim.Framework.Servers.HttpServer; using OpenSim.Region.Framework.Interfaces; @@ -89,6 +89,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp protected Dictionary m_UrlMap = new Dictionary(); + protected bool m_enabled = false; + protected string m_ErrorStr; protected uint m_HttpsPort = 0; protected IHttpServer m_HttpServer = null; protected IHttpServer m_HttpsServer = null; @@ -118,6 +120,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp public void Initialise(IConfigSource config) { IConfig networkConfig = config.Configs["Network"]; + m_enabled = false; if (networkConfig != null) { @@ -128,9 +131,47 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp if (ssl_enabled) m_HttpsPort = (uint)config.Configs["Network"].GetInt("https_port", (int)m_HttpsPort); } + else + { + m_ErrorStr = "[Network] configuration missing, HTTP listener for LSL disabled"; + m_log.Warn("[URL MODULE]: " + m_ErrorStr); + return; + } + + if (String.IsNullOrWhiteSpace(ExternalHostNameForLSL)) + { + m_ErrorStr = "ExternalHostNameForLSL not defined in configuration, HTTP listener for LSL disabled"; + m_log.Warn("[URL MODULE]: " + m_ErrorStr); + return; + } + + IPAddress ia = null; + try + { + foreach (IPAddress Adr in Dns.GetHostAddresses(ExternalHostNameForLSL)) + { + if (Adr.AddressFamily == AddressFamily.InterNetwork || + Adr.AddressFamily == AddressFamily.InterNetworkV6) // ipv6 will most likely smoke + { + ia = Adr; + break; + } + } + } + catch + { + ia = null; + } - if (ExternalHostNameForLSL == null) - ExternalHostNameForLSL = System.Environment.MachineName; + if (ia == null) + { + m_ErrorStr = "Could not resolve ExternalHostNameForLSL, HTTP listener for LSL disabled"; + m_log.Warn("[URL MODULE]: " + m_ErrorStr); + return; + } + + m_enabled = true; + m_ErrorStr = String.Empty; IConfig llFunctionsConfig = config.Configs["LL-Functions"]; @@ -146,7 +187,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp public void AddRegion(Scene scene) { - if (m_HttpServer == null) + if (m_enabled && m_HttpServer == null) { // There can only be one // @@ -197,11 +238,18 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp { UUID urlcode = UUID.Random(); + if(!m_enabled) + { + engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", m_ErrorStr }); + return urlcode; + } + lock (m_UrlMap) { if (m_UrlMap.Count >= TotalUrls) { - engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); + engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", + "Too many URLs already open" }); return urlcode; } string url = "http://" + ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString() + "/"; @@ -243,6 +291,12 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp { UUID urlcode = UUID.Random(); + if(!m_enabled) + { + engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", m_ErrorStr }); + return urlcode; + } + if (m_HttpsServer == null) { engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); @@ -253,7 +307,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp { if (m_UrlMap.Count >= TotalUrls) { - engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); + engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", + "Too many URLs already open" }); return urlcode; } string url = "https://" + ExternalHostNameForLSL + ":" + m_HttpsServer.Port.ToString() + "/lslhttps/" + urlcode.ToString() + "/"; -- cgit v1.1 From 6c2f8176aea95297bbce7f6d2d0cba178b39ae5b Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 11:39:29 +0100 Subject: change opensim.ini.example setting of ExternalHostNameForLSL to a defualt --- bin/OpenSim.ini.example | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index b0777d7..da4cbe1 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -52,8 +52,11 @@ ; name and use default public port 9000. The private port is not used ; in the configuration for a standalone. - ;# {BaseURL} {} {BaseURL} {"http://example.com" "http://127.0.0.1"} "http://127.0.0.1" - BaseURL = http://127.0.0.1 + ;# {BaseHostname} {} {BaseHostname} {"example.com" "127.0.0.1"} "127.0.0.1" + BaseHostname = "127.0.0.1" + + ;# {BaseURL} {} {BaseURL} {"http://${Const|BaseHostname} https://${Const|BaseHostname}} "http://${Const|BaseHostname}" + BaseURL = http://${Const|BaseHostname} ;# {PublicPort} {} {PublicPort} {8002 9000} "8002" PublicPort = "8002" @@ -525,10 +528,9 @@ ;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {} ;; Hostname to use in llRequestURL/llRequestSecureURL - ;; if not defined - default machine name is being used - ;; (on Windows this mean NETBIOS name - useably only inside local network) - ; ExternalHostNameForLSL = "127.0.0.1" - + ;; if not defined - llRequestURL/llRequestSecureURL are disabled + ExternalHostNameForLSL = ${Const|BaseHostname} + ;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim ;; What is reported as the "X-Secondlife-Shard" ;; Defaults to the user server url if not set -- cgit v1.1 From a18ee3b6b354665d72b3f307bd6e52a8da230b4d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 12:35:06 +0100 Subject: fix LSL_ApiHttpTests --- .../Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs index 4dc8fc6..241a24d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiHttpTests.cs @@ -87,17 +87,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests uint port = 9999; MainServer.RemoveHttpServer(port); + m_engine = new MockScriptEngine(); + m_urlModule = new UrlModule(); + + IConfigSource config = new IniConfigSource(); + config.AddConfig("Network"); + config.Configs["Network"].Set("ExternalHostNameForLSL", "127.0.0.1"); + m_scene = new SceneHelpers().SetupScene(); + BaseHttpServer server = new BaseHttpServer(port, false, 0, ""); MainServer.AddHttpServer(server); MainServer.Instance = server; server.Start(); - m_engine = new MockScriptEngine(); - m_urlModule = new UrlModule(); - - m_scene = new SceneHelpers().SetupScene(); - SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine, m_urlModule); + SceneHelpers.SetupSceneModules(m_scene, config, m_engine, m_urlModule); SceneObjectGroup so = SceneHelpers.AddSceneObject(m_scene); m_scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, so.RootPart); -- cgit v1.1 From 55f7986b449633477467f7fdda95873b4a00f8fd Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 13:14:26 +0100 Subject: fix some comments --- bin/OpenSim.ini.example | 2 +- bin/OpenSimDefaults.ini | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index da4cbe1..021e444 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -55,7 +55,7 @@ ;# {BaseHostname} {} {BaseHostname} {"example.com" "127.0.0.1"} "127.0.0.1" BaseHostname = "127.0.0.1" - ;# {BaseURL} {} {BaseURL} {"http://${Const|BaseHostname} https://${Const|BaseHostname}} "http://${Const|BaseHostname}" + ;# {BaseURL} {} {BaseURL} {"http://${Const|BaseHostname}} "http://${Const|BaseHostname}" BaseURL = http://${Const|BaseHostname} ;# {PublicPort} {} {PublicPort} {8002 9000} "8002" diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index f70f7db..89954ef 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -600,8 +600,7 @@ ; HttpBodyMaxLenMAX=16384 ; Hostname to use in llRequestURL/llRequestSecureURL - ; if not defined - default machine name is being used - ; (on Windows this mean NETBIOS name - useably only inside local network) + ; if not defined - llRequestURL/llRequestSecureURL are disabled ; ExternalHostNameForLSL=127.0.0.1 ; Disallow the following address ranges for user scripting calls (e.g. llHttpRequest()) -- cgit v1.1 From 710677cdc6afef7f67f700bf4efcf145d23b85d5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 15:16:56 +0100 Subject: mantis 8135 --- .../Scripting/WorldComm/WorldCommModule.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs index 660e03f..a5203ea 100644 --- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs @@ -113,7 +113,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm // wrap this in a try block so that defaults will work if // the config file doesn't specify otherwise. int maxlisteners = 1000; - int maxhandles = 64; + int maxhandles = 65; try { m_whisperdistance = config.Configs["Chat"].GetInt( @@ -130,8 +130,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm catch (Exception) { } - if (maxlisteners < 1) maxlisteners = int.MaxValue; - if (maxhandles < 1) maxhandles = int.MaxValue; + + if (maxlisteners < 1) + maxlisteners = int.MaxValue; + if (maxhandles < 1) + maxhandles = int.MaxValue; + + if (maxlisteners < maxhandles) + maxlisteners = maxhandles; + m_listenerManager = new ListenerManager(maxlisteners, maxhandles); m_pendingQ = new Queue(); m_pending = Queue.Synchronized(m_pendingQ); @@ -605,11 +612,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm li.GetHandle().Equals(handle)) { lis.Value.Remove(li); + m_curlisteners--; if (lis.Value.Count == 0) - { - m_listeners.Remove(lis.Key); - m_curlisteners--; - } + m_listeners.Remove(lis.Key); // bailing of loop so this does not smoke // there should be only one, so we bail out early return; } @@ -718,6 +723,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm } } + if(handles.Count >= m_maxhandles) + return -1; + // Note: 0 is NOT a valid handle for llListen() to return for (int i = 1; i <= m_maxhandles; i++) { -- cgit v1.1 From 1bfe9354e375b77318dde4222e7fa01937d4c5b8 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 15:45:33 +0100 Subject: coment out optional fields that should be edited and uncomented if needed --- bin/OpenSimDefaults.ini | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 89954ef..21ff8d6 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -1898,7 +1898,8 @@ ; regex specifying for which regions concierge service is desired; if ; empty, then for all - regions = "^MeetingSpace-" + ;regions = "^MeetingSpace-" + regions = "" ; for each region that matches the regions regexp you can provide ; (optionally) a welcome template using format substitution: @@ -1906,14 +1907,14 @@ ; {1} is replaced with the name of the region ; {2} is replaced with the name of the concierge (whoami variable above) - welcomes = /path/to/welcome/template/directory + ;welcomes = /path/to/welcome/template/directory ; Concierge can send attendee lists to an event broker whenever an ; avatar enters or leaves a concierged region. the URL is subject ; to format substitution: ; {0} is replaced with the region's name ; {1} is replaced with the region's UUID - broker = "http://broker.place.com/{1}" + ;broker = "http://broker.place.com/{1}" [MRM] -- cgit v1.1 From 02b43f06d1965f6492fdae692373d0d460db881e Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 2 May 2017 20:45:01 +0100 Subject: recover a lost trim in permissions modules names parsing --- OpenSim/Region/Application/OpenSimBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 168836c..0862fcf 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -237,7 +237,7 @@ namespace OpenSim string permissionModules = Util.GetConfigVarFromSections(Config, "permissionmodules", new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule"); - m_permsModules = new List(permissionModules.Split(',')); + m_permsModules = new List(permissionModules.Split(',').Select(m => m.Trim())); managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty); managedStatsPassword = startupConfig.GetString("ManagedStatsRemoteFetchPassword", String.Empty); -- cgit v1.1