Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -822,6 +825,59 @@ 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 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.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))
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.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"))
return true;
if (part.ParentGroup.Name.ToUpper().Contains("SORTER") && isFullPerm(part.ParentGroup.GetEffectivePermissions(false)))
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)
{
Expand Down Expand Up @@ -869,6 +925,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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,12 @@ public ArchiveWriteRequestExecution(
protected internal void ReceivedAllAssets(
ICollection<UUID> assetsFoundUuids, ICollection<UUID> 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",
Expand Down
14 changes: 11 additions & 3 deletions OpenSim/Region/Framework/Scenes/UuidGatherer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,15 @@ public void GatherAssetUuids(SceneObjectGroup sceneObject, IDictionary<UUID, int
foreach (TaskInventoryItem tii in taskDictionary.Values)
{
//m_log.DebugFormat("[ARCHIVER]: Analysing item asset type {0}", tii.Type);

if ((tii.AssetID != UUID.Zero) && (!assetUuids.ContainsKey(tii.AssetID)))
GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
try
{
if ((tii.AssetID != UUID.Zero) && (!assetUuids.ContainsKey(tii.AssetID)))
GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
}
catch (Exception e)
{
// can't fetch UUIDs from this item, catch the error and move on to the next.
}
}
}
catch (Exception e)
Expand Down Expand Up @@ -263,6 +269,8 @@ protected void GetWearableAssetUuids(UUID wearableAssetUuid, IDictionary<UUID, i
{
AssetBase assetBase = GetAsset(wearableAssetUuid);
//m_log.Debug(new System.Text.ASCIIEncoding().GetString(bodypartAsset.Data));
if (assetBase == null) return; // there are no UUIDs in this to find.

OpenMetaverse.Assets.AssetWearable wearableAsset
= new OpenMetaverse.Assets.AssetBodypart(wearableAssetUuid, assetBase.Data);
wearableAsset.Decode();
Expand Down