diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index 7316db461e..611041d9cd 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -53,6 +53,7 @@ using OpenSim.Framework.Utilities; namespace OpenSim { + public delegate void ConsoleCommand(string comParams); public class OpenSimMain : RegionApplicationBase, conscmd_callback { @@ -68,7 +69,10 @@ namespace OpenSim protected List m_localScenes = new List(); private bool m_silent; - private string m_logFilename = ("region-console" + ".log"); + private string m_logFilename = ("region-console.log"); + + private bool standaloneAuthenticate = false; + public ConsoleCommand CreateAccount = null; public OpenSimMain(IConfigSource configSource) : base() @@ -98,6 +102,8 @@ namespace OpenSim m_silent = configSource.Configs["Startup"].GetBoolean("noverbose", false); m_storageDLL = configSource.Configs["Startup"].GetString("storage_plugin", "OpenSim.DataStore.NullStorage.dll"); + + standaloneAuthenticate = configSource.Configs["Startup"].GetBoolean("standalone_authenticate", false); } /// @@ -122,7 +128,12 @@ namespace OpenSim if (m_sandbox) { - m_commsManager = new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache); + CommunicationsLocal localComms = new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache, standaloneAuthenticate); + m_commsManager = localComms; + if(standaloneAuthenticate) + { + this.CreateAccount = localComms.do_create; + } } else { @@ -320,6 +331,13 @@ namespace OpenSim Shutdown(); break; + case "create": + if (CreateAccount != null) + { + CreateAccount(cmdparams[0]); + } + break; + default: m_log.Error("Unknown command"); break; diff --git a/OpenSim/Region/Communications/Local/CommunicationsLocal.cs b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs index 0c4045334c..69352d1d8d 100644 --- a/OpenSim/Region/Communications/Local/CommunicationsLocal.cs +++ b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs @@ -25,10 +25,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ +using System; using OpenSim.Framework.Communications; using OpenSim.Framework.Types; using OpenSim.Framework.Servers; using OpenSim.Framework.Communications.Caches; +using OpenSim.Framework.Console; +using OpenSim.Framework.Utilities; namespace OpenSim.Region.Communications.Local { @@ -37,10 +40,10 @@ namespace OpenSim.Region.Communications.Local public LocalBackEndServices SandBoxServices = new LocalBackEndServices(); public LocalUserServices UserServices; - public CommunicationsLocal(NetworkServersInfo serversInfo, BaseHttpServer httpServer, AssetCache assetCache ) + public CommunicationsLocal(NetworkServersInfo serversInfo, BaseHttpServer httpServer, AssetCache assetCache, bool accountsAuthenticate ) : base(serversInfo, httpServer, assetCache) { - UserServices = new LocalUserServices(this, serversInfo); + UserServices = new LocalUserServices(this, serversInfo, accountsAuthenticate); UserServices.AddPlugin("OpenSim.Framework.Data.DB4o.dll"); UserServer = UserServices; GridServer = SandBoxServices; @@ -52,5 +55,30 @@ namespace OpenSim.Region.Communications.Local { this.SandBoxServices.AddNewSession(regionHandle, login); } + + public void do_create(string what) + { + switch (what) + { + case "user": + string tempfirstname; + string templastname; + string tempMD5Passwd; + uint regX = 1000; + uint regY = 1000; + + tempfirstname = MainLog.Instance.CmdPrompt("First name"); + templastname = MainLog.Instance.CmdPrompt("Last name"); + tempMD5Passwd = MainLog.Instance.PasswdPrompt("Password"); + regX = Convert.ToUInt32(MainLog.Instance.CmdPrompt("Start Region X")); + regY = Convert.ToUInt32(MainLog.Instance.CmdPrompt("Start Region Y")); + + tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + ""); + + this.UserServices.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY); + break; + } + } + } } diff --git a/OpenSim/Region/Communications/Local/LocalUserServices.cs b/OpenSim/Region/Communications/Local/LocalUserServices.cs index cc80c814ed..223c1576bb 100644 --- a/OpenSim/Region/Communications/Local/LocalUserServices.cs +++ b/OpenSim/Region/Communications/Local/LocalUserServices.cs @@ -15,13 +15,15 @@ namespace OpenSim.Region.Communications.Local private NetworkServersInfo serversInfo; private uint defaultHomeX ; private uint defaultHomeY; + private bool authUsers = false; - public LocalUserServices(CommunicationsLocal parent, NetworkServersInfo serversInfo) + public LocalUserServices(CommunicationsLocal parent, NetworkServersInfo serversInfo, bool authenticate) { m_Parent = parent; this.serversInfo = serversInfo; defaultHomeX = this.serversInfo.DefaultHomeLocX; defaultHomeY = this.serversInfo.DefaultHomeLocY; + this.authUsers = authenticate; } public UserProfileData GetUserProfile(string firstName, string lastName) @@ -68,9 +70,22 @@ namespace OpenSim.Region.Communications.Local public override bool AuthenticateUser(UserProfileData profile, string password) { - //for now we will accept any password in sandbox mode - Console.WriteLine("authorising user"); - return true; + if (!authUsers) + { + //for now we will accept any password in sandbox mode + Console.WriteLine("authorising user"); + return true; + } + else + { + Console.WriteLine( "Authenticating " + profile.username + " " + profile.surname); + + password = password.Remove(0, 3); //remove $1$ + + string s = Util.Md5Hash(password + ":" + profile.passwordSalt); + + return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase); + } } public override void CustomiseResponse(LoginResponse response, UserProfileData theUser) diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs index 84c86fd4c9..8db3262e5e 100644 --- a/OpenSim/Region/Examples/SimpleApp/Program.cs +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs @@ -47,7 +47,7 @@ namespace SimpleApp { base.StartUp(); - m_commsManager = new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache); + m_commsManager = new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache, false); m_log.Notice(m_log.LineInfo); diff --git a/bin/OpenSim.ini b/bin/OpenSim.ini index 022d82f3e2..278202d5bd 100644 --- a/bin/OpenSim.ini +++ b/bin/OpenSim.ini @@ -1,4 +1,5 @@ [Startup] gridmode = false physics = basicphysics -storage_plugin = "OpenSim.DataStore.NullStorage.dll" \ No newline at end of file +storage_plugin = "OpenSim.DataStore.NullStorage.dll" +standalone_authenticate = false diff --git a/prebuild.xml b/prebuild.xml index 572a5deefa..a8a455e6c4 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -511,6 +511,7 @@ +