From c9a24ece546fb20977d27abef736cd5e45d976e2 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 4 Sep 2009 03:13:32 +0100 Subject: More work on new authentication service --- OpenSim/Data/MySQL/MySQLAuthenticationData.cs | 35 ++++++++++++++-------- OpenSim/Data/MySQL/MySQLFramework.cs | 8 +++++ .../AuthenticationServerConnector.cs | 6 ++-- .../AuthenticationServiceBase.cs | 6 ++-- .../PasswordAuthenticationService.cs | 4 +++ 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/OpenSim/Data/MySQL/MySQLAuthenticationData.cs b/OpenSim/Data/MySQL/MySQLAuthenticationData.cs index 625d3b1..19575ec 100644 --- a/OpenSim/Data/MySQL/MySQLAuthenticationData.cs +++ b/OpenSim/Data/MySQL/MySQLAuthenticationData.cs @@ -38,7 +38,7 @@ namespace OpenSim.Data.MySQL public class MySqlAuthenticationData : MySqlFramework, IAuthenticationData { private string m_Realm; - private DataTable m_SchemaTable = null; + private List m_ColumnNames = null; public MySqlAuthenticationData(string connectionString, string realm) : base(connectionString) @@ -63,15 +63,21 @@ namespace OpenSim.Data.MySQL { ret.PrincipalID = principalID; - if (m_SchemaTable == null) - m_SchemaTable = result.GetSchemaTable(); + if (m_ColumnNames == null) + { + m_ColumnNames = new List(); + + DataTable schemaTable = result.GetSchemaTable(); + foreach (DataRow row in schemaTable.Rows) + m_ColumnNames.Add(row["ColumnName"].ToString()); + } - foreach (DataColumn c in m_SchemaTable.Columns) + foreach (string s in m_ColumnNames) { - if (c.ColumnName == "UUID") + if (s == "UUID") continue; - ret.Data[c.ColumnName] = result[c.ColumnName].ToString(); + ret.Data[s] = result[s].ToString(); } result.Close(); @@ -105,21 +111,23 @@ namespace OpenSim.Data.MySQL first = false; - cmd.Parameters.AddWithValue(field, data.Data[field]); + cmd.Parameters.AddWithValue("?"+field, data.Data[field]); } update += " where UUID = ?principalID"; cmd.CommandText = update; - cmd.Parameters.AddWithValue("UUID", data.PrincipalID.ToString()); + cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString()); if (ExecuteNonQuery(cmd) < 1) { string insert = "insert into `" + m_Realm + "` (`UUID`, `" + String.Join("`, `", fields) + - "`) values ( ?UUID, ?" + String.Join(", ?", fields) + ")"; + "`) values ( ?principalID, ?" + String.Join(", ?", fields) + ")"; - if (ExecuteNonQuery(cmd) < 0) + cmd.CommandText = insert; + + if (ExecuteNonQuery(cmd) < 1) { cmd.Dispose(); return false; @@ -137,8 +145,11 @@ namespace OpenSim.Data.MySQL "` set `" + item + "` = ?" + item + " where UUID = ?UUID"); - cmd.Parameters.AddWithValue(item, value); - cmd.Parameters.AddWithValue("UUID", principalID.ToString()); + cmd.Parameters.AddWithValue("?"+item, value); + cmd.Parameters.AddWithValue("?UUID", principalID.ToString()); + + if (ExecuteNonQuery(cmd) > 0) + return true; return false; } diff --git a/OpenSim/Data/MySQL/MySQLFramework.cs b/OpenSim/Data/MySQL/MySQLFramework.cs index f2b31c4..6c73249 100644 --- a/OpenSim/Data/MySQL/MySQLFramework.cs +++ b/OpenSim/Data/MySQL/MySQLFramework.cs @@ -70,6 +70,7 @@ namespace OpenSim.Data.MySQL } catch (MySqlException e) { +Console.WriteLine(e.ToString()); if (errorSeen) throw; @@ -88,6 +89,13 @@ namespace OpenSim.Data.MySQL cmd.Connection = m_Connection; } + else + throw; + } + catch (Exception e) + { +Console.WriteLine(e.ToString()); + return 0; } } } diff --git a/OpenSim/Server/Handlers/Authentication/AuthenticationServerConnector.cs b/OpenSim/Server/Handlers/Authentication/AuthenticationServerConnector.cs index c3c2f69..03a7980 100644 --- a/OpenSim/Server/Handlers/Authentication/AuthenticationServerConnector.cs +++ b/OpenSim/Server/Handlers/Authentication/AuthenticationServerConnector.cs @@ -36,7 +36,7 @@ namespace OpenSim.Server.Handlers.Authentication { public class AuthenticationServiceConnector : ServiceConnector { - //private IAuthenticationService m_AuthenticationService; + private IAuthenticationService m_AuthenticationService; public AuthenticationServiceConnector(IConfigSource config, IHttpServer server) : base(config, server) @@ -51,8 +51,8 @@ namespace OpenSim.Server.Handlers.Authentication if (authenticationService == String.Empty) throw new Exception("No AuthenticationService in config file"); - //Object[] args = new Object[] { config }; - //m_AuthenticationService = ServerUtils.LoadPlugin(authenticationService, args); + Object[] args = new Object[] { config }; + m_AuthenticationService = ServerUtils.LoadPlugin(authenticationService, args); //server.AddStreamHandler(new AuthenticationServerGetHandler(m_AuthenticationService)); } diff --git a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs index 57d0300..200268b 100644 --- a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs +++ b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs @@ -53,6 +53,7 @@ namespace OpenSim.Services.AuthenticationService { string dllName = String.Empty; string connString = String.Empty; + string realm = String.Empty; // // Try reading the [AuthenticationService] section first, if it exists @@ -62,6 +63,7 @@ namespace OpenSim.Services.AuthenticationService { dllName = authConfig.GetString("StorageProvider", dllName); connString = authConfig.GetString("ConnectionString", connString); + realm = authConfig.GetString("Realm", realm); } // @@ -79,11 +81,11 @@ namespace OpenSim.Services.AuthenticationService // // We tried, but this doesn't exist. We can't proceed. // - if (dllName.Equals(String.Empty)) + if (dllName == String.Empty || realm == String.Empty) throw new Exception("No StorageProvider configured"); m_Database = LoadPlugin(dllName, - new Object[] {connString}); + new Object[] {connString, realm}); if (m_Database == null) throw new Exception("Could not find a storage interface in the given module"); } diff --git a/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs index 5c83299..83ce0d0 100644 --- a/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs @@ -26,11 +26,15 @@ */ using System; +using System.Collections.Generic; using OpenMetaverse; using OpenSim.Services.Interfaces; using log4net; using Nini.Config; using System.Reflection; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Framework.Console; namespace OpenSim.Services.AuthenticationService { -- cgit v1.1