Modified:
branches/5.2/CHANGES
branches/5.2/MySql.Web/Providers/Source/MembershipProvider.cs
branches/5.2/MySql.Web/Tests/UserManagement.cs
Log:
- Fixed bug where calling GetPassword on a membership user when the password answer
is null would cause an exception (bug #35332)
Modified: branches/5.2/CHANGES
===================================================================
--- branches/5.2/CHANGES 2008-03-25 19:17:43 UTC (rev 1207)
+++ branches/5.2/CHANGES 2008-03-26 16:52:54 UTC (rev 1208)
@@ -12,6 +12,8 @@
a 6.0 server
- Fixed bug with the membership provider where the min non alpha numeric option
was not working correctly.
+- Fixed bug where calling GetPassword on a membership user when the password answer
+ is null would cause an exception (bug #35332)
Version 5.2.1 - 2/27/2008
- Tons of fixes in providers. The actually work now. :)
Modified: branches/5.2/MySql.Web/Providers/Source/MembershipProvider.cs
===================================================================
--- branches/5.2/MySql.Web/Providers/Source/MembershipProvider.cs 2008-03-25 19:17:43 UTC
(rev 1207)
+++ branches/5.2/MySql.Web/Providers/Source/MembershipProvider.cs 2008-03-26 16:52:54 UTC
(rev 1208)
@@ -732,7 +732,7 @@
throw new
MembershipPasswordException(Resources.UserIsLockedOut);
string password = reader.GetString("Password");
- string passwordAnswer = reader.GetString("PasswordAnswer");
+ string passwordAnswer =
reader.GetValue(reader.GetOrdinal("PasswordAnswer")).ToString();
string passwordKey = reader.GetString("PasswordKey");
MembershipPasswordFormat format = (MembershipPasswordFormat)
reader.GetInt32(3);
@@ -771,15 +771,16 @@
{
try
{
+ int userId = -1;
using (MySqlConnection connection = new
MySqlConnection(connectionString))
{
connection.Open();
- int userId = GetUserId(connection, username);
+ userId = GetUserId(connection, username);
if (-1 == userId) return null;
+ }
- return GetUser(userId, userIsOnline);
- }
+ return GetUser(userId, userIsOnline);
}
catch (MySqlException e)
{
@@ -799,45 +800,47 @@
/// </returns>
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
+ MySqlTransaction txn = null;
+
try
{
- using (TransactionScope scope = new TransactionScope())
+ using (MySqlConnection connection = new
MySqlConnection(connectionString))
{
- using (MySqlConnection connection = new
MySqlConnection(connectionString))
- {
- connection.Open();
+ connection.Open();
- MySqlCommand cmd = new MySqlCommand("", connection);
- cmd.Parameters.AddWithValue("@userId", providerUserKey);
+ txn = connection.BeginTransaction();
+ MySqlCommand cmd = new MySqlCommand("", connection);
+ cmd.Parameters.AddWithValue("@userId", providerUserKey);
- if (userIsOnline)
- {
- cmd.CommandText =
- @"UPDATE my_aspnet_Users SET lastActivityDate = @date
WHERE id=@userId";
- cmd.Parameters.AddWithValue("@date", DateTime.Now);
- cmd.ExecuteNonQuery();
+ if (userIsOnline)
+ {
+ cmd.CommandText =
+ @"UPDATE my_aspnet_Users SET lastActivityDate = @date WHERE
id=@userId";
+ cmd.Parameters.AddWithValue("@date", DateTime.Now);
+ cmd.ExecuteNonQuery();
- cmd.CommandText = "UPDATE my_aspnet_Membership SET
LastActivityDate=@date WHERE userId=@userId";
- cmd.ExecuteNonQuery();
- }
+ cmd.CommandText = "UPDATE my_aspnet_Membership SET
LastActivityDate=@date WHERE userId=@userId";
+ cmd.ExecuteNonQuery();
+ }
- cmd.CommandText = @"SELECT m.*,u.name
- FROM my_aspnet_Membership m JOIN my_aspnet_Users u ON
m.userId=u.id
- WHERE u.id=@userId";
+ cmd.CommandText = @"SELECT m.*,u.name
+ FROM my_aspnet_Membership m JOIN my_aspnet_Users u ON m.userId=u.id
+ WHERE u.id=@userId";
- MembershipUser user;
- using (MySqlDataReader reader = cmd.ExecuteReader())
- {
- if (!reader.Read()) return null;
- user = GetUserFromReader(reader);
- }
-
- return user;
+ MembershipUser user;
+ using (MySqlDataReader reader = cmd.ExecuteReader())
+ {
+ if (!reader.Read()) return null;
+ user = GetUserFromReader(reader);
}
+ txn.Commit();
+ return user;
}
}
catch (MySqlException e)
{
+ if (txn != null)
+ txn.Rollback();
if (WriteExceptionsToEventLog)
WriteToEventLog(e, "GetUser(Object, Boolean)");
throw new ProviderException(exceptionMessage);
Modified: branches/5.2/MySql.Web/Tests/UserManagement.cs
===================================================================
--- branches/5.2/MySql.Web/Tests/UserManagement.cs 2008-03-25 19:17:43 UTC (rev 1207)
+++ branches/5.2/MySql.Web/Tests/UserManagement.cs 2008-03-26 16:52:54 UTC (rev 1208)
@@ -513,5 +513,28 @@
user = provider.CreateUser("foo", "pw!pa!!", "email", null, null, true, null,
out status);
Assert.IsNotNull(user);
}
+
+ /// <summary>
+ /// Bug #35332 GetPassword() don't working (when PasswordAnswer is NULL)
+ /// </summary>
+ [Test]
+ public void GetPasswordWithNullValues()
+ {
+ MembershipCreateStatus status;
+ provider = new MySQLMembershipProvider();
+ NameValueCollection config = new NameValueCollection();
+ config.Add("connectionStringName", "LocalMySqlServer");
+ config.Add("requiresQuestionAndAnswer", "false");
+ config.Add("enablePasswordRetrieval", "true");
+ config.Add("passwordFormat", "clear");
+ config.Add("applicationName", "/");
+ provider.Initialize(null, config);
+
+ MembershipUser user = provider.CreateUser("foo", "barbar!", "foo@stripped",
null, null, true, null, out status);
+ Assert.IsNotNull(user);
+
+ string pw = provider.GetPassword("foo", null);
+ Assert.AreEqual("barbar!", pw);
+ }
}
}
| Thread |
|---|
| • Connector/NET commit: r1208 - in branches/5.2: . MySql.Web/Providers/Source MySql.Web/Tests | rburnett | 26 Mar |