Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
424a7a274b
OpenSim
Addons/Groups
Region
Application
ClientStack/Linden/Caps/ObjectCaps
CoreModules
Framework/InventoryAccess
Scripting
LSLHttp
WorldComm
World
OptionalModules
Avatar
Attachments
XmlRpcGroups
Scripting/JsonStore
World/TreePopulator
ScriptEngine/Shared
Api/Implementation
Tests
Tests/Common/Helpers
|
@ -787,7 +787,7 @@ namespace OpenSim.Groups
|
||||||
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfully");
|
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfully");
|
||||||
|
|
||||||
// Update the founder with new group information.
|
// Update the founder with new group information.
|
||||||
SendAgentGroupDataUpdate(remoteClient, false);
|
SendAgentGroupDataUpdate(remoteClient, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
remoteClient.SendCreateGroupReply(groupID, false, reason);
|
remoteClient.SendCreateGroupReply(groupID, false, reason);
|
||||||
|
|
|
@ -237,7 +237,7 @@ namespace OpenSim
|
||||||
string permissionModules = Util.GetConfigVarFromSections<string>(Config, "permissionmodules",
|
string permissionModules = Util.GetConfigVarFromSections<string>(Config, "permissionmodules",
|
||||||
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
|
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
|
||||||
|
|
||||||
m_permsModules = new List<string>(permissionModules.Split(','));
|
m_permsModules = new List<string>(permissionModules.Split(',').Select(m => m.Trim()));
|
||||||
|
|
||||||
managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty);
|
managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty);
|
||||||
managedStatsPassword = startupConfig.GetString("ManagedStatsRemoteFetchPassword", String.Empty);
|
managedStatsPassword = startupConfig.GetString("ManagedStatsRemoteFetchPassword", String.Empty);
|
||||||
|
|
|
@ -357,7 +357,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
rootpart.NextOwnerMask = next_owner_mask;
|
rootpart.NextOwnerMask = next_owner_mask;
|
||||||
rootpart.Material = (byte)material;
|
rootpart.Material = (byte)material;
|
||||||
|
|
||||||
obj.AggregatePerms();
|
obj.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
|
m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
|
||||||
|
|
||||||
|
|
|
@ -1182,7 +1182,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
rootPart.TrimPermissions();
|
rootPart.TrimPermissions();
|
||||||
so.AggregateDeepPerms();
|
so.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
if (isAttachment)
|
if (isAttachment)
|
||||||
so.FromItemID = item.ID;
|
so.FromItemID = item.ID;
|
||||||
|
|
|
@ -26,15 +26,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
@ -89,6 +89,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
protected Dictionary<string, UrlData> m_UrlMap =
|
protected Dictionary<string, UrlData> m_UrlMap =
|
||||||
new Dictionary<string, UrlData>();
|
new Dictionary<string, UrlData>();
|
||||||
|
|
||||||
|
protected bool m_enabled = false;
|
||||||
|
protected string m_ErrorStr;
|
||||||
protected uint m_HttpsPort = 0;
|
protected uint m_HttpsPort = 0;
|
||||||
protected IHttpServer m_HttpServer = null;
|
protected IHttpServer m_HttpServer = null;
|
||||||
protected IHttpServer m_HttpsServer = null;
|
protected IHttpServer m_HttpsServer = null;
|
||||||
|
@ -118,6 +120,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
public void Initialise(IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
IConfig networkConfig = config.Configs["Network"];
|
IConfig networkConfig = config.Configs["Network"];
|
||||||
|
m_enabled = false;
|
||||||
|
|
||||||
if (networkConfig != null)
|
if (networkConfig != null)
|
||||||
{
|
{
|
||||||
|
@ -128,9 +131,47 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
if (ssl_enabled)
|
if (ssl_enabled)
|
||||||
m_HttpsPort = (uint)config.Configs["Network"].GetInt("https_port", (int)m_HttpsPort);
|
m_HttpsPort = (uint)config.Configs["Network"].GetInt("https_port", (int)m_HttpsPort);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_ErrorStr = "[Network] configuration missing, HTTP listener for LSL disabled";
|
||||||
|
m_log.Warn("[URL MODULE]: " + m_ErrorStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ExternalHostNameForLSL == null)
|
if (String.IsNullOrWhiteSpace(ExternalHostNameForLSL))
|
||||||
ExternalHostNameForLSL = System.Environment.MachineName;
|
{
|
||||||
|
m_ErrorStr = "ExternalHostNameForLSL not defined in configuration, HTTP listener for LSL disabled";
|
||||||
|
m_log.Warn("[URL MODULE]: " + m_ErrorStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IPAddress ia = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (IPAddress Adr in Dns.GetHostAddresses(ExternalHostNameForLSL))
|
||||||
|
{
|
||||||
|
if (Adr.AddressFamily == AddressFamily.InterNetwork ||
|
||||||
|
Adr.AddressFamily == AddressFamily.InterNetworkV6) // ipv6 will most likely smoke
|
||||||
|
{
|
||||||
|
ia = Adr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
ia = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ia == null)
|
||||||
|
{
|
||||||
|
m_ErrorStr = "Could not resolve ExternalHostNameForLSL, HTTP listener for LSL disabled";
|
||||||
|
m_log.Warn("[URL MODULE]: " + m_ErrorStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_enabled = true;
|
||||||
|
m_ErrorStr = String.Empty;
|
||||||
|
|
||||||
IConfig llFunctionsConfig = config.Configs["LL-Functions"];
|
IConfig llFunctionsConfig = config.Configs["LL-Functions"];
|
||||||
|
|
||||||
|
@ -146,7 +187,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
public void AddRegion(Scene scene)
|
||||||
{
|
{
|
||||||
if (m_HttpServer == null)
|
if (m_enabled && m_HttpServer == null)
|
||||||
{
|
{
|
||||||
// There can only be one
|
// There can only be one
|
||||||
//
|
//
|
||||||
|
@ -197,11 +238,18 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
{
|
{
|
||||||
UUID urlcode = UUID.Random();
|
UUID urlcode = UUID.Random();
|
||||||
|
|
||||||
|
if(!m_enabled)
|
||||||
|
{
|
||||||
|
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", m_ErrorStr });
|
||||||
|
return urlcode;
|
||||||
|
}
|
||||||
|
|
||||||
lock (m_UrlMap)
|
lock (m_UrlMap)
|
||||||
{
|
{
|
||||||
if (m_UrlMap.Count >= TotalUrls)
|
if (m_UrlMap.Count >= TotalUrls)
|
||||||
{
|
{
|
||||||
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" });
|
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED",
|
||||||
|
"Too many URLs already open" });
|
||||||
return urlcode;
|
return urlcode;
|
||||||
}
|
}
|
||||||
string url = "http://" + ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString() + "/";
|
string url = "http://" + ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString() + "/";
|
||||||
|
@ -243,6 +291,12 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
{
|
{
|
||||||
UUID urlcode = UUID.Random();
|
UUID urlcode = UUID.Random();
|
||||||
|
|
||||||
|
if(!m_enabled)
|
||||||
|
{
|
||||||
|
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", m_ErrorStr });
|
||||||
|
return urlcode;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_HttpsServer == null)
|
if (m_HttpsServer == null)
|
||||||
{
|
{
|
||||||
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" });
|
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" });
|
||||||
|
@ -253,7 +307,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
{
|
{
|
||||||
if (m_UrlMap.Count >= TotalUrls)
|
if (m_UrlMap.Count >= TotalUrls)
|
||||||
{
|
{
|
||||||
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" });
|
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED",
|
||||||
|
"Too many URLs already open" });
|
||||||
return urlcode;
|
return urlcode;
|
||||||
}
|
}
|
||||||
string url = "https://" + ExternalHostNameForLSL + ":" + m_HttpsServer.Port.ToString() + "/lslhttps/" + urlcode.ToString() + "/";
|
string url = "https://" + ExternalHostNameForLSL + ":" + m_HttpsServer.Port.ToString() + "/lslhttps/" + urlcode.ToString() + "/";
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
// wrap this in a try block so that defaults will work if
|
// wrap this in a try block so that defaults will work if
|
||||||
// the config file doesn't specify otherwise.
|
// the config file doesn't specify otherwise.
|
||||||
int maxlisteners = 1000;
|
int maxlisteners = 1000;
|
||||||
int maxhandles = 64;
|
int maxhandles = 65;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_whisperdistance = config.Configs["Chat"].GetInt(
|
m_whisperdistance = config.Configs["Chat"].GetInt(
|
||||||
|
@ -130,8 +130,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
if (maxlisteners < 1) maxlisteners = int.MaxValue;
|
|
||||||
if (maxhandles < 1) maxhandles = int.MaxValue;
|
if (maxlisteners < 1)
|
||||||
|
maxlisteners = int.MaxValue;
|
||||||
|
if (maxhandles < 1)
|
||||||
|
maxhandles = int.MaxValue;
|
||||||
|
|
||||||
|
if (maxlisteners < maxhandles)
|
||||||
|
maxlisteners = maxhandles;
|
||||||
|
|
||||||
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
|
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
|
||||||
m_pendingQ = new Queue();
|
m_pendingQ = new Queue();
|
||||||
m_pending = Queue.Synchronized(m_pendingQ);
|
m_pending = Queue.Synchronized(m_pendingQ);
|
||||||
|
@ -605,11 +612,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
li.GetHandle().Equals(handle))
|
li.GetHandle().Equals(handle))
|
||||||
{
|
{
|
||||||
lis.Value.Remove(li);
|
lis.Value.Remove(li);
|
||||||
|
m_curlisteners--;
|
||||||
if (lis.Value.Count == 0)
|
if (lis.Value.Count == 0)
|
||||||
{
|
m_listeners.Remove(lis.Key); // bailing of loop so this does not smoke
|
||||||
m_listeners.Remove(lis.Key);
|
|
||||||
m_curlisteners--;
|
|
||||||
}
|
|
||||||
// there should be only one, so we bail out early
|
// there should be only one, so we bail out early
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -718,6 +723,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(handles.Count >= m_maxhandles)
|
||||||
|
return -1;
|
||||||
|
|
||||||
// Note: 0 is NOT a valid handle for llListen() to return
|
// Note: 0 is NOT a valid handle for llListen() to return
|
||||||
for (int i = 1; i <= m_maxhandles; i++)
|
for (int i = 1; i <= m_maxhandles; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
|
||||||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||||
child.ApplyNextOwnerPermissions();
|
child.ApplyNextOwnerPermissions();
|
||||||
}
|
}
|
||||||
group.AggregatePerms();
|
group.InvalidateDeepEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
part.ObjectSaleType = 0;
|
part.ObjectSaleType = 0;
|
||||||
|
|
|
@ -293,6 +293,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
scenePermissions.OnDeleteObject += CanDeleteObject;
|
scenePermissions.OnDeleteObject += CanDeleteObject;
|
||||||
scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
|
scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
|
||||||
scenePermissions.OnEditObject += CanEditObject;
|
scenePermissions.OnEditObject += CanEditObject;
|
||||||
|
scenePermissions.OnEditObjectPerms += CanEditObjectPerms;
|
||||||
scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
|
scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
|
||||||
scenePermissions.OnMoveObject += CanMoveObject;
|
scenePermissions.OnMoveObject += CanMoveObject;
|
||||||
scenePermissions.OnTakeObject += CanTakeObject;
|
scenePermissions.OnTakeObject += CanTakeObject;
|
||||||
|
@ -391,6 +392,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
scenePermissions.OnDeleteObject -= CanDeleteObject;
|
scenePermissions.OnDeleteObject -= CanDeleteObject;
|
||||||
scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
|
scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
|
||||||
scenePermissions.OnEditObject -= CanEditObject;
|
scenePermissions.OnEditObject -= CanEditObject;
|
||||||
|
scenePermissions.OnEditObjectPerms -= CanEditObjectPerms;
|
||||||
scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
|
scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
|
||||||
scenePermissions.OnMoveObject -= CanMoveObject;
|
scenePermissions.OnMoveObject -= CanMoveObject;
|
||||||
scenePermissions.OnTakeObject -= CanTakeObject;
|
scenePermissions.OnTakeObject -= CanTakeObject;
|
||||||
|
@ -1387,6 +1389,35 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CanEditObjectPerms(SceneObjectGroup sog, UUID userID)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
if (sog == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(sog.OwnerID == userID || IsAdministrator(userID))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
UUID sogGroupID = sog.GroupID;
|
||||||
|
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint perms = sog.EffectiveOwnerPerms;
|
||||||
|
if((perms & (uint)PermissionMask.Modify) == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ulong powers = 0;
|
||||||
|
if(GroupMemberPowers(sogGroupID, userID, ref powers))
|
||||||
|
{
|
||||||
|
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool CanEditObjectInventory(UUID objectID, UUID userID)
|
private bool CanEditObjectInventory(UUID objectID, UUID userID)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
@ -1678,7 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
|
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
@ -2289,23 +2319,31 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
if (sog == null)
|
if (sog == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint perms = GetObjectPermissions(userID, sog, true);
|
if(sog.OwnerID == userID || IsAdministrator(userID))
|
||||||
if((perms & (uint)PermissionMask.Modify) == 0)
|
return true;
|
||||||
|
|
||||||
|
if(sog.IsAttachment)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
UUID sogGroupID = sog.GroupID;
|
||||||
|
|
||||||
|
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
|
TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
|
||||||
if(ti == null)
|
if(ti == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint itperms = GetObjectItemPermissions(userID, ti);
|
ulong powers = 0;
|
||||||
|
if(GroupMemberPowers(sogGroupID, userID, ref powers))
|
||||||
|
{
|
||||||
|
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
if((itperms & (uint)PermissionMask.Copy) == 0)
|
if((ti.EveryonePermissions & (uint)PermissionMask.Copy) != 0)
|
||||||
return false;
|
return true;
|
||||||
|
}
|
||||||
if(sog.OwnerID != userID && (itperms & (uint)PermissionMask.Transfer) == 0)
|
return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// object inventory to object inventory item drag and drop
|
// object inventory to object inventory item drag and drop
|
||||||
|
|
|
@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.World.Vegetation
|
||||||
|
|
||||||
sceneObject.SetGroup(groupID, null);
|
sceneObject.SetGroup(groupID, null);
|
||||||
m_scene.AddNewSceneObject(sceneObject, true);
|
m_scene.AddNewSceneObject(sceneObject, true);
|
||||||
sceneObject.AggregatePerms();
|
sceneObject.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
|
|
|
@ -338,7 +338,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Update item with new asset
|
// Update item with new asset
|
||||||
item.AssetID = asset.FullID;
|
item.AssetID = asset.FullID;
|
||||||
group.UpdateInventoryItem(item);
|
group.UpdateInventoryItem(item);
|
||||||
group.AggregatePerms();
|
group.InvalidateEffectivePerms();
|
||||||
|
|
||||||
part.SendPropertiesToClient(remoteClient);
|
part.SendPropertiesToClient(remoteClient);
|
||||||
|
|
||||||
|
@ -1216,7 +1216,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
group.RemoveInventoryItem(localID, itemID);
|
group.RemoveInventoryItem(localID, itemID);
|
||||||
group.AggregatePerms();
|
group.InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
part.SendPropertiesToClient(remoteClient);
|
part.SendPropertiesToClient(remoteClient);
|
||||||
|
@ -1388,11 +1388,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Permissions.CanCopyObjectInventory(itemId, part.UUID, remoteClient.AgentId))
|
if (!Permissions.CanCopyObjectInventory(itemId, part.UUID, remoteClient.AgentId))
|
||||||
{
|
return;
|
||||||
// check also if we can delete the no copy item
|
|
||||||
if(!Permissions.CanEditObject(part.UUID, remoteClient.AgentId))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string message;
|
string message;
|
||||||
InventoryItemBase item = MoveTaskInventoryItem(remoteClient, folderId, part, itemId, out message);
|
InventoryItemBase item = MoveTaskInventoryItem(remoteClient, folderId, part, itemId, out message);
|
||||||
|
@ -1742,7 +1738,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Check if we're allowed to mess with permissions
|
// Check if we're allowed to mess with permissions
|
||||||
if (!Permissions.IsGod(remoteClient.AgentId)) // Not a god
|
if (!Permissions.IsGod(remoteClient.AgentId)) // Not a god
|
||||||
{
|
{
|
||||||
|
bool noChange;
|
||||||
if (remoteClient.AgentId != part.OwnerID) // Not owner
|
if (remoteClient.AgentId != part.OwnerID) // Not owner
|
||||||
|
{
|
||||||
|
noChange = true;
|
||||||
|
if(itemInfo.OwnerID == UUID.Zero && itemInfo.GroupID != UUID.Zero)
|
||||||
|
{
|
||||||
|
if(remoteClient.IsGroupMember(itemInfo.GroupID))
|
||||||
|
{
|
||||||
|
ulong powers = remoteClient.GetGroupPowers(itemInfo.GroupID);
|
||||||
|
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||||
|
noChange = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
noChange = false;
|
||||||
|
|
||||||
|
if(noChange)
|
||||||
{
|
{
|
||||||
// Friends and group members can't change any perms
|
// Friends and group members can't change any perms
|
||||||
itemInfo.BasePermissions = currentItem.BasePermissions;
|
itemInfo.BasePermissions = currentItem.BasePermissions;
|
||||||
|
@ -1769,7 +1782,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
itemInfo.CurrentPermissions &= currentItem.BasePermissions;
|
itemInfo.CurrentPermissions &= currentItem.BasePermissions;
|
||||||
itemInfo.NextPermissions &= currentItem.BasePermissions;
|
itemInfo.NextPermissions &= currentItem.BasePermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1955,7 +1967,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
part.Inventory.AddInventoryItem(taskItem, false);
|
part.Inventory.AddInventoryItem(taskItem, false);
|
||||||
part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0);
|
part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0);
|
||||||
|
|
||||||
part.ParentGroup.AggregatePerms();
|
part.ParentGroup.InvalidateEffectivePerms();
|
||||||
|
|
||||||
// tell anyone managing scripts that a new script exists
|
// tell anyone managing scripts that a new script exists
|
||||||
EventManager.TriggerNewScript(agentID, part, taskItem.ItemID);
|
EventManager.TriggerNewScript(agentID, part, taskItem.ItemID);
|
||||||
|
@ -2643,7 +2655,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// We can only call this after adding the scene object, since the scene object references the scene
|
// We can only call this after adding the scene object, since the scene object references the scene
|
||||||
// to find out if scripts should be activated at all.
|
// to find out if scripts should be activated at all.
|
||||||
group.AggregatePerms();
|
group.InvalidateEffectivePerms();
|
||||||
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
||||||
|
|
||||||
group.ScheduleGroupForFullUpdate();
|
group.ScheduleGroupForFullUpdate();
|
||||||
|
@ -2740,7 +2752,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// and with this comented code, if user does not set next permissions on the object
|
// and with this comented code, if user does not set next permissions on the object
|
||||||
// and on ALL contents of ALL prims, he may loose rights, making the object useless
|
// and on ALL contents of ALL prims, he may loose rights, making the object useless
|
||||||
sog.ApplyNextOwnerPermissions();
|
sog.ApplyNextOwnerPermissions();
|
||||||
sog.AggregatePerms();
|
sog.InvalidateEffectivePerms();
|
||||||
|
|
||||||
sog.ScheduleGroupForFullUpdate();
|
sog.ScheduleGroupForFullUpdate();
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||||
public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID);
|
public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID);
|
||||||
public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||||
|
public delegate bool EditObjectPermsHandler(SceneObjectGroup sog, UUID editorID);
|
||||||
public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
|
public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
|
||||||
public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||||
public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
|
public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
|
||||||
|
@ -133,6 +134,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public event DuplicateObjectHandler OnDuplicateObject;
|
public event DuplicateObjectHandler OnDuplicateObject;
|
||||||
public event EditObjectByIDsHandler OnEditObjectByIDs;
|
public event EditObjectByIDsHandler OnEditObjectByIDs;
|
||||||
public event EditObjectHandler OnEditObject;
|
public event EditObjectHandler OnEditObject;
|
||||||
|
public event EditObjectPermsHandler OnEditObjectPerms;
|
||||||
public event EditObjectInventoryHandler OnEditObjectInventory;
|
public event EditObjectInventoryHandler OnEditObjectInventory;
|
||||||
public event MoveObjectHandler OnMoveObject;
|
public event MoveObjectHandler OnMoveObject;
|
||||||
public event ObjectEntryHandler OnObjectEntry;
|
public event ObjectEntryHandler OnObjectEntry;
|
||||||
|
@ -511,6 +513,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanEditObjectPermissions(SceneObjectGroup sog, UUID editorID)
|
||||||
|
{
|
||||||
|
EditObjectPermsHandler handler = OnEditObjectPerms;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
if(sog == null)
|
||||||
|
return false;
|
||||||
|
Delegate[] list = handler.GetInvocationList();
|
||||||
|
foreach (EditObjectPermsHandler h in list)
|
||||||
|
{
|
||||||
|
if (h(sog, editorID) == false)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public bool CanEditObjectInventory(UUID objectID, UUID editorID)
|
public bool CanEditObjectInventory(UUID objectID, UUID editorID)
|
||||||
{
|
{
|
||||||
EditObjectInventoryHandler handler = OnEditObjectInventory;
|
EditObjectInventoryHandler handler = OnEditObjectInventory;
|
||||||
|
|
|
@ -978,6 +978,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_maxDrawDistance = startupConfig.GetFloat("MaxDrawDistance", m_maxDrawDistance);
|
m_maxDrawDistance = startupConfig.GetFloat("MaxDrawDistance", m_maxDrawDistance);
|
||||||
m_maxRegionViewDistance = startupConfig.GetFloat("MaxRegionsViewDistance", m_maxRegionViewDistance);
|
m_maxRegionViewDistance = startupConfig.GetFloat("MaxRegionsViewDistance", m_maxRegionViewDistance);
|
||||||
|
|
||||||
|
// old versions compatibility
|
||||||
LegacySitOffsets = startupConfig.GetBoolean("LegacySitOffsets", LegacySitOffsets);
|
LegacySitOffsets = startupConfig.GetBoolean("LegacySitOffsets", LegacySitOffsets);
|
||||||
|
|
||||||
if (m_defaultDrawDistance > m_maxDrawDistance)
|
if (m_defaultDrawDistance > m_maxDrawDistance)
|
||||||
|
@ -2390,8 +2391,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
EventManager.TriggerOnSceneObjectLoaded(group);
|
EventManager.TriggerOnSceneObjectLoaded(group);
|
||||||
SceneObjectPart rootPart = group.GetPart(group.UUID);
|
SceneObjectPart rootPart = group.GetPart(group.UUID);
|
||||||
rootPart.Flags &= ~PrimFlags.Scripted;
|
rootPart.Flags &= ~PrimFlags.Scripted;
|
||||||
group.AggregateDeepPerms();
|
|
||||||
rootPart.TrimPermissions();
|
rootPart.TrimPermissions();
|
||||||
|
group.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
// Don't do this here - it will get done later on when sculpt data is loaded.
|
// Don't do this here - it will get done later on when sculpt data is loaded.
|
||||||
// group.CheckSculptAndLoad();
|
// group.CheckSculptAndLoad();
|
||||||
|
@ -2662,7 +2664,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (UserManagementModule != null)
|
if (UserManagementModule != null)
|
||||||
sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID);
|
sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID);
|
||||||
|
|
||||||
sceneObject.AggregateDeepPerms();
|
sceneObject.InvalidateDeepEffectivePerms();;
|
||||||
sceneObject.ScheduleGroupForFullUpdate();
|
sceneObject.ScheduleGroupForFullUpdate();
|
||||||
|
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
|
|
|
@ -343,7 +343,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sceneObject.ForceInventoryPersistence();
|
sceneObject.ForceInventoryPersistence();
|
||||||
sceneObject.HasGroupChanged = true;
|
sceneObject.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
sceneObject.AggregateDeepPerms();
|
sceneObject.InvalidateDeepEffectivePerms();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2094,7 +2094,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||||
child.ApplyNextOwnerPermissions();
|
child.ApplyNextOwnerPermissions();
|
||||||
}
|
}
|
||||||
copy.AggregatePerms();
|
copy.InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
addFromAllowedDrop = (part.ParentGroup.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0;
|
addFromAllowedDrop = (part.ParentGroup.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0;
|
||||||
|
|
||||||
part.Inventory.AddInventoryItem(taskItem, addFromAllowedDrop);
|
part.Inventory.AddInventoryItem(taskItem, addFromAllowedDrop);
|
||||||
part.ParentGroup.AggregatePerms();
|
part.ParentGroup.InvalidateEffectivePerms();
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -254,13 +254,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// new test code, to place in better place later
|
// new test code, to place in better place later
|
||||||
private object m_PermissionsLock = new object();
|
private object m_PermissionsLock = new object();
|
||||||
private bool m_EffectivePermsInvalid = true;
|
private bool m_EffectivePermsInvalid = true;
|
||||||
|
private bool m_DeepEffectivePermsInvalid = true;
|
||||||
|
|
||||||
|
// should called when parts chanced by their contents did not, so we know their cacche is valid
|
||||||
|
// in case of doubt call InvalidateDeepEffectivePerms(), it only costs a bit more cpu time
|
||||||
public void InvalidateEffectivePerms()
|
public void InvalidateEffectivePerms()
|
||||||
{
|
{
|
||||||
lock(m_PermissionsLock)
|
lock(m_PermissionsLock)
|
||||||
m_EffectivePermsInvalid = true;
|
m_EffectivePermsInvalid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// should called when parts chanced and their contents where accounted for
|
||||||
|
public void InvalidateDeepEffectivePerms()
|
||||||
|
{
|
||||||
|
lock(m_PermissionsLock)
|
||||||
|
{
|
||||||
|
m_DeepEffectivePermsInvalid = true;
|
||||||
|
m_EffectivePermsInvalid = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private uint m_EffectiveEveryOnePerms;
|
private uint m_EffectiveEveryOnePerms;
|
||||||
public uint EffectiveEveryOnePerms
|
public uint EffectiveEveryOnePerms
|
||||||
{
|
{
|
||||||
|
@ -317,79 +330,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// aggregates perms scanning parts and their contents
|
|
||||||
// AggregatePerms does same using cached parts content perms
|
|
||||||
public void AggregateDeepPerms()
|
|
||||||
{
|
|
||||||
lock(m_PermissionsLock)
|
|
||||||
{
|
|
||||||
// aux
|
|
||||||
const uint allmask = (uint)PermissionMask.AllEffective;
|
|
||||||
const uint movemodmask = (uint)(PermissionMask.Move | PermissionMask.Modify);
|
|
||||||
const uint copytransfermask = (uint)(PermissionMask.Copy | PermissionMask.Transfer);
|
|
||||||
|
|
||||||
uint basePerms = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move;
|
|
||||||
bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0;
|
|
||||||
|
|
||||||
uint rootOwnerPerms = RootPart.OwnerMask;
|
|
||||||
uint owner = rootOwnerPerms;
|
|
||||||
uint rootGroupPerms = RootPart.GroupMask;
|
|
||||||
uint group = rootGroupPerms;
|
|
||||||
uint rootEveryonePerms = RootPart.EveryoneMask;
|
|
||||||
uint everyone = rootEveryonePerms;
|
|
||||||
|
|
||||||
// date is time of writing april 30th 2017
|
|
||||||
bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
|
||||||
for (int i = 0; i < parts.Length; i++)
|
|
||||||
{
|
|
||||||
SceneObjectPart part = parts[i];
|
|
||||||
part.AggregateInnerPerms();
|
|
||||||
owner &= part.AggregatedInnerOwnerPerms;
|
|
||||||
group &= part.AggregatedInnerGroupPerms;
|
|
||||||
if(newObject)
|
|
||||||
everyone &= part.AggregatedInnerEveryonePerms;
|
|
||||||
}
|
|
||||||
// recover modify and move
|
|
||||||
rootOwnerPerms &= movemodmask;
|
|
||||||
owner |= rootOwnerPerms;
|
|
||||||
if((owner & copytransfermask) == 0)
|
|
||||||
owner |= (uint)PermissionMask.Transfer;
|
|
||||||
|
|
||||||
owner &= basePerms;
|
|
||||||
m_EffectiveOwnerPerms = owner;
|
|
||||||
uint ownertransfermask = owner & (uint)PermissionMask.Transfer;
|
|
||||||
|
|
||||||
// recover modify and move
|
|
||||||
rootGroupPerms &= movemodmask;
|
|
||||||
group |= rootGroupPerms;
|
|
||||||
if(noBaseTransfer)
|
|
||||||
group &=~(uint)PermissionMask.Copy;
|
|
||||||
else
|
|
||||||
group |= ownertransfermask;
|
|
||||||
|
|
||||||
uint groupOrEveryone = group;
|
|
||||||
m_EffectiveGroupPerms = group & owner;
|
|
||||||
|
|
||||||
// recover move
|
|
||||||
rootEveryonePerms &= (uint)PermissionMask.Move;
|
|
||||||
everyone |= rootEveryonePerms;
|
|
||||||
everyone &= ~(uint)PermissionMask.Modify;
|
|
||||||
if(noBaseTransfer)
|
|
||||||
everyone &=~(uint)PermissionMask.Copy;
|
|
||||||
else
|
|
||||||
everyone |= ownertransfermask;
|
|
||||||
|
|
||||||
groupOrEveryone |= everyone;
|
|
||||||
|
|
||||||
m_EffectiveEveryOnePerms = everyone & owner;
|
|
||||||
m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner;
|
|
||||||
m_EffectivePermsInvalid = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// aggregates perms scanning parts, assuming their contents was already aggregated and cached
|
|
||||||
// ie is AggregateDeepPerms without the part.AggregateInnerPerms() call on parts loop
|
|
||||||
public void AggregatePerms()
|
public void AggregatePerms()
|
||||||
{
|
{
|
||||||
lock(m_PermissionsLock)
|
lock(m_PermissionsLock)
|
||||||
|
@ -411,14 +351,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
bool needUpdate = false;
|
bool needUpdate = false;
|
||||||
// date is time of writing april 30th 2017
|
// date is time of writing april 30th 2017
|
||||||
bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
bool newobj = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
|
|
||||||
|
if(m_DeepEffectivePermsInvalid)
|
||||||
|
part.AggregateInnerPerms();
|
||||||
|
|
||||||
owner &= part.AggregatedInnerOwnerPerms;
|
owner &= part.AggregatedInnerOwnerPerms;
|
||||||
group &= part.AggregatedInnerGroupPerms;
|
group &= part.AggregatedInnerGroupPerms;
|
||||||
if(newObject)
|
if(newobj)
|
||||||
|
group &= part.AggregatedInnerGroupPerms;
|
||||||
|
if(newobj)
|
||||||
everyone &= part.AggregatedInnerEveryonePerms;
|
everyone &= part.AggregatedInnerEveryonePerms;
|
||||||
}
|
}
|
||||||
// recover modify and move
|
// recover modify and move
|
||||||
|
@ -477,6 +423,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_EffectiveGroupOrEveryOnePerms = tmpPerms;
|
m_EffectiveGroupOrEveryOnePerms = tmpPerms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_DeepEffectivePermsInvalid = false;
|
||||||
m_EffectivePermsInvalid = false;
|
m_EffectivePermsInvalid = false;
|
||||||
|
|
||||||
if(needUpdate)
|
if(needUpdate)
|
||||||
|
|
|
@ -2677,7 +2677,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (dupe.m_rootPart.PhysActor != null)
|
if (dupe.m_rootPart.PhysActor != null)
|
||||||
dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building
|
dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building
|
||||||
|
|
||||||
dupe.AggregateDeepPerms();
|
dupe.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
dupe.HasGroupChanged = true;
|
dupe.HasGroupChanged = true;
|
||||||
dupe.AttachToBackup();
|
dupe.AttachToBackup();
|
||||||
|
@ -2943,7 +2943,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!m_scene.Permissions.BypassPermissions())
|
if (!m_scene.Permissions.BypassPermissions())
|
||||||
{
|
{
|
||||||
ApplyNextOwnerPermissions();
|
ApplyNextOwnerPermissions();
|
||||||
AggregatePerms();
|
InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3605,7 +3605,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
InvalidBoundsRadius();
|
InvalidBoundsRadius();
|
||||||
InvalidatePartsLinkMaps();
|
InvalidatePartsLinkMaps();
|
||||||
objectGroup.AggregatePerms();
|
objectGroup.InvalidateEffectivePerms();
|
||||||
|
|
||||||
if (sendEvents)
|
if (sendEvents)
|
||||||
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
|
@ -4163,7 +4163,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}",
|
// "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}",
|
||||||
// (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name);
|
// (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name);
|
||||||
AggregatePerms();
|
InvalidateEffectivePerms();
|
||||||
RootPart.ScheduleFullUpdate();
|
RootPart.ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4188,7 +4188,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in Parts)
|
foreach (SceneObjectPart part in Parts)
|
||||||
part.Inventory.ApplyGodPermissions(RootPart.BaseMask);
|
part.Inventory.ApplyGodPermissions(RootPart.BaseMask);
|
||||||
AggregatePerms();
|
InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
|
@ -5447,7 +5447,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
part.ResetOwnerChangeFlag();
|
part.ResetOwnerChangeFlag();
|
||||||
});
|
});
|
||||||
AggregatePerms();
|
InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear some references to easy cg
|
// clear some references to easy cg
|
||||||
|
|
|
@ -4460,8 +4460,11 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
if (god)
|
if (god)
|
||||||
baseMask = 0x7ffffff0;
|
baseMask = 0x7ffffff0;
|
||||||
|
|
||||||
// Are we the owner?
|
bool canChange = (AgentID == OwnerID) || god;
|
||||||
if ((AgentID == OwnerID) || god)
|
if(!canChange)
|
||||||
|
canChange = ParentGroup.Scene.Permissions.CanEditObjectPermissions(ParentGroup, AgentID);
|
||||||
|
|
||||||
|
if (canChange)
|
||||||
{
|
{
|
||||||
switch (field)
|
switch (field)
|
||||||
{
|
{
|
||||||
|
|
|
@ -207,6 +207,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
item.PermsGranter = UUID.Zero;
|
item.PermsGranter = UUID.Zero;
|
||||||
item.OwnerChanged = true;
|
item.OwnerChanged = true;
|
||||||
}
|
}
|
||||||
|
m_inventorySerial++;
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,7 +223,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_inventorySerial++;
|
||||||
// Don't let this set the HasGroupChanged flag for attachments
|
// Don't let this set the HasGroupChanged flag for attachments
|
||||||
// as this happens during rez and we don't want a new asset
|
// as this happens during rez and we don't want a new asset
|
||||||
// for each attachment each time
|
// for each attachment each time
|
||||||
|
@ -235,10 +236,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values);
|
IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values);
|
||||||
foreach (TaskInventoryItem item in items)
|
foreach (TaskInventoryItem item in items)
|
||||||
{
|
{
|
||||||
if (groupID != item.GroupID)
|
item.GroupID = groupID;
|
||||||
{
|
|
||||||
item.GroupID = groupID;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
}
|
}
|
||||||
|
@ -981,7 +979,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
// old code end
|
// old code end
|
||||||
rootPart.TrimPermissions();
|
rootPart.TrimPermissions();
|
||||||
group.AggregateDeepPerms();
|
group.InvalidateDeepEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1019,6 +1017,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (item.GroupPermissions != (uint)PermissionMask.None)
|
if (item.GroupPermissions != (uint)PermissionMask.None)
|
||||||
item.GroupID = m_part.GroupID;
|
item.GroupID = m_part.GroupID;
|
||||||
|
|
||||||
|
if(item.OwnerID == UUID.Zero) // viewer to internal enconding of group owned
|
||||||
|
item.OwnerID = item.GroupID;
|
||||||
|
|
||||||
if (item.AssetID == UUID.Zero)
|
if (item.AssetID == UUID.Zero)
|
||||||
item.AssetID = m_items[item.ItemID].AssetID;
|
item.AssetID = m_items[item.ItemID].AssetID;
|
||||||
|
|
||||||
|
@ -1030,8 +1031,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (considerChanged)
|
if (considerChanged)
|
||||||
{
|
{
|
||||||
m_part.AggregateInnerPerms();
|
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||||
m_part.ParentGroup.AggregatePerms();
|
|
||||||
HasInventoryChanged = true;
|
HasInventoryChanged = true;
|
||||||
m_part.ParentGroup.HasGroupChanged = true;
|
m_part.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
|
@ -1074,8 +1074,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_items.Remove(itemID);
|
m_items.Remove(itemID);
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
|
|
||||||
m_part.AggregateInnerPerms();
|
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||||
m_part.ParentGroup.AggregatePerms();
|
|
||||||
|
|
||||||
m_inventorySerial++;
|
m_inventorySerial++;
|
||||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||||
|
@ -1179,6 +1178,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
foreach (TaskInventoryItem item in m_items.Values)
|
foreach (TaskInventoryItem item in m_items.Values)
|
||||||
{
|
{
|
||||||
UUID ownerID = item.OwnerID;
|
UUID ownerID = item.OwnerID;
|
||||||
|
UUID groupID = item.GroupID;
|
||||||
uint everyoneMask = item.EveryonePermissions;
|
uint everyoneMask = item.EveryonePermissions;
|
||||||
uint baseMask = item.BasePermissions;
|
uint baseMask = item.BasePermissions;
|
||||||
uint ownerMask = item.CurrentPermissions;
|
uint ownerMask = item.CurrentPermissions;
|
||||||
|
@ -1197,11 +1197,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
|
invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
|
||||||
|
|
||||||
invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
|
invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
|
||||||
invString.AddNameValueLine("owner_id", ownerID.ToString());
|
|
||||||
|
|
||||||
invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
|
invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
|
||||||
|
|
||||||
invString.AddNameValueLine("group_id", item.GroupID.ToString());
|
invString.AddNameValueLine("group_id",groupID.ToString());
|
||||||
|
if(groupID != UUID.Zero && ownerID == groupID)
|
||||||
|
{
|
||||||
|
invString.AddNameValueLine("owner_id", UUID.Zero.ToString());
|
||||||
|
invString.AddNameValueLine("group_owned","1");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
invString.AddNameValueLine("owner_id", ownerID.ToString());
|
||||||
|
invString.AddNameValueLine("group_owned","0");
|
||||||
|
}
|
||||||
|
|
||||||
invString.AddSectionEnd();
|
invString.AddSectionEnd();
|
||||||
|
|
||||||
if (includeAssets)
|
if (includeAssets)
|
||||||
|
@ -1351,19 +1361,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if(item.InvType == (sbyte)InventoryType.Landmark)
|
if(item.InvType == (sbyte)InventoryType.Landmark)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Copy) == 0)
|
// apply current to normal permission bits
|
||||||
mask &= ~((uint)PermissionMask.FoldedCopy);
|
uint newperms = item.CurrentPermissions;
|
||||||
if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Transfer) == 0)
|
|
||||||
|
if ((newperms & (uint)PermissionMask.Copy) == 0)
|
||||||
|
mask &= ~(uint)PermissionMask.Copy;
|
||||||
|
if ((newperms & (uint)PermissionMask.Transfer) == 0)
|
||||||
|
mask &= ~(uint)PermissionMask.Transfer;
|
||||||
|
if ((newperms & (uint)PermissionMask.Export) == 0)
|
||||||
|
mask &= ~((uint)PermissionMask.Export);
|
||||||
|
|
||||||
|
// apply next owner restricted by current to folded bits
|
||||||
|
newperms &= item.NextPermissions;
|
||||||
|
|
||||||
|
if ((newperms & (uint)PermissionMask.Copy) == 0)
|
||||||
|
mask &= ~((uint)PermissionMask.FoldedCopy);
|
||||||
|
if ((newperms & (uint)PermissionMask.Transfer) == 0)
|
||||||
mask &= ~((uint)PermissionMask.FoldedTransfer);
|
mask &= ~((uint)PermissionMask.FoldedTransfer);
|
||||||
if ((item.CurrentPermissions & item.NextPermissions & (uint)PermissionMask.Export) == 0)
|
if ((newperms & (uint)PermissionMask.Export) == 0)
|
||||||
mask &= ~((uint)PermissionMask.FoldedExport);
|
mask &= ~((uint)PermissionMask.FoldedExport);
|
||||||
|
|
||||||
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
|
||||||
mask &= ~(uint)PermissionMask.Copy;
|
|
||||||
if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)
|
|
||||||
mask &= ~(uint)PermissionMask.Transfer;
|
|
||||||
if ((item.CurrentPermissions & (uint)PermissionMask.Export) == 0)
|
|
||||||
mask &= ~((uint)PermissionMask.Export);
|
|
||||||
}
|
}
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
// Script state may, or may not, exist. Not having any, is NOT
|
// Script state may, or may not, exist. Not having any, is NOT
|
||||||
// ever a problem.
|
// ever a problem.
|
||||||
sceneObject.LoadScriptState(reader);
|
sceneObject.LoadScriptState(reader);
|
||||||
sceneObject.AggregateDeepPerms();
|
sceneObject.InvalidateDeepEffectivePerms();
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
// Script state may, or may not, exist. Not having any, is NOT
|
// Script state may, or may not, exist. Not having any, is NOT
|
||||||
// ever a problem.
|
// ever a problem.
|
||||||
sceneObject.LoadScriptState(doc);
|
sceneObject.LoadScriptState(doc);
|
||||||
sceneObject.AggregatePerms();
|
// sceneObject.AggregatePerms();
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
//obj.RegenerateFullIDs();
|
//obj.RegenerateFullIDs();
|
||||||
|
|
||||||
scene.AddNewSceneObject(obj, true);
|
scene.AddNewSceneObject(obj, true);
|
||||||
obj.AggregateDeepPerms();
|
obj.InvalidateDeepEffectivePerms();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -174,7 +174,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
|
||||||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||||
child.ApplyNextOwnerPermissions();
|
child.ApplyNextOwnerPermissions();
|
||||||
}
|
}
|
||||||
hostgroup.AggregatePerms();
|
hostgroup.InvalidateEffectivePerms();
|
||||||
}
|
}
|
||||||
|
|
||||||
hostgroup.RootPart.ObjectSaleType = 0;
|
hostgroup.RootPart.ObjectSaleType = 0;
|
||||||
|
|
|
@ -901,7 +901,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfully");
|
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfully");
|
||||||
|
|
||||||
// Update the founder with new group information.
|
// Update the founder with new group information.
|
||||||
SendAgentGroupDataUpdate(remoteClient, false);
|
SendAgentGroupDataUpdate(remoteClient, true);
|
||||||
|
|
||||||
return groupID;
|
return groupID;
|
||||||
}
|
}
|
||||||
|
@ -1520,6 +1520,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
lastname, activeGroupPowers, activeGroupName,
|
lastname, activeGroupPowers, activeGroupName,
|
||||||
activeGroupTitle);
|
activeGroupTitle);
|
||||||
|
|
||||||
|
|
||||||
if (tellOthers)
|
if (tellOthers)
|
||||||
SendScenePresenceUpdate(agentID, activeGroupTitle);
|
SendScenePresenceUpdate(agentID, activeGroupTitle);
|
||||||
|
|
||||||
|
|
|
@ -665,7 +665,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
|
||||||
taskItem.AssetID = asset.FullID;
|
taskItem.AssetID = asset.FullID;
|
||||||
|
|
||||||
host.Inventory.AddInventoryItem(taskItem, false);
|
host.Inventory.AddInventoryItem(taskItem, false);
|
||||||
host.ParentGroup.AggregatePerms();
|
host.ParentGroup.InvalidateEffectivePerms();
|
||||||
m_comms.DispatchReply(scriptID,1,assetID.ToString(),reqID.ToString());
|
m_comms.DispatchReply(scriptID,1,assetID.ToString(),reqID.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -525,7 +525,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
||||||
|
|
||||||
sceneObject.SetGroup(groupID, null);
|
sceneObject.SetGroup(groupID, null);
|
||||||
m_scene.AddNewSceneObject(sceneObject, true);
|
m_scene.AddNewSceneObject(sceneObject, true);
|
||||||
sceneObject.AggregatePerms();
|
sceneObject.InvalidateEffectivePerms();
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2048,7 +2048,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.Inventory.AddInventoryItemExclusive(taskItem, false);
|
m_host.Inventory.AddInventoryItemExclusive(taskItem, false);
|
||||||
else
|
else
|
||||||
m_host.Inventory.AddInventoryItem(taskItem, false);
|
m_host.Inventory.AddInventoryItem(taskItem, false);
|
||||||
m_host.ParentGroup.AggregatePerms();
|
m_host.ParentGroup.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
return taskItem;
|
return taskItem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,17 +87,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
||||||
uint port = 9999;
|
uint port = 9999;
|
||||||
MainServer.RemoveHttpServer(port);
|
MainServer.RemoveHttpServer(port);
|
||||||
|
|
||||||
|
m_engine = new MockScriptEngine();
|
||||||
|
m_urlModule = new UrlModule();
|
||||||
|
|
||||||
|
IConfigSource config = new IniConfigSource();
|
||||||
|
config.AddConfig("Network");
|
||||||
|
config.Configs["Network"].Set("ExternalHostNameForLSL", "127.0.0.1");
|
||||||
|
m_scene = new SceneHelpers().SetupScene();
|
||||||
|
|
||||||
BaseHttpServer server = new BaseHttpServer(port, false, 0, "");
|
BaseHttpServer server = new BaseHttpServer(port, false, 0, "");
|
||||||
MainServer.AddHttpServer(server);
|
MainServer.AddHttpServer(server);
|
||||||
MainServer.Instance = server;
|
MainServer.Instance = server;
|
||||||
|
|
||||||
server.Start();
|
server.Start();
|
||||||
|
|
||||||
m_engine = new MockScriptEngine();
|
SceneHelpers.SetupSceneModules(m_scene, config, m_engine, m_urlModule);
|
||||||
m_urlModule = new UrlModule();
|
|
||||||
|
|
||||||
m_scene = new SceneHelpers().SetupScene();
|
|
||||||
SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine, m_urlModule);
|
|
||||||
|
|
||||||
SceneObjectGroup so = SceneHelpers.AddSceneObject(m_scene);
|
SceneObjectGroup so = SceneHelpers.AddSceneObject(m_scene);
|
||||||
m_scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, so.RootPart);
|
m_scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, so.RootPart);
|
||||||
|
|
|
@ -626,6 +626,7 @@ namespace OpenSim.Tests.Common
|
||||||
//part.ObjectFlags |= (uint)PrimFlags.Phantom;
|
//part.ObjectFlags |= (uint)PrimFlags.Phantom;
|
||||||
|
|
||||||
scene.AddNewSceneObject(so, true);
|
scene.AddNewSceneObject(so, true);
|
||||||
|
so.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
return so;
|
return so;
|
||||||
}
|
}
|
||||||
|
@ -652,6 +653,7 @@ namespace OpenSim.Tests.Common
|
||||||
SceneObjectGroup so = CreateSceneObject(parts, ownerId, partNamePrefix, uuidTail);
|
SceneObjectGroup so = CreateSceneObject(parts, ownerId, partNamePrefix, uuidTail);
|
||||||
|
|
||||||
scene.AddNewSceneObject(so, false);
|
scene.AddNewSceneObject(so, false);
|
||||||
|
so.InvalidateDeepEffectivePerms();
|
||||||
|
|
||||||
return so;
|
return so;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,8 +52,11 @@
|
||||||
; name and use default public port 9000. The private port is not used
|
; name and use default public port 9000. The private port is not used
|
||||||
; in the configuration for a standalone.
|
; in the configuration for a standalone.
|
||||||
|
|
||||||
;# {BaseURL} {} {BaseURL} {"http://example.com" "http://127.0.0.1"} "http://127.0.0.1"
|
;# {BaseHostname} {} {BaseHostname} {"example.com" "127.0.0.1"} "127.0.0.1"
|
||||||
BaseURL = http://127.0.0.1
|
BaseHostname = "127.0.0.1"
|
||||||
|
|
||||||
|
;# {BaseURL} {} {BaseURL} {"http://${Const|BaseHostname}} "http://${Const|BaseHostname}"
|
||||||
|
BaseURL = http://${Const|BaseHostname}
|
||||||
|
|
||||||
;# {PublicPort} {} {PublicPort} {8002 9000} "8002"
|
;# {PublicPort} {} {PublicPort} {8002 9000} "8002"
|
||||||
PublicPort = "8002"
|
PublicPort = "8002"
|
||||||
|
@ -525,10 +528,9 @@
|
||||||
|
|
||||||
;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {}
|
;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {}
|
||||||
;; Hostname to use in llRequestURL/llRequestSecureURL
|
;; Hostname to use in llRequestURL/llRequestSecureURL
|
||||||
;; if not defined - default machine name is being used
|
;; if not defined - llRequestURL/llRequestSecureURL are disabled
|
||||||
;; (on Windows this mean NETBIOS name - useably only inside local network)
|
ExternalHostNameForLSL = ${Const|BaseHostname}
|
||||||
; ExternalHostNameForLSL = "127.0.0.1"
|
|
||||||
|
|
||||||
;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim
|
;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim
|
||||||
;; What is reported as the "X-Secondlife-Shard"
|
;; What is reported as the "X-Secondlife-Shard"
|
||||||
;; Defaults to the user server url if not set
|
;; Defaults to the user server url if not set
|
||||||
|
|
|
@ -600,8 +600,7 @@
|
||||||
; HttpBodyMaxLenMAX=16384
|
; HttpBodyMaxLenMAX=16384
|
||||||
|
|
||||||
; Hostname to use in llRequestURL/llRequestSecureURL
|
; Hostname to use in llRequestURL/llRequestSecureURL
|
||||||
; if not defined - default machine name is being used
|
; if not defined - llRequestURL/llRequestSecureURL are disabled
|
||||||
; (on Windows this mean NETBIOS name - useably only inside local network)
|
|
||||||
; ExternalHostNameForLSL=127.0.0.1
|
; ExternalHostNameForLSL=127.0.0.1
|
||||||
|
|
||||||
; Disallow the following address ranges for user scripting calls (e.g. llHttpRequest())
|
; Disallow the following address ranges for user scripting calls (e.g. llHttpRequest())
|
||||||
|
@ -1899,7 +1898,8 @@
|
||||||
|
|
||||||
; regex specifying for which regions concierge service is desired; if
|
; regex specifying for which regions concierge service is desired; if
|
||||||
; empty, then for all
|
; empty, then for all
|
||||||
regions = "^MeetingSpace-"
|
;regions = "^MeetingSpace-"
|
||||||
|
regions = ""
|
||||||
|
|
||||||
; for each region that matches the regions regexp you can provide
|
; for each region that matches the regions regexp you can provide
|
||||||
; (optionally) a welcome template using format substitution:
|
; (optionally) a welcome template using format substitution:
|
||||||
|
@ -1907,14 +1907,14 @@
|
||||||
; {1} is replaced with the name of the region
|
; {1} is replaced with the name of the region
|
||||||
; {2} is replaced with the name of the concierge (whoami variable above)
|
; {2} is replaced with the name of the concierge (whoami variable above)
|
||||||
|
|
||||||
welcomes = /path/to/welcome/template/directory
|
;welcomes = /path/to/welcome/template/directory
|
||||||
|
|
||||||
; Concierge can send attendee lists to an event broker whenever an
|
; Concierge can send attendee lists to an event broker whenever an
|
||||||
; avatar enters or leaves a concierged region. the URL is subject
|
; avatar enters or leaves a concierged region. the URL is subject
|
||||||
; to format substitution:
|
; to format substitution:
|
||||||
; {0} is replaced with the region's name
|
; {0} is replaced with the region's name
|
||||||
; {1} is replaced with the region's UUID
|
; {1} is replaced with the region's UUID
|
||||||
broker = "http://broker.place.com/{1}"
|
;broker = "http://broker.place.com/{1}"
|
||||||
|
|
||||||
|
|
||||||
[MRM]
|
[MRM]
|
||||||
|
|
Loading…
Reference in New Issue