From: Date: March 26 2008 5:52pm Subject: Connector/NET commit: r1208 - in branches/5.2: . MySql.Web/Providers/Source MySql.Web/Tests List-Archive: http://lists.mysql.com/commits/44463 X-Bug: 35332 Message-Id: <200803261652.m2QGqt8N009871@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 @@ /// 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); } + + /// + /// Bug #35332 GetPassword() don't working (when PasswordAnswer is NULL) + /// + [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); + } } }