Skip to content

Commit 4c419c5

Browse files
fix
1 parent dfa62a1 commit 4c419c5

File tree

5 files changed

+48
-36
lines changed

5 files changed

+48
-36
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2421,7 +2421,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
24212421
// Deal with Msal service exceptions first, retry if 429 received.
24222422
catch (MsalServiceException serviceException)
24232423
{
2424-
if (429 == serviceException.StatusCode)
2424+
if (serviceException.StatusCode == 429)
24252425
{
24262426
RetryConditionHeaderValue retryAfter = serviceException.Headers.RetryAfter;
24272427
if (retryAfter.Delta.HasValue)
@@ -2440,9 +2440,15 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
24402440
}
24412441
else
24422442
{
2443+
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MsalServiceException error:> Timeout: {0}", serviceException.ErrorCode);
24432444
break;
24442445
}
24452446
}
2447+
else
2448+
{
2449+
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MsalServiceException error:> {0}", serviceException.ErrorCode);
2450+
throw ADP.CreateSqlException(serviceException, ConnectionOptions, this, username);
2451+
}
24462452
}
24472453
// Deal with normal MsalExceptions.
24482454
catch (MsalException msalException)
@@ -2453,21 +2459,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
24532459
{
24542460
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MSALException error:> {0}", msalException.ErrorCode);
24552461

2456-
// Error[0]
2457-
SqlErrorCollection sqlErs = new();
2458-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, StringsHelper.GetString(Strings.SQL_MSALFailure, username, ConnectionOptions.Authentication.ToString("G")), ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2459-
2460-
// Error[1]
2461-
string errorMessage1 = StringsHelper.GetString(Strings.SQL_MSALInnerException, msalException.ErrorCode);
2462-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, errorMessage1, ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2463-
2464-
// Error[2]
2465-
if (!string.IsNullOrEmpty(msalException.Message))
2466-
{
2467-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, msalException.Message, ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2468-
}
2469-
SqlException exc = SqlException.CreateException(sqlErs, "", this);
2470-
throw exc;
2462+
throw ADP.CreateSqlException(msalException, ConnectionOptions, this, username);
24712463
}
24722464

