diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 79 |
1 files changed, 45 insertions, 34 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 9cfe869..e443c1d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -230,6 +230,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
230 | 230 | ||
231 | public int MaxUndoCount { get; set; } | 231 | public int MaxUndoCount { get; set; } |
232 | 232 | ||
233 | public bool SeeIntoRegion { get; set; } | ||
234 | |||
233 | // Using this for RegionReady module to prevent LoginsDisabled from changing under our feet; | 235 | // Using this for RegionReady module to prevent LoginsDisabled from changing under our feet; |
234 | public bool LoginLock = false; | 236 | public bool LoginLock = false; |
235 | 237 | ||
@@ -839,6 +841,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
839 | //Animation states | 841 | //Animation states |
840 | m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false); | 842 | m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false); |
841 | 843 | ||
844 | SeeIntoRegion = startupConfig.GetBoolean("see_into_region", true); | ||
845 | |||
842 | MaxUndoCount = startupConfig.GetInt("MaxPrimUndos", 20); | 846 | MaxUndoCount = startupConfig.GetInt("MaxPrimUndos", 20); |
843 | 847 | ||
844 | PhysicalPrims = startupConfig.GetBoolean("physical_prim", PhysicalPrims); | 848 | PhysicalPrims = startupConfig.GetBoolean("physical_prim", PhysicalPrims); |
@@ -4010,51 +4014,58 @@ namespace OpenSim.Region.Framework.Scenes | |||
4010 | m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); | 4014 | m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); |
4011 | } | 4015 | } |
4012 | 4016 | ||
4013 | List<UUID> agentGroups = new List<UUID>(); | 4017 | // We only test the things below when we want to cut off |
4014 | 4018 | // child agents from being present in the scene for which their root | |
4015 | if (m_groupsModule != null) | 4019 | // agent isn't allowed. Otherwise, we allow child agents. The test for |
4020 | // the root is done elsewhere (QueryAccess) | ||
4021 | if (!SeeIntoRegion) | ||
4016 | { | 4022 | { |
4017 | GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID); | 4023 | List<UUID> agentGroups = new List<UUID>(); |
4018 | 4024 | ||
4019 | if (GroupMembership != null) | 4025 | if (m_groupsModule != null) |
4020 | { | ||
4021 | for (int i = 0; i < GroupMembership.Length; i++) | ||
4022 | agentGroups.Add(GroupMembership[i].GroupID); | ||
4023 | } | ||
4024 | else | ||
4025 | { | 4026 | { |
4026 | m_log.ErrorFormat("[CONNECTION BEGIN]: GroupMembership is null!"); | 4027 | GroupMembershipData[] GroupMembership = m_groupsModule.GetMembershipData(agent.AgentID); |
4028 | |||
4029 | if (GroupMembership != null) | ||
4030 | { | ||
4031 | for (int i = 0; i < GroupMembership.Length; i++) | ||
4032 | agentGroups.Add(GroupMembership[i].GroupID); | ||
4033 | } | ||
4034 | else | ||
4035 | { | ||
4036 | m_log.ErrorFormat("[CONNECTION BEGIN]: GroupMembership is null!"); | ||
4037 | } | ||
4027 | } | 4038 | } |
4028 | } | ||
4029 | 4039 | ||
4030 | bool groupAccess = false; | 4040 | bool groupAccess = false; |
4031 | UUID[] estateGroups = RegionInfo.EstateSettings.EstateGroups; | 4041 | UUID[] estateGroups = RegionInfo.EstateSettings.EstateGroups; |
4032 | 4042 | ||
4033 | if (estateGroups != null) | 4043 | if (estateGroups != null) |
4034 | { | ||
4035 | foreach (UUID group in estateGroups) | ||
4036 | { | 4044 | { |
4037 | if (agentGroups.Contains(group)) | 4045 | foreach (UUID group in estateGroups) |
4038 | { | 4046 | { |
4039 | groupAccess = true; | 4047 | if (agentGroups.Contains(group)) |
4040 | break; | 4048 | { |
4049 | groupAccess = true; | ||
4050 | break; | ||
4051 | } | ||
4041 | } | 4052 | } |
4042 | } | 4053 | } |
4043 | } | 4054 | else |
4044 | else | 4055 | { |
4045 | { | 4056 | m_log.ErrorFormat("[CONNECTION BEGIN]: EstateGroups is null!"); |
4046 | m_log.ErrorFormat("[CONNECTION BEGIN]: EstateGroups is null!"); | 4057 | } |
4047 | } | ||
4048 | 4058 | ||
4049 | if (!RegionInfo.EstateSettings.PublicAccess && | 4059 | if (!RegionInfo.EstateSettings.PublicAccess && |
4050 | !RegionInfo.EstateSettings.HasAccess(agent.AgentID) && | 4060 | !RegionInfo.EstateSettings.HasAccess(agent.AgentID) && |
4051 | !groupAccess) | 4061 | !groupAccess) |
4052 | { | 4062 | { |
4053 | m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate", | 4063 | m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the estate", |
4054 | agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName); | 4064 | agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName); |
4055 | reason = String.Format("Denied access to private region {0}: You are not on the access list for that region.", | 4065 | reason = String.Format("Denied access to private region {0}: You are not on the access list for that region.", |
4056 | RegionInfo.RegionName); | 4066 | RegionInfo.RegionName); |
4057 | return false; | 4067 | return false; |
4068 | } | ||
4058 | } | 4069 | } |
4059 | 4070 | ||
4060 | // TODO: estate/region settings are not properly hooked up | 4071 | // TODO: estate/region settings are not properly hooked up |