*Patch as supplied in Mantis #0001705 by melanie. Fixes: Locked prims allow *any avatar* to deposit scripts in them, regardless of permissions

0.6.0-stable
mingchen 2008-07-09 19:53:22 +00:00
parent 96b64d6973
commit 817a0fa40c
2 changed files with 30 additions and 18 deletions

View File

@ -1166,6 +1166,12 @@ namespace OpenSim.Region.Environment.Scenes
if (part != null) if (part != null)
{ {
if (part.OwnerID != remoteClient.AgentId)
return;
if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
return;
TaskInventoryItem currentItem = part.GetInventoryItem(itemID); TaskInventoryItem currentItem = part.GetInventoryItem(itemID);
if (currentItem == null) if (currentItem == null)
@ -1256,17 +1262,20 @@ namespace OpenSim.Region.Environment.Scenes
SceneObjectPart part = GetSceneObjectPart(localID); SceneObjectPart part = GetSceneObjectPart(localID);
if (part != null) if (part != null)
{ {
if (ExternalChecks.ExternalChecksCanRunScript(item.ID, part.UUID, remoteClient.AgentId)) if (part.OwnerID != remoteClient.AgentId)
{ return;
part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
// TODO: set this to "true" when scripts in inventory have persistent state to fire on_rez
part.CreateScriptInstance(copyID, 0, false);
part.GetProperties(remoteClient);
// m_log.InfoFormat("[PRIMINVENTORY]: " + if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
// "Rezzed script {0} into prim local ID {1} for user {2}", return;
// item.inventoryName, localID, remoteClient.Name);
} part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
// TODO: set this to "true" when scripts in inventory have persistent state to fire on_rez
part.CreateScriptInstance(copyID, 0, false);
// m_log.InfoFormat("[PRIMINVENTORY]: " +
// "Rezzed script {0} into prim local ID {1} for user {2}",
// item.inventoryName, localID, remoteClient.Name);
part.GetProperties(remoteClient);
} }
else else
{ {
@ -1291,6 +1300,12 @@ namespace OpenSim.Region.Environment.Scenes
if (part == null) if (part == null)
return; return;
if (part.OwnerID != remoteClient.AgentId)
return;
if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
return;
AssetBase asset = CreateAsset(itemBase.Name, itemBase.Description, (sbyte)itemBase.AssetType, Encoding.ASCII.GetBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}")); AssetBase asset = CreateAsset(itemBase.Name, itemBase.Description, (sbyte)itemBase.AssetType, Encoding.ASCII.GetBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"));
AssetCache.AddAsset(asset); AssetCache.AddAsset(asset);
@ -1319,10 +1334,7 @@ namespace OpenSim.Region.Environment.Scenes
part.AddInventoryItem(taskItem); part.AddInventoryItem(taskItem);
part.GetProperties(remoteClient); part.GetProperties(remoteClient);
if (ExternalChecks.ExternalChecksCanRunScript(taskItem.AssetID, part.UUID, remoteClient.AgentId)) part.CreateScriptInstance(taskItem, 0, false);
{
part.CreateScriptInstance(taskItem, 0, false);
}
} }
} }
@ -1418,10 +1430,7 @@ namespace OpenSim.Region.Environment.Scenes
if (running > 0) if (running > 0)
{ {
if (ExternalChecks.ExternalChecksCanRunScript(destTaskItem.AssetID, destPart.UUID, destPart.OwnerID)) destPart.CreateScriptInstance(destTaskItem, 0, false);
{
destPart.CreateScriptInstance(destTaskItem, 0, false);
}
} }
ScenePresence avatar; ScenePresence avatar;

View File

@ -162,6 +162,9 @@ namespace OpenSim.Region.Environment.Scenes
// "[PRIM INVENTORY]: " + // "[PRIM INVENTORY]: " +
// "Starting script {0}, {1} in prim {2}, {3}", // "Starting script {0}, {1} in prim {2}, {3}",
// item.Name, item.ItemID, Name, UUID); // item.Name, item.ItemID, Name, UUID);
if (!m_parentGroup.Scene.ExternalChecks.ExternalChecksCanRunScript(item.ItemID, UUID, item.OwnerID))
return;
AddFlag(LLObject.ObjectFlags.Scripted); AddFlag(LLObject.ObjectFlags.Scripted);
if (!((m_parentGroup.Scene.RegionInfo.EstateSettings.regionFlags & Simulator.RegionFlags.SkipScripts) == Simulator.RegionFlags.SkipScripts)) if (!((m_parentGroup.Scene.RegionInfo.EstateSettings.regionFlags & Simulator.RegionFlags.SkipScripts) == Simulator.RegionFlags.SkipScripts))