diff options
author | Diva Canto | 2010-08-19 18:55:30 -0700 |
---|---|---|
committer | Diva Canto | 2010-08-19 18:55:30 -0700 |
commit | 1955b797598d61548521c444ea8d3721fd5435ba (patch) | |
tree | f9c111e3e8a34e6ef56e1aeddea90a85dbe702f9 /OpenSim/Services/HypergridService/UserAgentService.cs | |
parent | These files want to be committed. This time I'm doing it separately from othe... (diff) | |
download | opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.zip opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.gz opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.bz2 opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.xz |
Partial rewrite of client IP verification. Not completely finished yet, and untested. Committing to move to my other computer.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/HypergridService/UserAgentService.cs | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 181d7f2..6b14e21 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs | |||
@@ -131,10 +131,11 @@ namespace OpenSim.Services.HypergridService | |||
131 | return home; | 131 | return home; |
132 | } | 132 | } |
133 | 133 | ||
134 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason) | 134 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, IPEndPoint clientIP, out string reason) |
135 | { | 135 | { |
136 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} to grid {2}", | 136 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", |
137 | agentCircuit.firstname, agentCircuit.lastname, gatekeeper.ExternalHostName +":"+ gatekeeper.HttpPort); | 137 | agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "(stored IP)" : clientIP.ToString()), |
138 | gatekeeper.ExternalHostName +":"+ gatekeeper.HttpPort); | ||
138 | 139 | ||
139 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination | 140 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination |
140 | GridRegion region = new GridRegion(gatekeeper); | 141 | GridRegion region = new GridRegion(gatekeeper); |
@@ -149,11 +150,12 @@ namespace OpenSim.Services.HypergridService | |||
149 | 150 | ||
150 | //bool success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); | 151 | //bool success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); |
151 | bool success = false; | 152 | bool success = false; |
153 | string myExternalIP = string.Empty; | ||
152 | string gridName = "http://" + gatekeeper.ExternalHostName + ":" + gatekeeper.HttpPort; | 154 | string gridName = "http://" + gatekeeper.ExternalHostName + ":" + gatekeeper.HttpPort; |
153 | if (m_GridName == gridName) | 155 | if (m_GridName == gridName) |
154 | success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); | 156 | success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); |
155 | else | 157 | else |
156 | success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); | 158 | success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason); |
157 | 159 | ||
158 | if (!success) | 160 | if (!success) |
159 | { | 161 | { |
@@ -167,15 +169,25 @@ namespace OpenSim.Services.HypergridService | |||
167 | return false; | 169 | return false; |
168 | } | 170 | } |
169 | 171 | ||
172 | // else set the IP addresses associated with this client | ||
173 | if (clientIP != null) | ||
174 | m_TravelingAgents[agentCircuit.SessionID].ClientIPAddress = clientIP.ToString(); | ||
175 | m_TravelingAgents[agentCircuit.SessionID].MyIpAddress = myExternalIP; | ||
170 | return true; | 176 | return true; |
171 | } | 177 | } |
172 | 178 | ||
173 | public void SetClientToken(UUID sessionID, string token) | 179 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason) |
180 | { | ||
181 | reason = string.Empty; | ||
182 | return LoginAgentToGrid(agentCircuit, gatekeeper, finalDestination, null, out reason); | ||
183 | } | ||
184 | |||
185 | private void SetClientIP(UUID sessionID, string ip) | ||
174 | { | 186 | { |
175 | if (m_TravelingAgents.ContainsKey(sessionID)) | 187 | if (m_TravelingAgents.ContainsKey(sessionID)) |
176 | { | 188 | { |
177 | m_log.DebugFormat("[USER AGENT SERVICE]: Setting token {0} for session {1}", token, sessionID); | 189 | m_log.DebugFormat("[USER AGENT SERVICE]: Setting IP {0} for session {1}", ip, sessionID); |
178 | m_TravelingAgents[sessionID].ClientToken = token; | 190 | m_TravelingAgents[sessionID].ClientIPAddress = ip; |
179 | } | 191 | } |
180 | } | 192 | } |
181 | 193 | ||
@@ -196,7 +208,7 @@ namespace OpenSim.Services.HypergridService | |||
196 | travel.GridExternalName = "http://" + region.ExternalHostName + ":" + region.HttpPort; | 208 | travel.GridExternalName = "http://" + region.ExternalHostName + ":" + region.HttpPort; |
197 | travel.ServiceToken = agentCircuit.ServiceSessionID; | 209 | travel.ServiceToken = agentCircuit.ServiceSessionID; |
198 | if (old != null) | 210 | if (old != null) |
199 | travel.ClientToken = old.ClientToken; | 211 | travel.ClientIPAddress = old.ClientIPAddress; |
200 | 212 | ||
201 | return old; | 213 | return old; |
202 | } | 214 | } |
@@ -233,15 +245,22 @@ namespace OpenSim.Services.HypergridService | |||
233 | return travel.GridExternalName == thisGridExternalName; | 245 | return travel.GridExternalName == thisGridExternalName; |
234 | } | 246 | } |
235 | 247 | ||
236 | public bool VerifyClient(UUID sessionID, string token) | 248 | public bool VerifyClient(UUID sessionID, string reportedIP) |
237 | { | 249 | { |
238 | if (m_BypassClientVerification) | 250 | if (m_BypassClientVerification) |
239 | return true; | 251 | return true; |
240 | 252 | ||
241 | m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with token {1}", sessionID, token); | 253 | m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with reported IP {1}.", |
254 | sessionID, reportedIP); | ||
242 | 255 | ||
243 | if (m_TravelingAgents.ContainsKey(sessionID)) | 256 | if (m_TravelingAgents.ContainsKey(sessionID)) |
244 | return m_TravelingAgents[sessionID].ClientToken == token; | 257 | { |
258 | m_log.DebugFormat("[USER AGENT SERVICE]: Comparing with login IP {0} and MyIP {1}", | ||
259 | m_TravelingAgents[sessionID].ClientIPAddress, m_TravelingAgents[sessionID].MyIpAddress); | ||
260 | |||
261 | return m_TravelingAgents[sessionID].ClientIPAddress == reportedIP || | ||
262 | m_TravelingAgents[sessionID].MyIpAddress == reportedIP; // NATed | ||
263 | } | ||
245 | 264 | ||
246 | return false; | 265 | return false; |
247 | } | 266 | } |
@@ -266,7 +285,8 @@ namespace OpenSim.Services.HypergridService | |||
266 | public UUID UserID; | 285 | public UUID UserID; |
267 | public string GridExternalName = string.Empty; | 286 | public string GridExternalName = string.Empty; |
268 | public string ServiceToken = string.Empty; | 287 | public string ServiceToken = string.Empty; |
269 | public string ClientToken = string.Empty; | 288 | public string ClientIPAddress = string.Empty; // as seen from this user agent service |
289 | public string MyIpAddress = string.Empty; // the user agent service's external IP, as seen from the next gatekeeper | ||
270 | } | 290 | } |
271 | 291 | ||
272 | } | 292 | } |