From 3c6becd52495360b24b3760a30fb0e007f5a16a3 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 21 Jul 2014 23:53:33 +0100
Subject: On login and first HG entrance to a foreign grid, perform query
access checks before proceeding.
---
.../Simulation/LocalSimulationConnector.cs | 26 +++++++++++++---------
OpenSim/Region/Framework/Scenes/Scene.cs | 1 +
.../Services/HypergridService/GatekeeperService.cs | 7 ++++++
OpenSim/Services/Interfaces/ISimulationService.cs | 6 +++--
OpenSim/Services/LLLoginService/LLLoginService.cs | 9 +++++++-
5 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index e6de0b6..50105a6 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -283,18 +283,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
// s.RegionInfo.RegionName, destination.RegionHandle);
uint size = m_scenes[destination.RegionID].RegionInfo.RegionSizeX;
- float theirVersionNumber = 0f;
- string[] versionComponents = theirversion.Split(new char[] { '/' });
- if (versionComponents.Length >= 2)
- float.TryParse(versionComponents[1], out theirVersionNumber);
-
- // Var regions here, and the requesting simulator is in an older version.
- // We will forbide this, because it crashes the viewers
- if (theirVersionNumber < 0.3f && size > 256)
+ if (theirversion != null)
{
- reason = "Destination is a variable-sized region, and source is an old simulator. Consider upgrading.";
- m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Request to access this variable-sized region from {0} simulator was denied", theirVersionNumber);
- return false;
+ float theirVersionNumber = 0f;
+ string[] versionComponents = theirversion.Split(new char[] { '/' });
+ if (versionComponents.Length >= 2)
+ float.TryParse(versionComponents[1], out theirVersionNumber);
+
+ // Var regions here, and the requesting simulator is in an older version.
+ // We will forbide this, because it crashes the viewers
+ if (theirVersionNumber < 0.3f && size > 256)
+ {
+ reason = "Destination is a variable-sized region, and source is an old simulator. Consider upgrading.";
+ m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Request to access this variable-sized region from {0} simulator was denied", theirVersionNumber);
+ return false;
+
+ }
}
return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, out reason);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 27929c6..4bbe68b 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -5514,6 +5514,7 @@ namespace OpenSim.Region.Framework.Scenes
int num = m_sceneGraph.GetRootAgentCount();
+ Console.WriteLine("{0} {1}", num, RegionInfo.RegionSettings.AgentLimit);
if (num >= RegionInfo.RegionSettings.AgentLimit)
{
if (!Permissions.IsAdministrator(agentID))
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 69a593b..771114e 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -432,6 +432,13 @@ namespace OpenSim.Services.HypergridService
m_log.DebugFormat("[GATEKEEPER SERVICE]: Launching {0}, Teleport Flags: {1}", aCircuit.Name, loginFlag);
+ string version;
+
+ if (!m_SimulationService.QueryAccess(
+ destination, aCircuit.AgentID, aCircuit.ServiceURLs["HomeURI"].ToString(),
+ true, aCircuit.startpos, null, out version, out reason))
+ return false;
+
return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason);
}
diff --git a/OpenSim/Services/Interfaces/ISimulationService.cs b/OpenSim/Services/Interfaces/ISimulationService.cs
index 12ab478..ef014f9 100644
--- a/OpenSim/Services/Interfaces/ISimulationService.cs
+++ b/OpenSim/Services/Interfaces/ISimulationService.cs
@@ -85,8 +85,10 @@ namespace OpenSim.Services.Interfaces
/// The visitor's Home URI. Will be missing (null) in older OpenSims.
/// True: via teleport; False: via cross (walking)
/// Position in the region
- /// version that the requesting simulator is runing
- /// version that the target simulator is running
+ ///
+ /// Version that the requesting simulator is runing. If null then no version check is carried out.
+ ///
+ /// Version that the target simulator is running
/// [out] Optional error message
/// True: ok; False: not allowed
bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, out string version, out string reason);
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 5888cce..264a630 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -959,12 +959,19 @@ namespace OpenSim.Services.LLLoginService
private bool LaunchAgentDirectly(ISimulationService simConnector, GridRegion region, AgentCircuitData aCircuit, TeleportFlags flags, out string reason)
{
+ string version;
+
+ if (!simConnector.QueryAccess(region, aCircuit.AgentID, null, true, aCircuit.startpos, null, out version, out reason))
+ return false;
+
return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason);
}
private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason)
{
- m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName);
+ string version;
+
+ m_log.Debug("[LLOGIN SERVICE]: Launching agent at " + destination.RegionName);
if (m_UserAgentService.LoginAgentToGrid(null, aCircuit, gatekeeper, destination, true, out reason))
return true;
return false;
--
cgit v1.1