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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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 --- .../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 +++++++++++++--------- 5 files changed, 65 insertions(+), 58 deletions(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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 --- .../Framework/InventoryAccess/InventoryAccessModule.cs | 17 +++++++---------- .../CoreModules/World/Objects/BuySell/BuySellModule.cs | 18 ++++++------------ OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 12 +++++++----- 3 files changed, 20 insertions(+), 27 deletions(-) (limited to 'OpenSim/Region') 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 --- .../Framework/InventoryAccess/InventoryAccessModule.cs | 15 ++------------- .../CoreModules/World/Objects/BuySell/BuySellModule.cs | 4 ++-- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 6 ++++-- 3 files changed, 8 insertions(+), 17 deletions(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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(+) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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 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(-) (limited to 'OpenSim/Region') 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