Added config var that we all thought was already there: see_into_region. (Note: different from the defunct see_into_neighboring_sim, which used to control the process from the other end). This enables child agents in neighbors for which the root agent doesn't have permission to be in.

TeleportWork
Diva Canto 2013-07-24 11:23:19 -07:00
parent d8a6eb5641
commit e103e34f1d
2 changed files with 49 additions and 35 deletions

View File

@ -230,6 +230,8 @@ namespace OpenSim.Region.Framework.Scenes
public int MaxUndoCount { get; set; } public int MaxUndoCount { get; set; }
public bool SeeIntoRegion { get; set; }
// Using this for RegionReady module to prevent LoginsDisabled from changing under our feet; // Using this for RegionReady module to prevent LoginsDisabled from changing under our feet;
public bool LoginLock = false; public bool LoginLock = false;
@ -839,6 +841,8 @@ namespace OpenSim.Region.Framework.Scenes
//Animation states //Animation states
m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false); m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false);
SeeIntoRegion = startupConfig.GetBoolean("see_into_region", true);
MaxUndoCount = startupConfig.GetInt("MaxPrimUndos", 20); MaxUndoCount = startupConfig.GetInt("MaxPrimUndos", 20);
PhysicalPrims = startupConfig.GetBoolean("physical_prim", PhysicalPrims); PhysicalPrims = startupConfig.GetBoolean("physical_prim", PhysicalPrims);
@ -4010,52 +4014,59 @@ namespace OpenSim.Region.Framework.Scenes
m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!");
} }
List<UUID> agentGroups = new List<UUID>(); // We only test the things below when we want to cut off
// child agents from being present in the scene for which their root
if (m_groupsModule != null) // agent isn't allowed. Otherwise, we allow child agents. The test for
// the root is done elsewhere (QueryAccess)
if (!SeeIntoRegion)
{ {
GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID); List<UUID> agentGroups = new List<UUID>();
if (GroupMembership != null) if (m_groupsModule != null)
{ {
for (int i = 0; i < GroupMembership.Length; i++) GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID);
agentGroups.Add(GroupMembership[i].GroupID);
if (GroupMembership != null)
{
for (int i = 0; i < GroupMembership.Length; i++)
agentGroups.Add(GroupMembership[i].GroupID);
}
else
{
m_log.ErrorFormat("[CONNECTION BEGIN]: GroupMembership is null!");
}
}
bool groupAccess = false;
UUID[] estateGroups = RegionInfo.EstateSettings.EstateGroups;
if (estateGroups != null)
{
foreach (UUID group in estateGroups)
{
if (agentGroups.Contains(group))
{
groupAccess = true;
break;
}
}
} }
else else
{ {
m_log.ErrorFormat("[CONNECTION BEGIN]: GroupMembership is null!"); m_log.ErrorFormat("[CONNECTION BEGIN]: EstateGroups is null!");
} }
}
bool groupAccess = false; if (!RegionInfo.EstateSettings.PublicAccess &&
UUID[] estateGroups = RegionInfo.EstateSettings.EstateGroups; !RegionInfo.EstateSettings.HasAccess(agent.AgentID) &&
!groupAccess)
if (estateGroups != null)
{
foreach (UUID group in estateGroups)
{ {
if (agentGroups.Contains(group)) m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate",
{ agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName);
groupAccess = true; reason = String.Format("Denied access to private region {0}: You are not on the access list for that region.",
break; RegionInfo.RegionName);
} return false;
} }
} }
else
{
m_log.ErrorFormat("[CONNECTION BEGIN]: EstateGroups is null!");
}
if (!RegionInfo.EstateSettings.PublicAccess &&
!RegionInfo.EstateSettings.HasAccess(agent.AgentID) &&
!groupAccess)
{
m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate",
agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName);
reason = String.Format("Denied access to private region {0}: You are not on the access list for that region.",
RegionInfo.RegionName);
return false;
}
// TODO: estate/region settings are not properly hooked up // TODO: estate/region settings are not properly hooked up
// to ILandObject.isRestrictedFromLand() // to ILandObject.isRestrictedFromLand()

View File

@ -86,6 +86,9 @@
;; from the selected region_info_source. ;; from the selected region_info_source.
allow_regionless = false allow_regionless = false
;; Allow child agents to see into the region even if their root counterpart isn't allowed in here
see_into_region = true
; Maximum number of position, rotation and scale changes for each prim that the simulator will store for later undos ; Maximum number of position, rotation and scale changes for each prim that the simulator will store for later undos
; Increasing this number will increase memory usage. ; Increasing this number will increase memory usage.
MaxPrimUndos = 20 MaxPrimUndos = 20