mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 17:05:55 +08:00
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
This commit is contained in:
@@ -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<MXPClientView> m_sessionsToRemove = new List<MXPClientView>();
|
||||
|
||||
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<UUID, Scene> scenes)
|
||||
public MXPPacketServer(int port, Dictionary<UUID, Scene> 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()
|
||||
|
||||
Reference in New Issue
Block a user