Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 87ca51b

Browse files
authored
Merge pull request #34260 from AfsanehR/CredentialsFix
Fix passing null for credentials in SqlConnectionPoolKey
2 parents caeb142 + 1c8a5fc commit 87ca51b

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/System.Data.SqlClient/src/System/Data/SqlClient/SqlConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,7 +1471,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent
14711471
throw ADP.InvalidArgumentLength(nameof(newSecurePassword), TdsEnums.MAXLEN_NEWPASSWORD);
14721472
}
14731473

1474-
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential: null, accessToken: null);
1474+
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null);
14751475

14761476
SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
14771477

@@ -1509,7 +1509,7 @@ private static void ChangePassword(string connectionString, SqlConnectionString
15091509
if (con != null)
15101510
con.Dispose();
15111511
}
1512-
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential: null, accessToken: null);
1512+
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null);
15131513

15141514
SqlConnectionFactory.SingletonInstance.ClearPool(key);
15151515
}

src/System.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,52 @@ public static void SqlConnectionChangePasswordSecureString()
122122
}
123123
}
124124

125+
[CheckConnStrSetupFact]
126+
public static void OldCredentialsShouldFail()
127+
{
128+
String user = "u" + Guid.NewGuid().ToString().Replace("-", "");
129+
String passStr = "Pax561O$T5K#jD";
130+
131+
try
132+
{
133+
createTestUser(user, passStr);
134+
135+
SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr);
136+
sqlConnectionStringBuilder.Remove("User ID");
137+
sqlConnectionStringBuilder.Remove("Password");
138+
sqlConnectionStringBuilder.IntegratedSecurity = false;
139+
140+
SecureString password = new SecureString();
141+
passStr.ToCharArray().ToList().ForEach(x => password.AppendChar(x));
142+
password.MakeReadOnly();
143+
SqlCredential credential = new SqlCredential(user, password);
144+
145+
using (SqlConnection conn1 = new SqlConnection(sqlConnectionStringBuilder.ConnectionString, credential))
146+
using (SqlConnection conn2 = new SqlConnection(sqlConnectionStringBuilder.ConnectionString, credential))
147+
using (SqlConnection conn3 = new SqlConnection(sqlConnectionStringBuilder.ConnectionString, credential))
148+
using (SqlConnection conn4 = new SqlConnection(sqlConnectionStringBuilder.ConnectionString, credential))
149+
{
150+
conn1.Open();
151+
conn2.Open();
152+
conn3.Open();
153+
conn4.Open();
154+
155+
SecureString newPassword = new SecureString();
156+
"NewPassword".ToCharArray().ToList().ForEach(x => newPassword.AppendChar(x));
157+
newPassword.MakeReadOnly();
158+
SqlConnection.ChangePassword(sqlConnectionStringBuilder.ConnectionString, credential, newPassword);
159+
using (SqlConnection conn5 = new SqlConnection(sqlConnectionStringBuilder.ConnectionString, new SqlCredential(user, password)))
160+
{
161+
Assert.Throws<SqlException>(() => conn5.Open());
162+
}
163+
}
164+
}
165+
finally
166+
{
167+
dropTestUser(user);
168+
}
169+
}
170+
125171
private static void createTestUser(string username, string password)
126172
{
127173
// Creates a test user with read permissions.

0 commit comments

Comments
 (0)