From 9f932a42057b4a9cd4517c90007a7c31c98277c6 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 5 Jun 2009 09:47:42 +0000 Subject: Thank you, thomax, for a patch to provide finer-grained access control to scripting. Fixes Mantis #2862 --- OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs | 2 +- OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs | 3 ++- OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs | 10 +++++++++- OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region/ScriptEngine') diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 9897267..15d6c2c 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -153,7 +153,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine // Compile (We assume LSL) CompiledScriptFile = LSLCompiler.PerformScriptCompile(Script, - assetID.ToString()); + assetID.ToString(), taskInventoryItem.OwnerID); if (presence != null && (!postOnRez)) presence.ControllingClient.SendAgentAlertMessage( diff --git a/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs index 1bba878..2fd819d 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs @@ -27,13 +27,14 @@ using System; using System.Collections.Generic; +using OpenMetaverse; using Nini.Config; namespace OpenSim.Region.ScriptEngine.Interfaces { public interface ICompiler { - string PerformScriptCompile(string source, string asset); + string PerformScriptCompile(string source, string asset, UUID ownerID); string[] GetWarnings(); Dictionary, KeyValuePair> LineMap(); diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index fcb3339..911da5b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -37,6 +37,7 @@ using Microsoft.VisualBasic; using log4net; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.ScriptEngine.Interfaces; +using OpenMetaverse; namespace OpenSim.Region.ScriptEngine.Shared.CodeTools { @@ -263,7 +264,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools /// /// LSL script /// Filename to .dll assembly - public string PerformScriptCompile(string Script, string asset) + public string PerformScriptCompile(string Script, string asset, UUID ownerUUID) { m_positionMap = null; m_warnings.Clear(); @@ -341,6 +342,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools throw new Exception(errtext); } + if(m_scriptEngine.World.Permissions.CanCompileScript(ownerUUID, (int)l) == false) { + // Not allowed to compile to this language! + string errtext = String.Empty; + errtext += ownerUUID + " is not in list of allowed users for this scripting language. Script will not be executed!"; + throw new Exception(errtext); + } + string compileScript = Script; if (l == enumCompileType.lsl) diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index cfabda1..34f8145 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -579,7 +579,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine lock (m_AddingAssemblies) { assembly = m_Compiler.PerformScriptCompile(script, - assetID.ToString()); + assetID.ToString(), item.OwnerID); if (!m_AddingAssemblies.ContainsKey(assembly)) { m_AddingAssemblies[assembly] = 1; } else { -- cgit v1.1