From a3681f3052fb5e98e31e7051329a5b748a8bdd8d Mon Sep 17 00:00:00 2001 From: BlueWall Date: Fri, 27 Feb 2015 11:05:15 -0500 Subject: Adding dynamic ossl permission control Add permission by identifying uuid (owner/creator/group) and function. Revoke permission in the same manner. Permission adjustments immediately effect running scripts ability to call os functions. osGrantScriptPermissions(UUID key,string function) Threat Level Severe osRevokeScriptPermissions(UUID key,string function) Threat Level Severe work sponsored by: Rage --- OpenSim/Region/Framework/Scenes/Scene.cs | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 21d47aa..018e837 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -170,6 +170,9 @@ namespace OpenSim.Region.Framework.Scenes } private bool m_scripts_enabled; + // Dynamic ossl function permissions + private Dictionary> m_DynaPerms = new Dictionary>(); + public SynchronizeSceneHandler SynchronizeScene; /// @@ -5893,5 +5896,63 @@ namespace OpenSim.Region.Framework.Scenes m_eventManager.TriggerExtraSettingChanged(this, name, String.Empty); } + + public bool AddOsslPerm (UUID key, string function) + { + StackTrace calls = new StackTrace (); + string caller = calls.GetFrame (1).GetMethod ().Name; + if (caller != "osGrantScriptPermissions") + { + m_log.ErrorFormat("[SCENE]: {0} cannot adjust script perms!",caller); + return false; + } + + if (string.IsNullOrEmpty(function)) + return false; + + if (!m_DynaPerms.ContainsKey(function)) + { + List keys = new List (); + keys.Add (key); + m_DynaPerms[function] = keys; + return true; + } + + if (!m_DynaPerms[function].Contains(key)) + m_DynaPerms[function].Add(key); + + return true; + } + + public bool GetOsslPerms(UUID avatar, string function) + { + if (m_DynaPerms.ContainsKey(function)) + if(m_DynaPerms[function].Contains(avatar)) + return true; + + return false; + } + + public bool RemoveOsslPerm(UUID key, string function) + { + StackTrace calls = new StackTrace (); + string caller = calls.GetFrame (1).GetMethod ().Name; + if (caller != "osRevokeScriptPermissions") + { + m_log.ErrorFormat("[SCENE]: {0} cannot adjust script perms!",caller); + return false; + } + + if (m_DynaPerms.ContainsKey (function)) + { + if (m_DynaPerms [function].Contains (key)) + { + m_DynaPerms [function].Remove (key); + if (m_DynaPerms [function].Count == 0) + m_DynaPerms.Remove (function); + } + } + return true; + } } } -- cgit v1.1