diff options
Applied patch from Mantis# 3240, thanks tlaukkan/Tommil
Diffstat (limited to 'OpenSim/Client/MXP/PacketHandler')
-rw-r--r-- | OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs | 59 |
1 files changed, 47 insertions, 12 deletions
diff --git a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs index e540286..1eceef6 100644 --- a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs +++ b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs | |||
@@ -216,8 +216,8 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
216 | m_log.Info("Pending Sessions: " + PendingSessionCount); | 216 | m_log.Info("Pending Sessions: " + PendingSessionCount); |
217 | m_log.Info("Sessions: " + SessionCount + " (Clients: " + Clients.Count + " )"); | 217 | m_log.Info("Sessions: " + SessionCount + " (Clients: " + Clients.Count + " )"); |
218 | m_log.Info("Transmitter Alive?: " + IsTransmitterAlive); | 218 | m_log.Info("Transmitter Alive?: " + IsTransmitterAlive); |
219 | m_log.Info("Packets Sent/Recieved: " + PacketsSent + " / " + PacketsReceived); | 219 | m_log.Info("Packets Sent/Received: " + PacketsSent + " / " + PacketsReceived); |
220 | m_log.Info("Bytes Sent/Recieved: " + BytesSent + " / " + BytesReceived); | 220 | m_log.Info("Bytes Sent/Received: " + BytesSent + " / " + BytesReceived); |
221 | m_log.Info("Send/Recieve Rate (bps): " + SendRate + " / " + ReceiveRate); | 221 | m_log.Info("Send/Recieve Rate (bps): " + SendRate + " / " + ReceiveRate); |
222 | } | 222 | } |
223 | 223 | ||
@@ -247,12 +247,43 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
247 | sessionsToRemove.Clear(); | 247 | sessionsToRemove.Clear(); |
248 | } | 248 | } |
249 | 249 | ||
250 | public bool AuthoriseUser(string participantName, string pass, UUID scene) | 250 | public bool AuthoriseUser(string participantName, string password, UUID sceneId, out UUID userId, out string firstName, out string lastName) |
251 | { | 251 | { |
252 | if (Scenes.ContainsKey(scene)) | 252 | userId = UUID.Zero; |
253 | return true; | 253 | firstName = ""; |
254 | lastName = ""; | ||
254 | 255 | ||
255 | return false; | 256 | if (!Scenes.ContainsKey(sceneId)) |
257 | { | ||
258 | m_log.Info("Login failed as region was not found: " + sceneId); | ||
259 | return false; | ||
260 | } | ||
261 | |||
262 | string[] nameParts=participantName.Split(' '); | ||
263 | if(nameParts.Length!=2) | ||
264 | { | ||
265 | m_log.Info("Login failed as user name is not formed of first and last name separated by space: " + participantName); | ||
266 | return false; | ||
267 | } | ||
268 | firstName = nameParts[0]; | ||
269 | lastName = nameParts[1]; | ||
270 | |||
271 | UserProfileData userProfile = Scenes[sceneId].CommsManager.UserService.GetUserProfile(firstName, lastName); | ||
272 | if (userProfile == null) | ||
273 | { | ||
274 | m_log.Info("Login failed as user was not found: " + participantName); | ||
275 | return false; | ||
276 | } | ||
277 | userId = userProfile.ID; | ||
278 | |||
279 | if (!password.StartsWith("$1$")) | ||
280 | { | ||
281 | password = "$1$" + Util.Md5Hash(password); | ||
282 | } | ||
283 | password = password.Remove(0, 3); //remove $1$ | ||
284 | string s = Util.Md5Hash(password + ":" + userProfile.PasswordSalt); | ||
285 | return (userProfile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase) | ||
286 | || userProfile.PasswordHash.Equals(password, StringComparison.InvariantCultureIgnoreCase)); | ||
256 | } | 287 | } |
257 | 288 | ||
258 | public void ProcessMessages() | 289 | public void ProcessMessages() |
@@ -278,9 +309,13 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
278 | 309 | ||
279 | JoinRequestMessage joinRequestMessage = (JoinRequestMessage) message; | 310 | JoinRequestMessage joinRequestMessage = (JoinRequestMessage) message; |
280 | 311 | ||
312 | UUID userId; | ||
313 | string firstName; | ||
314 | string lastName; | ||
315 | |||
281 | bool authorized = AuthoriseUser(joinRequestMessage.ParticipantName, | 316 | bool authorized = AuthoriseUser(joinRequestMessage.ParticipantName, |
282 | joinRequestMessage.ParticipantPassphrase, | 317 | joinRequestMessage.ParticipantPassphrase, |
283 | new UUID(joinRequestMessage.BubbleId)); | 318 | new UUID(joinRequestMessage.BubbleId), out userId, out firstName, out lastName); |
284 | 319 | ||
285 | if (authorized) | 320 | if (authorized) |
286 | { | 321 | { |
@@ -292,10 +327,10 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
292 | (session.IsIncoming ? "from" : "to") + " " + session.RemoteEndPoint.Address + ":" + | 327 | (session.IsIncoming ? "from" : "to") + " " + session.RemoteEndPoint.Address + ":" + |
293 | session.RemoteEndPoint.Port + ")"); | 328 | session.RemoteEndPoint.Port + ")"); |
294 | 329 | ||
295 | AcceptConnection(session, joinRequestMessage, mxpSessionID); | 330 | AcceptConnection(session, joinRequestMessage, mxpSessionID,userId); |
296 | 331 | ||
297 | MXPClientView client = new MXPClientView(session, mxpSessionID, target, | 332 | MXPClientView client = new MXPClientView(session, mxpSessionID,userId, target, |
298 | joinRequestMessage.ParticipantName); | 333 | firstName, lastName); |
299 | m_log.Info("[MXP ClientStack] Created Client"); | 334 | m_log.Info("[MXP ClientStack] Created Client"); |
300 | Clients.Add(client); | 335 | Clients.Add(client); |
301 | 336 | ||
@@ -393,7 +428,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
393 | } | 428 | } |
394 | } | 429 | } |
395 | 430 | ||
396 | private void AcceptConnection(Session session, JoinRequestMessage joinRequestMessage, UUID mxpSessionID) | 431 | private void AcceptConnection(Session session, JoinRequestMessage joinRequestMessage, UUID mxpSessionID, UUID userId) |
397 | { | 432 | { |
398 | JoinResponseMessage joinResponseMessage = (JoinResponseMessage)MessageFactory.Current.ReserveMessage( | 433 | JoinResponseMessage joinResponseMessage = (JoinResponseMessage)MessageFactory.Current.ReserveMessage( |
399 | typeof(JoinResponseMessage)); | 434 | typeof(JoinResponseMessage)); |
@@ -401,7 +436,7 @@ namespace OpenSim.Client.MXP.PacketHandler | |||
401 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; | 436 | joinResponseMessage.RequestMessageId = joinRequestMessage.MessageId; |
402 | joinResponseMessage.FailureCode = 0; | 437 | joinResponseMessage.FailureCode = 0; |
403 | 438 | ||
404 | joinResponseMessage.ParticipantId = mxpSessionID.Guid; | 439 | joinResponseMessage.ParticipantId = userId.Guid; |
405 | joinResponseMessage.CloudUrl = cloudUrl; | 440 | joinResponseMessage.CloudUrl = cloudUrl; |
406 | 441 | ||
407 | joinResponseMessage.BubbleName = Scenes[new UUID(joinRequestMessage.BubbleId)].RegionInfo.RegionName; | 442 | joinResponseMessage.BubbleName = Scenes[new UUID(joinRequestMessage.BubbleId)].RegionInfo.RegionName; |