Skip to content

Commit 808edaf

Browse files
committed
fix up server name passing
1 parent ca60106 commit 808edaf

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Common/src/System/Net/Security/NegotiateStreamPal.Windows.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ internal static string QueryContextAuthenticationPackage(SafeDeleteContext secur
7171
internal static SecurityStatusPal InitializeSecurityContext(
7272
SafeFreeCredentials credentialsHandle,
7373
ref SafeDeleteContext securityContext,
74-
string[] spn,
74+
string spn,
7575
ContextFlagsPal requestedContextFlags,
7676
SecurityBuffer[] inSecurityBufferArray,
7777
SecurityBuffer outSecurityBuffer,
@@ -82,7 +82,7 @@ internal static SecurityStatusPal InitializeSecurityContext(
8282
GlobalSSPI.SSPIAuth,
8383
credentialsHandle,
8484
ref securityContext,
85-
spn[0],
85+
spn,
8686
ContextFlagsAdapterPal.GetInteropFromContextFlagsPal(requestedContextFlags),
8787
Interop.SspiCli.Endianness.SECURITY_NETWORK_DREP,
8888
inSecurityBufferArray,

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SNI/SNIProxy.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ internal class SNIProxy
3434
/// <param name="sspiClientContextStatus">SSPI client context status</param>
3535
/// <param name="receivedBuff">Receive buffer</param>
3636
/// <param name="sendWriter">Writer for send buffer</param>
37-
/// <param name="serverNames">Service Principal Name buffer</param>
37+
/// <param name="spn">Service Principal Name</param>
3838
/// <returns>SNI error code</returns>
39-
internal static void GenSspiClientContext(SspiClientContextStatus sspiClientContextStatus, ReadOnlyMemory<byte> receivedBuff, IBufferWriter<byte> sendWriter, string[] serverNames)
39+
internal static void GenSspiClientContext(SspiClientContextStatus sspiClientContextStatus, ReadOnlyMemory<byte> receivedBuff, IBufferWriter<byte> sendWriter, string spn)
4040
{
4141
// TODO: this should use ReadOnlyMemory all the way through
4242
byte[] array = null;
@@ -47,10 +47,10 @@ internal static void GenSspiClientContext(SspiClientContextStatus sspiClientCont
4747
receivedBuff.CopyTo(array);
4848
}
4949

50-
GenSspiClientContext(sspiClientContextStatus, array, sendWriter, serverNames);
50+
GenSspiClientContext(sspiClientContextStatus, array, sendWriter, spn);
5151
}
5252

53-
private static void GenSspiClientContext(SspiClientContextStatus sspiClientContextStatus, byte[] receivedBuff, IBufferWriter<byte> sendWriter, string[] serverSPNs)
53+
private static void GenSspiClientContext(SspiClientContextStatus sspiClientContextStatus, byte[] receivedBuff, IBufferWriter<byte> sendWriter, string spn)
5454
{
5555
SafeDeleteContext securityContext = sspiClientContextStatus.SecurityContext;
5656
ContextFlagsPal contextFlags = sspiClientContextStatus.ContextFlags;
@@ -85,7 +85,7 @@ private static void GenSspiClientContext(SspiClientContextStatus sspiClientConte
8585
SecurityStatusPal statusCode = NegotiateStreamPal.InitializeSecurityContext(
8686
credentialsHandle,
8787
ref securityContext,
88-
serverSPNs,
88+
spn,
8989
requestedContextFlags,
9090
inSecurityBufferArray,
9191
outSecurityBuffer,

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SSPI/ManagedSSPIContextProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ protected override void GenerateSspiClientContext(ReadOnlyMemory<byte> incomingB
1616
{
1717
_sspiClientContextStatus ??= new SspiClientContextStatus();
1818

19-
SNIProxy.GenSspiClientContext(_sspiClientContextStatus, incomingBlob, outgoingBlobWriter, new[] { AuthenticationParameters.ServerName });
19+
SNIProxy.GenSspiClientContext(_sspiClientContextStatus, incomingBlob, outgoingBlobWriter, AuthenticationParameters.ServerName);
2020
SqlClientEventSource.Log.TryTraceEvent("TdsParserStateObjectManaged.GenerateSspiClientContext | Info | Session Id {0}", _physicalStateObj.SessionId);
2121
}
2222
}

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SSPI/SSPIContextProvider.cs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,33 @@ internal void Initialize(ServerInfo serverInfo, TdsParserStateObject physicalSta
2727
_physicalStateObj = physicalStateObj;
2828
_serverInfo = serverInfo;
2929

30-
var options = parser.Connection.ConnectionOptions;
31-
32-
_parameters = new SqlAuthenticationParameters.Builder(
33-
authenticationMethod: parser.Connection.ConnectionOptions.Authentication,
34-
resource: null,
35-
authority: null,
36-
serverName: serverName,
37-
databaseName: options.InitialCatalog)
38-
.WithConnectionId(parser.Connection.ClientConnectionId)
39-
.WithConnectionTimeout(options.ConnectTimeout)
40-
.WithUserId(options.UserID)
41-
.WithPassword(options.Password);
30+
_parameters = InitializeAuthenticationParameters(parser.Connection, serverName);
4231

4332
Initialize();
4433
}
4534

35+
private SqlAuthenticationParameters InitializeAuthenticationParameters(SqlInternalConnectionTds connection, string serverName)
36+
{
37+
var auth = new SqlAuthenticationParameters.Builder(
38+
authenticationMethod: connection.ConnectionOptions.Authentication,
39+
resource: null,
40+
authority: null,
41+
serverName: serverName,
42+
connection.ConnectionOptions.InitialCatalog);
43+
44+
if (connection.ConnectionOptions.UserID is { } userId)
45+
{
46+
auth.WithUserId(userId);
47+
}
48+
49+
if (connection.ConnectionOptions.Password is { } password)
50+
{
51+
auth.WithPassword(password);
52+
}
53+
54+
return auth;
55+
}
56+
4657
private protected virtual void Initialize()
4758
{
4859
}

0 commit comments

Comments
 (0)