From 0d37907c581f0417b7dece11417bd2e61de5a61e Mon Sep 17 00:00:00 2001 From: Dahlia Trimble Date: Sun, 15 Mar 2009 16:17:01 +0000 Subject: Thanks Tommil for a patch which added support for creating user accounts automatically in local sandbox if accounts authenticate is set off and connecting with MXP protocol. Mantis #3300 --- OpenSim/Client/MXP/ClientStack/MXPClientView.cs | 2 +- OpenSim/Client/MXP/MXPModule.cs | 5 ++- .../Client/MXP/PacketHandler/MXPPacketServer.cs | 45 +++++++++++++++------- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index 5ca85f1..9052443 100644 --- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs +++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs @@ -45,7 +45,7 @@ using MXP.Common.Proto; namespace OpenSim.Client.MXP.ClientStack { - class MXPClientView : IClientAPI, IClientCore + public class MXPClientView : IClientAPI, IClientCore { internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); diff --git a/OpenSim/Client/MXP/MXPModule.cs b/OpenSim/Client/MXP/MXPModule.cs index e0891ca..6ec7744 100644 --- a/OpenSim/Client/MXP/MXPModule.cs +++ b/OpenSim/Client/MXP/MXPModule.cs @@ -38,6 +38,9 @@ using OpenSim.Region.Framework.Scenes; namespace OpenSim.Client.MXP { + /** + * MXP Client Module which adds MXP support to client / region communication. + */ public class MXPModule : IRegionModule { @@ -70,7 +73,7 @@ namespace OpenSim.Client.MXP m_port = con.GetInt("Port", m_port); - m_server = new MXPPacketServer(m_port, m_scenes); + m_server = new MXPPacketServer(m_port, m_scenes,m_config.Configs["StandAlone"].GetBoolean("accounts_authenticate",true)); m_ticker.AutoReset = false; m_ticker.Elapsed += ticker_Elapsed; diff --git a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs index 4f77f2c..ba7bd00 100644 --- a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs +++ b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs @@ -39,6 +39,7 @@ using OpenMetaverse; using OpenSim.Client.MXP.ClientStack; using OpenSim.Framework; using OpenSim.Region.Framework.Scenes; +using OpenSim.Framework.Communications; namespace OpenSim.Client.MXP.PacketHandler { @@ -59,6 +60,8 @@ namespace OpenSim.Client.MXP.PacketHandler private readonly IList m_sessionsToRemove = new List(); private readonly int m_port; + private readonly bool m_accountsAuthenticate; + private readonly String m_programName; private readonly byte m_programMajorVersion; private readonly byte m_programMinorVersion; @@ -67,13 +70,13 @@ namespace OpenSim.Client.MXP.PacketHandler #region Constructors - public MXPPacketServer(int port, Dictionary scenes) + public MXPPacketServer(int port, Dictionary scenes, bool accountsAuthenticate) { - this.m_port = port; + m_port = port; + m_accountsAuthenticate = accountsAuthenticate; m_scenes = scenes; - m_programMinorVersion = 63; m_programMajorVersion = 0; m_programName = "OpenSimulator"; @@ -259,7 +262,7 @@ namespace OpenSim.Client.MXP.PacketHandler m_log.Info("Login failed as region was not found: " + sceneId); return false; } - + string[] nameParts=participantName.Split(' '); if (nameParts.Length != 2) { @@ -270,21 +273,35 @@ namespace OpenSim.Client.MXP.PacketHandler lastName = nameParts[1]; UserProfileData userProfile = m_scenes[sceneId].CommsManager.UserService.GetUserProfile(firstName, lastName); - if (userProfile == null) + if (userProfile == null && !m_accountsAuthenticate) { - m_log.Info("Login failed as user was not found: " + participantName); - return false; + userId = ((UserManagerBase)m_scenes[sceneId].CommsManager.UserService).AddUser(firstName, lastName, "test", "", 1000, 1000); + } + else + { + if (userProfile == null) + { + m_log.Info("Login failed as user was not found: " + participantName); + return false; + } + userId = userProfile.ID; } - userId = userProfile.ID; - if (!password.StartsWith("$1$")) + if (m_accountsAuthenticate) + { + if (!password.StartsWith("$1$")) + { + password = "$1$" + Util.Md5Hash(password); + } + password = password.Remove(0, 3); //remove $1$ + string s = Util.Md5Hash(password + ":" + userProfile.PasswordSalt); + return (userProfile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase) + || userProfile.PasswordHash.Equals(password, StringComparison.InvariantCultureIgnoreCase)); + } + else { - password = "$1$" + Util.Md5Hash(password); + return true; } - password = password.Remove(0, 3); //remove $1$ - string s = Util.Md5Hash(password + ":" + userProfile.PasswordSalt); - return (userProfile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase) - || userProfile.PasswordHash.Equals(password, StringComparison.InvariantCultureIgnoreCase)); } public void ProcessMessages() -- cgit v1.1