diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
3 files changed, 58 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 10ddf14..f4bc45f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -264,6 +264,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
264 | // or a string explaining why this function can't be used. | 264 | // or a string explaining why this function can't be used. |
265 | private string CheckThreatLevelTest(ThreatLevel level, string function) | 265 | private string CheckThreatLevelTest(ThreatLevel level, string function) |
266 | { | 266 | { |
267 | if(GetDynaPerms(m_item.CreatorID, m_item.OwnerID, m_item.GroupID, function)) | ||
268 | return string.Empty; | ||
269 | |||
267 | if (!m_FunctionPerms.ContainsKey(function)) | 270 | if (!m_FunctionPerms.ContainsKey(function)) |
268 | { | 271 | { |
269 | FunctionPerms perms = new FunctionPerms(); | 272 | FunctionPerms perms = new FunctionPerms(); |
@@ -431,6 +434,47 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
431 | System.Threading.Thread.Sleep(delay); | 434 | System.Threading.Thread.Sleep(delay); |
432 | } | 435 | } |
433 | 436 | ||
437 | private bool GetDynaPerms(UUID owner, UUID creator, UUID group, string function) | ||
438 | { | ||
439 | if (World.GetOsslPerms(owner, function)) | ||
440 | return true; | ||
441 | if (World.GetOsslPerms(creator, function)) | ||
442 | return true; | ||
443 | if (World.GetOsslPerms(creator, function)) | ||
444 | return true; | ||
445 | |||
446 | return false; | ||
447 | |||
448 | } | ||
449 | |||
450 | public void osGrantScriptPermissions(LSL_Key avatar, LSL_List osfunctions) | ||
451 | { | ||
452 | CheckThreatLevel(ThreatLevel.Severe, "osGrantScriptPermissions"); | ||
453 | m_host.AddScriptLPS(1); | ||
454 | UUID key; | ||
455 | UUID.TryParse(avatar.m_string, out key); | ||
456 | |||
457 | for (int item = 0; item <= osfunctions.Length - 1; item++) | ||
458 | { | ||
459 | string function = osfunctions.GetLSLStringItem(item); | ||
460 | World.AddOsslPerm(key, function); | ||
461 | } | ||
462 | } | ||
463 | |||
464 | public void osRevokeScriptPermissions (LSL_Key avatar, LSL_List osfunctions) | ||
465 | { | ||
466 | CheckThreatLevel(ThreatLevel.Severe, "osRevokeScriptPermissions"); | ||
467 | m_host.AddScriptLPS(1); | ||
468 | UUID key; | ||
469 | UUID.TryParse(avatar.m_string, out key); | ||
470 | |||
471 | for (int item = 0; item <= osfunctions.Length - 1; item++) | ||
472 | { | ||
473 | string function = osfunctions.GetLSLStringItem(item); | ||
474 | World.RemoveOsslPerm(key, function); | ||
475 | } | ||
476 | } | ||
477 | |||
434 | public LSL_Integer osSetTerrainHeight(int x, int y, double val) | 478 | public LSL_Integer osSetTerrainHeight(int x, int y, double val) |
435 | { | 479 | { |
436 | CheckThreatLevel(ThreatLevel.High, "osSetTerrainHeight"); | 480 | CheckThreatLevel(ThreatLevel.High, "osSetTerrainHeight"); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 38d4574..2cbaf5a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -116,6 +116,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
116 | { | 116 | { |
117 | void CheckThreatLevel(ThreatLevel level, string function); | 117 | void CheckThreatLevel(ThreatLevel level, string function); |
118 | 118 | ||
119 | // Scripted Script Permissions | ||
120 | void osGrantScriptPermissions(LSL_Key avatar, LSL_List functions); | ||
121 | void osRevokeScriptPermissions(LSL_Key avatar, LSL_List functions); | ||
122 | |||
119 | //OpenSim functions | 123 | //OpenSim functions |
120 | string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer); | 124 | string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer); |
121 | string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, | 125 | string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 352a35d..a98f6ac 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -61,6 +61,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
61 | Prim = new OSSLPrim(this); | 61 | Prim = new OSSLPrim(this); |
62 | } | 62 | } |
63 | 63 | ||
64 | public void osGrantScriptPermissions (LSL_Key avatar, LSL_List osfunctions) | ||
65 | { | ||
66 | m_OSSL_Functions.osGrantScriptPermissions(avatar, osfunctions); | ||
67 | } | ||
68 | |||
69 | public void osRevokeScriptPermissions (LSL_Key avatar, LSL_List osfunctions) | ||
70 | { | ||
71 | m_OSSL_Functions.osRevokeScriptPermissions(avatar, osfunctions); | ||
72 | } | ||
73 | |||
64 | public void osSetRegionWaterHeight(double height) | 74 | public void osSetRegionWaterHeight(double height) |
65 | { | 75 | { |
66 | m_OSSL_Functions.osSetRegionWaterHeight(height); | 76 | m_OSSL_Functions.osSetRegionWaterHeight(height); |