List:Commits« Previous MessageNext Message »
From:rburnett Date:March 26 2008 5:52pm
Subject:Connector/NET commit: r1208 - in branches/5.2: . MySql.Web/Providers/Source MySql.Web/Tests
View as plain text  
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/Testsrburnett26 Mar