@@ -90,6 +90,7 @@ private static readonly Dictionary<string, SqlColumnEncryptionKeyStoreProvider>
9090 private IReadOnlyDictionary < string , SqlColumnEncryptionKeyStoreProvider > _customColumnEncryptionKeyStoreProviders ;
9191
9292 private Func < SqlAuthenticationParameters , CancellationToken , Task < SqlAuthenticationToken > > _accessTokenCallback ;
93+ private Func < SspiContextProvider > _sspiContextProviderFactory ;
9394
9495 internal bool HasColumnEncryptionKeyStoreProvidersRegistered =>
9596 _customColumnEncryptionKeyStoreProviders is not null && _customColumnEncryptionKeyStoreProviders . Count > 0 ;
@@ -647,7 +648,7 @@ public override string ConnectionString
647648 CheckAndThrowOnInvalidCombinationOfConnectionOptionAndAccessTokenCallback ( connectionOptions ) ;
648649 }
649650 }
650- ConnectionString_Set ( new SqlConnectionPoolKey ( value , _credential , _accessToken , _accessTokenCallback ) ) ;
651+ ConnectionString_Set ( new SqlConnectionPoolKey ( value , _credential , _accessToken , _accessTokenCallback , _sspiContextProviderFactory ) ) ;
651652 _connectionString = value ; // Change _connectionString value only after value is validated
652653 CacheConnectionStringProperties ( ) ;
653654 }
@@ -707,7 +708,7 @@ public string AccessToken
707708 }
708709
709710 // Need to call ConnectionString_Set to do proper pool group check
710- ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , credential : _credential , accessToken : value , accessTokenCallback : null ) ) ;
711+ ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , credential : _credential , accessToken : value , accessTokenCallback : null , sspiContextProviderFactory : _sspiContextProviderFactory ) ) ;
711712 _accessToken = value ;
712713 }
713714 }
@@ -730,11 +731,22 @@ public Func<SqlAuthenticationParameters, CancellationToken, Task<SqlAuthenticati
730731 CheckAndThrowOnInvalidCombinationOfConnectionOptionAndAccessTokenCallback ( ( SqlConnectionString ) ConnectionOptions ) ;
731732 }
732733
733- ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , credential : _credential , accessToken : null , accessTokenCallback : value ) ) ;
734+ ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , credential : _credential , accessToken : null , accessTokenCallback : value , sspiContextProviderFactory : _sspiContextProviderFactory ) ) ;
734735 _accessTokenCallback = value ;
735736 }
736737 }
737738
739+ /// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/SspiContextProviderFactory/*' />
740+ public Func < SspiContextProvider > SspiContextProviderFactory
741+ {
742+ get { return _sspiContextProviderFactory ; }
743+ set
744+ {
745+ ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , credential : _credential , accessToken : null , accessTokenCallback : _accessTokenCallback , sspiContextProviderFactory : value ) ) ;
746+ _sspiContextProviderFactory = value ;
747+ }
748+ }
749+
738750 /// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/Database/*' />
739751 [ ResDescription ( StringsHelper . ResourceNames . SqlConnection_Database ) ]
740752 [ ResCategory ( StringsHelper . ResourceNames . SqlConnection_DataSource ) ]
@@ -1032,7 +1044,7 @@ public SqlCredential Credential
10321044 _credential = value ;
10331045
10341046 // Need to call ConnectionString_Set to do proper pool group check
1035- ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , _credential , accessToken : _accessToken , accessTokenCallback : _accessTokenCallback ) ) ;
1047+ ConnectionString_Set ( new SqlConnectionPoolKey ( _connectionString , _credential , accessToken : _accessToken , accessTokenCallback : _accessTokenCallback , _sspiContextProviderFactory ) ) ;
10361048 }
10371049 }
10381050
@@ -2262,7 +2274,7 @@ public static void ChangePassword(string connectionString, string newPassword)
22622274 throw ADP . InvalidArgumentLength ( nameof ( newPassword ) , TdsEnums . MAXLEN_NEWPASSWORD ) ;
22632275 }
22642276
2265- SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential : null , accessToken : null , accessTokenCallback : null ) ;
2277+ SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential : null , accessToken : null , accessTokenCallback : null , sspiContextProviderFactory : null ) ;
22662278
22672279 SqlConnectionString connectionOptions = SqlConnectionFactory . FindSqlConnectionOptions ( key ) ;
22682280 if ( connectionOptions . IntegratedSecurity )
@@ -2311,7 +2323,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent
23112323 throw ADP . InvalidArgumentLength ( nameof ( newSecurePassword ) , TdsEnums . MAXLEN_NEWPASSWORD ) ;
23122324 }
23132325
2314- SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential , accessToken : null , accessTokenCallback : null ) ;
2326+ SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential , accessToken : null , accessTokenCallback : null , sspiContextProviderFactory : null ) ;
23152327
23162328 SqlConnectionString connectionOptions = SqlConnectionFactory . FindSqlConnectionOptions ( key ) ;
23172329
@@ -2349,7 +2361,7 @@ private static void ChangePassword(string connectionString, SqlConnectionString
23492361 {
23502362 con ? . Dispose ( ) ;
23512363 }
2352- SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential , accessToken : null , accessTokenCallback : null ) ;
2364+ SqlConnectionPoolKey key = new SqlConnectionPoolKey ( connectionString , credential , accessToken : null , accessTokenCallback : null , sspiContextProviderFactory : null ) ;
23532365
23542366 SqlConnectionFactory . SingletonInstance . ClearPool ( key ) ;
23552367 }
0 commit comments