aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie Thielker2008-09-15 23:50:07 +0000
committerMelanie Thielker2008-09-15 23:50:07 +0000
commitae63b2d2caf39fa8db3bb877a8d78f3d394c8f5d (patch)
tree1dc43ea4c31a3a39181d4b8aab3778dc1323a970 /OpenSim/Region
parentRefactor the os functions allowed check into the threat check method (diff)
downloadopensim-SC-ae63b2d2caf39fa8db3bb877a8d78f3d394c8f5d.zip
opensim-SC-ae63b2d2caf39fa8db3bb877a8d78f3d394c8f5d.tar.gz
opensim-SC-ae63b2d2caf39fa8db3bb877a8d78f3d394c8f5d.tar.bz2
opensim-SC-ae63b2d2caf39fa8db3bb877a8d78f3d394c8f5d.tar.xz
Finish up OSSL enable/disable options in XEngine.
Now each function can be allowed, subject to threat level, disabled, or restricted to certain UUIDs.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs53
1 files changed, 45 insertions, 8 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 9a01025..4da0076 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -107,7 +107,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
107 internal ThreatLevel m_MaxThreatLevel = ThreatLevel.VeryLow; 107 internal ThreatLevel m_MaxThreatLevel = ThreatLevel.VeryLow;
108 internal float m_ScriptDelayFactor = 1.0f; 108 internal float m_ScriptDelayFactor = 1.0f;
109 internal float m_ScriptDistanceFactor = 1.0f; 109 internal float m_ScriptDistanceFactor = 1.0f;
110 internal Dictionary<string, bool> m_FunctionPerms = new Dictionary<string, bool>(); 110 internal Dictionary<string, List<UUID> > m_FunctionPerms = new Dictionary<string, List<UUID> >();
111 111
112 public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) 112 public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
113 { 113 {
@@ -184,15 +184,52 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
184 184
185 if (!m_FunctionPerms.ContainsKey(function)) 185 if (!m_FunctionPerms.ContainsKey(function))
186 { 186 {
187 m_FunctionPerms[function] = 187 string perm = m_ScriptEngine.Config.GetString("Allow_"+function, "true");
188 m_ScriptEngine.Config.GetBoolean("Allow_"+function, true); 188 bool allowed;
189 }
190 189
191 if (!m_FunctionPerms[function]) 190 if (bool.TryParse(perm, out allowed))
192 return; 191 {
192 // Boolean given
193 if(allowed)
194 m_FunctionPerms[function] = null; // a null value is all
195 else
196 m_FunctionPerms[function] = new List<UUID>(); // Empty list = none
197 }
198 else
199 {
200 m_FunctionPerms[function] = new List<UUID>();
201
202 string[] ids = perm.Split(new char[] {','});
203 foreach (string id in ids)
204 {
205 string current = id.Trim();
206 UUID uuid;
207
208 if (UUID.TryParse(current, out uuid))
209 {
210 m_FunctionPerms[function].Add(uuid);
211 }
212 }
213 }
214 }
193 215
194 if (level > m_MaxThreatLevel) 216 // If the list is null, then the value was true / undefined
195 throw new Exception("Threat level too high - "+function); 217 // Threat level governs permissions in this case
218 //
219 // If the list is non-null, then it is a list of UUIDs allowed
220 // to use that particular function. False causes an empty
221 // list and therefore means "no one"
222 //
223 if (m_FunctionPerms[function] == null) // No list = true
224 {
225 if (level > m_MaxThreatLevel)
226 throw new Exception("Threat level too high - "+function);
227 }
228 else
229 {
230 if (!m_FunctionPerms[function].Contains(m_host.OwnerID))
231 throw new Exception("Threat level too high - "+function);
232 }
196 } 233 }
197 234
198 protected void ScriptSleep(int delay) 235 protected void ScriptSleep(int delay)