From: Christopher Yeoh <yeohc@au1.ibm.com>
The attached patch ads an OpenSim.ini option (AutomaticLinkPermission) which when enabled makes PERMISSION_CHANGE_LINKS to be granted to scripts by default. When enabled llGetPermissions will always return it as granted and llCreateLink//llBreakLink will succeed without doing llRequestPermissions. ONLY ENABLE THIS IN TRUSTED ENVIRONMENTS. The patch also fixes a minor bug in llCreateLink related to a potential dereference of a null client object.0.6.1-post-fixes
parent
3ba0bc8f44
commit
04e8d624d6
|
@ -78,6 +78,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
private DateTime m_timer = DateTime.Now;
|
private DateTime m_timer = DateTime.Now;
|
||||||
private bool m_waitingForScriptAnswer=false;
|
private bool m_waitingForScriptAnswer=false;
|
||||||
|
private bool m_automaticLinkPermission=false;
|
||||||
|
|
||||||
//private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
//private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
@ -94,6 +95,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f);
|
m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f);
|
||||||
m_MinTimerInterval =
|
m_MinTimerInterval =
|
||||||
m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.5f);
|
m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.5f);
|
||||||
|
m_automaticLinkPermission =
|
||||||
|
m_ScriptEngine.Config.GetBoolean("AutomaticLinkPermission", false);
|
||||||
|
|
||||||
AsyncCommands = new AsyncCommandManager(ScriptEngine);
|
AsyncCommands = new AsyncCommandManager(ScriptEngine);
|
||||||
}
|
}
|
||||||
|
@ -3021,7 +3024,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
if (item.Type == 10 && item.ItemID == m_itemID)
|
if (item.Type == 10 && item.ItemID == m_itemID)
|
||||||
{
|
{
|
||||||
return item.PermsMask;
|
int perms = item.PermsMask;
|
||||||
|
if (m_automaticLinkPermission)
|
||||||
|
perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||||
|
return perms;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3054,10 +3060,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
UUID invItemID = InventorySelf();
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0) {
|
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||||
|
&& !m_automaticLinkPermission)
|
||||||
|
{
|
||||||
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
IClientAPI client = null;
|
IClientAPI client = null;
|
||||||
ScenePresence sp = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter);
|
ScenePresence sp = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter);
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
|
@ -3087,6 +3096,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected);
|
parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected);
|
||||||
parentPrim.HasGroupChanged = true;
|
parentPrim.HasGroupChanged = true;
|
||||||
parentPrim.ScheduleGroupForFullUpdate();
|
parentPrim.ScheduleGroupForFullUpdate();
|
||||||
|
if (client!=null)
|
||||||
parentPrim.GetProperties(client);
|
parentPrim.GetProperties(client);
|
||||||
|
|
||||||
ScriptSleep(1000);
|
ScriptSleep(1000);
|
||||||
|
@ -3096,7 +3106,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
UUID invItemID = InventorySelf();
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0)
|
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||||
|
&& !m_automaticLinkPermission)
|
||||||
{
|
{
|
||||||
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -872,6 +872,10 @@ crash_dir = "crashes"
|
||||||
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb
|
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb
|
||||||
|
|
||||||
|
|
||||||
|
; Allow for llCreateLink and llBreakLink to work without asking for permission
|
||||||
|
; only enable this in a trusted environment otherwise you may be subject to hijacking
|
||||||
|
; AutomaticLinkPermission = false
|
||||||
|
|
||||||
[GridInfo]
|
[GridInfo]
|
||||||
; These settings are used to return information on a get_grid_info call.
|
; These settings are used to return information on a get_grid_info call.
|
||||||
; Client launcher scripts and third-party clients make use of this to
|
; Client launcher scripts and third-party clients make use of this to
|
||||||
|
|
Loading…
Reference in New Issue