diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index 5ca85f11a1..9052443676 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 e0891ca518..6ec7744799 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 4f77f2c3b9..ba7bd00ae0 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) { - password = "$1$" + Util.Md5Hash(password); + 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 + { + 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()