24732465
SqlClientEventSource.Log.TryAdvancedTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken|ADV> {0}, sleeping {1}[Milliseconds]", ObjectID, sleepInterval);

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8367,8 +8367,8 @@ internal void TdsLogin(SqlLogin rec, TdsEnums.FeatureExtension requestedFeatures
83678367
/// <param name="fedAuthToken">Type encapsulating a Federated Authentication access token.</param>
83688368
internal void SendFedAuthToken(SqlFedAuthToken fedAuthToken)
83698369
{
8370-
Debug.Assert(fedAuthToken != null, "fedAuthToken cannot be null");
8371-
Debug.Assert(fedAuthToken.accessToken != null, "fedAuthToken.accessToken cannot be null");
8370+
Trace.Assert(fedAuthToken != null, "fedAuthToken cannot be null");
8371+
Trace.Assert(fedAuthToken.accessToken != null, "fedAuthToken.accessToken cannot be null");
83728372
SqlClientEventSource.Log.TryTraceEvent("<sc.TdsParser.SendFedAuthToken|SEC> Sending federated authentication token");
83738373
_physicalStateObj._outputMessageType = TdsEnums.MT_FEDAUTH;
83748374

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2859,7 +2859,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
28592859
// Deal with Msal service exceptions first, retry if 429 received.
28602860
catch (MsalServiceException serviceException)
28612861
{
2862-
if (429 == serviceException.StatusCode)
2862+
if (serviceException.StatusCode == 429)
28632863
{
28642864
RetryConditionHeaderValue retryAfter = serviceException.Headers.RetryAfter;
28652865
if (retryAfter.Delta.HasValue)
@@ -2878,9 +2878,15 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
28782878
}
28792879
else
28802880
{
2881+
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MsalServiceException error:> Timeout: {0}", serviceException.ErrorCode);
28812882
break;
28822883
}
28832884
}
2885+
else
2886+
{
2887+
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MsalServiceException error:> {0}", serviceException.ErrorCode);
2888+
throw ADP.CreateSqlException(serviceException, ConnectionOptions, this, username);
2889+
}
28842890
}
28852891
// Deal with normal MsalExceptions.
28862892
catch (MsalException msalException)
@@ -2891,21 +2897,7 @@ internal SqlFedAuthToken GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
28912897
{
28922898
SqlClientEventSource.Log.TryTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken.MSALException error:> {0}", msalException.ErrorCode);
28932899

2894-
// Error[0]
2895-
SqlErrorCollection sqlErs = new SqlErrorCollection();
2896-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, StringsHelper.GetString(Strings.SQL_MSALFailure, username, ConnectionOptions.Authentication.ToString("G")), ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2897-
2898-
// Error[1]
2899-
string errorMessage1 = StringsHelper.GetString(Strings.SQL_MSALInnerException, msalException.ErrorCode);
2900-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, errorMessage1, ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2901-
2902-
// Error[2]
2903-
if (!string.IsNullOrEmpty(msalException.Message))
2904-
{
2905-
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS, ConnectionOptions.DataSource, msalException.Message, ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
2906-
}
2907-
SqlException exc = SqlException.CreateException(sqlErs, "", this);
2908-
throw exc;
2900+
throw ADP.CreateSqlException(msalException, ConnectionOptions, this, username);
29092901
}
29102902

29112903
SqlClientEventSource.Log.TryAdvancedTraceEvent("<sc.SqlInternalConnectionTds.GetFedAuthToken|ADV> {0}, sleeping {1}[Milliseconds]", ObjectID, sleepInterval);

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9247,8 +9247,8 @@ internal void TdsLogin(SqlLogin rec,
92479247
/// <param name="fedAuthToken">Type encapuslating a Federated Authentication access token.</param>
92489248
internal void SendFedAuthToken(SqlFedAuthToken fedAuthToken)
92499249
{
9250-
Debug.Assert(fedAuthToken != null, "fedAuthToken cannot be null");
9251-
Debug.Assert(fedAuthToken.accessToken != null, "fedAuthToken.accessToken cannot be null");
9250+
Trace.Assert(fedAuthToken != null, "fedAuthToken cannot be null");
9251+
Trace.Assert(fedAuthToken.accessToken != null, "fedAuthToken.accessToken cannot be null");
92529252
SqlClientEventSource.Log.TryTraceEvent("<sc.TdsParser.SendFedAuthToken|SEC> Sending federated authentication token");
92539253

92549254
_physicalStateObj._outputMessageType = TdsEnums.MT_FEDAUTH;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using Microsoft.Data.SqlClient;
2424
using Microsoft.Win32;
2525
using IsolationLevel = System.Data.IsolationLevel;
26+
using Microsoft.Identity.Client;
2627

2728
#if NETFRAMEWORK
2829
using Microsoft.SqlServer.Server;
@@ -416,6 +417,33 @@ internal static ArgumentException InvalidArgumentLength(string argumentName, int
416417
=> Argument(StringsHelper.GetString(Strings.ADP_InvalidArgumentLength, argumentName, limit));
417418

418419
internal static ArgumentException MustBeReadOnly(string argumentName) => Argument(StringsHelper.GetString(Strings.ADP_MustBeReadOnly, argumentName));
420+
421+
internal static Exception CreateSqlException(MsalException msalException, SqlConnectionString connectionOptions, SqlInternalConnectionTds sender, string username)
422+
{
423+
// Error[0]
424+
SqlErrorCollection sqlErs = new();
425+
426+
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS,
427+
connectionOptions.DataSource,
428+
StringsHelper.GetString(Strings.SQL_MSALFailure, username, connectionOptions.Authentication.ToString("G")),
429+
ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
430+
431+
// Error[1]
432+
string errorMessage1 = StringsHelper.GetString(Strings.SQL_MSALInnerException, msalException.ErrorCode);
433+
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS,
434+
connectionOptions.DataSource, errorMessage1,
435+
ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
436+
437+
// Error[2]
438+
if (!string.IsNullOrEmpty(msalException.Message))
439+
{
440+
sqlErs.Add(new SqlError(0, (byte)0x00, (byte)TdsEnums.MIN_ERROR_CLASS,
441+
connectionOptions.DataSource, msalException.Message,
442+
ActiveDirectoryAuthentication.MSALGetAccessTokenFunctionName, 0));
443+
}
444+
return SqlException.CreateException(sqlErs, "", sender);
445+
}
446+
419447
#endregion
420448

421449
#region CommandBuilder, Command, BulkCopy

0 commit comments

Comments
 (0)