From 57ec7198947284309be05ac1373318012cf39c9f Mon Sep 17 00:00:00 2001 From: Paul Whittemore Date: Mon, 25 Mar 2019 01:42:46 -0300 Subject: [PATCH 1/6] Support whitelisted items in OAR filters. This is a specific change for InWorldz exports to avoid filtering out LiteRezzer scripts from any objects grid-wide without whitelisting a creator user. Not sure if this belongs in Halcyon itself or is just an IW feature, but it's being used in all export OARs now. --- .../World/Archiver/ArchiveReadRequest.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 2408f377..ea4ff327 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -822,6 +822,16 @@ private bool FilterItem(SceneObjectPart part, TaskInventoryItem item, UUID owner return filtered; } + // Special-case overrides for common items that should be allowed but are not normally allowed by creator or owner + private bool isWhitelistedItem(TaskInventoryItem item) + { + if (item.Name.StartsWith("LiteRezzer", StringComparison.InvariantCultureIgnoreCase)) + return true; + + // No other special cases. + return false; + } + // depth==0 when it's the top-level object (no need to reserialize changes as asset) private bool FilterContents(SceneObjectPart part, UUID ownerID, int depth) { @@ -869,6 +879,13 @@ private bool FilterContents(SceneObjectPart part, UUID ownerID, int depth) m_keptItem++; } else + if (isWhitelistedItem(item)) + { + if (m_debugOars >= 2) + m_log.InfoFormat("[ARCHIVER]: Item '{0}' in part '{1}' by creator {2} is a whitelisted item.", item.Name, part.Name, item.CreatorID); + m_keptItem++; + } + else if (MustReplaceByAsset(item.AssetID, ownerID, item.CreatorID)) { if (m_debugOars >= 1) From 35f4d86f21106cd3599b65031a3be8439ef3650a Mon Sep 17 00:00:00 2001 From: Paul Whittemore Date: Wed, 24 Apr 2019 21:45:51 -0300 Subject: [PATCH 2/6] Supports whitelisted objects (as well as items) and Zauber's exceptions. InWorldz-specific changes for OAR exports, although the pattern could be used in general. --- .../World/Archiver/ArchiveReadRequest.cs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index ea4ff327..1bcfa58b 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -710,6 +710,9 @@ private bool FilterPart(SceneObjectPart part, UUID ownerID) { bool filtered = false; + if (isWhitelistedObject(part)) + return false; + if (m_allowUserReassignment) { if (part.OwnerID != ownerID) @@ -823,11 +826,46 @@ private bool FilterItem(SceneObjectPart part, TaskInventoryItem item, UUID owner } // Special-case overrides for common items that should be allowed but are not normally allowed by creator or owner + private UUID ZAUBER = new UUID("7b772b49-0dde-4e08-a8d7-6c26e09a6842"); + const uint FULL_PERM = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify); + private bool isFullPerm(uint perms) + { + return ((perms & FULL_PERM) == FULL_PERM); + } private bool isWhitelistedItem(TaskInventoryItem item) { if (item.Name.StartsWith("LiteRezzer", StringComparison.InvariantCultureIgnoreCase)) return true; + if (item.CreatorID == ZAUBER) + { + if (item.Name.ToUpper().Contains("OPTI")) + return true; + if (item.Description.ToUpper().Contains("OPTI")) + return true; + if (item.Name.ToUpper().Contains("SORTER") && isFullPerm(item.CurrentPermissions)) + return true; + } + + // No other special cases. + return false; + } + + private bool isWhitelistedObject(SceneObjectPart part) + { + if (part.Name.StartsWith("LiteRezzer", StringComparison.InvariantCultureIgnoreCase)) + return true; + + if (part.CreatorID == ZAUBER) + { + if (part.Name.ToUpper().Contains("OPTI")) + return true; + if (part.Description.ToUpper().Contains("OPTI")) + return true; + if (part.ParentGroup.Name.ToUpper().Contains("SORTER") && isFullPerm(part.ParentGroup.GetEffectivePermissions(false))) + return true; + } + // No other special cases. return false; } From 3dde879b219a1cfbdc50ab46ac9fe9185bc5c2da Mon Sep 17 00:00:00 2001 From: Paul Whittemore Date: Wed, 1 May 2019 01:33:25 -0300 Subject: [PATCH 3/6] Whitelist Zauber's "window beam" too. --- OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 1bcfa58b..b637249e 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -841,6 +841,8 @@ private bool isWhitelistedItem(TaskInventoryItem item) { if (item.Name.ToUpper().Contains("OPTI")) return true; + if (item.Name.ToLower().Trim().Equals("window beam")) + return true; if (item.Description.ToUpper().Contains("OPTI")) return true; if (item.Name.ToUpper().Contains("SORTER") && isFullPerm(item.CurrentPermissions)) From bac40ba343af091d3fe3947e26997ce29e5584a3 Mon Sep 17 00:00:00 2001 From: Paul Whittemore Date: Sun, 23 Jun 2019 16:17:09 -0300 Subject: [PATCH 4/6] Ignore the "could not find asset" messages since they were normal. Not found due to the fact that all assets are loaded and not filtered until objects are filtered since assets don't have creator metadata. --- .../CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs index 4b04bf24..3cd2622f 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs @@ -80,10 +80,12 @@ public ArchiveWriteRequestExecution( protected internal void ReceivedAllAssets( ICollection assetsFoundUuids, ICollection assetsNotFoundUuids) { + /* foreach (UUID uuid in assetsNotFoundUuids) { m_log.DebugFormat("[ARCHIVER]: Could not find asset {0}", uuid); } + */ m_log.InfoFormat( "[ARCHIVER]: Received {0} of {1} assets requested", From c62e15b090f6cd53a3324235147d4bebfe8ef675 Mon Sep 17 00:00:00 2001 From: Paul Whittemore Date: Sun, 23 Jun 2019 16:17:54 -0300 Subject: [PATCH 5/6] !! An error processing a Contents item now skips only that item. --- OpenSim/Region/Framework/Scenes/UuidGatherer.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index 3f776630..170b2ad7 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs @@ -174,9 +174,15 @@ public void GatherAssetUuids(SceneObjectGroup sceneObject, IDictionary Date: Sun, 23 Jun 2019 23:16:48 -0300 Subject: [PATCH 6/6] Fixed inconsistency between isWhitelistedObject and isWhitelistedItem. --- .../CoreModules/World/Archiver/ArchiveReadRequest.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index b637249e..1195ab97 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -839,10 +839,12 @@ private bool isWhitelistedItem(TaskInventoryItem item) if (item.CreatorID == ZAUBER) { - if (item.Name.ToUpper().Contains("OPTI")) - return true; if (item.Name.ToLower().Trim().Equals("window beam")) return true; + if (item.Name.ToLower().Trim().Equals("shutter")) + return true; + if (item.Name.ToUpper().Contains("OPTI")) + return true; if (item.Description.ToUpper().Contains("OPTI")) return true; if (item.Name.ToUpper().Contains("SORTER") && isFullPerm(item.CurrentPermissions)) @@ -860,6 +862,10 @@ private bool isWhitelistedObject(SceneObjectPart part) if (part.CreatorID == ZAUBER) { + if (part.Name.ToLower().Equals("window beam")) + return true; + if (part.Name.ToLower().Equals("shutter")) + return true; if (part.Name.ToUpper().Contains("OPTI")) return true; if (part.Description.ToUpper().Contains("OPTI"))