Skip to content

Commit 3f35b3d

Browse files
Shim gss api on Linux to delay loading libgssapi_krb5.so (#1468)
1 parent 8eef6d2 commit 3f35b3d

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,49 +11,52 @@ internal static partial class Interop
1111
{
1212
internal static partial class NetSecurityNative
1313
{
14-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_ReleaseGssBuffer")]
14+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_ReleaseGssBuffer")]
1515
internal static extern void ReleaseGssBuffer(
1616
IntPtr bufferPtr,
1717
ulong length);
1818

19-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_DisplayMinorStatus")]
19+
[DllImport(Interop.Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_EnsureGssInitialized")]
20+
private static extern int EnsureGssInitialized();
21+
22+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_DisplayMinorStatus")]
2023
internal static extern Status DisplayMinorStatus(
2124
out Status minorStatus,
2225
Status statusValue,
2326
ref GssBuffer buffer);
2427

25-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_DisplayMajorStatus")]
28+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_DisplayMajorStatus")]
2629
internal static extern Status DisplayMajorStatus(
2730
out Status minorStatus,
2831
Status statusValue,
2932
ref GssBuffer buffer);
3033

31-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_ImportUserName")]
34+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_ImportUserName")]
3235
internal static extern Status ImportUserName(
3336
out Status minorStatus,
3437
string inputName,
3538
int inputNameByteCount,
3639
out SafeGssNameHandle outputName);
3740

38-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_ImportPrincipalName")]
41+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_ImportPrincipalName")]
3942
internal static extern Status ImportPrincipalName(
4043
out Status minorStatus,
4144
string inputName,
4245
int inputNameByteCount,
4346
out SafeGssNameHandle outputName);
4447

45-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_ReleaseName")]
48+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_ReleaseName")]
4649
internal static extern Status ReleaseName(
4750
out Status minorStatus,
4851
ref IntPtr inputName);
4952

50-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_InitiateCredSpNego")]
53+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_InitiateCredSpNego")]
5154
internal static extern Status InitiateCredSpNego(
5255
out Status minorStatus,
5356
SafeGssNameHandle desiredName,
5457
out SafeGssCredHandle outputCredHandle);
5558

56-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_InitiateCredWithPassword")]
59+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_InitiateCredWithPassword")]
5760
internal static extern Status InitiateCredWithPassword(
5861
out Status minorStatus,
5962
bool isNtlm,
@@ -62,12 +65,12 @@ internal static extern Status InitiateCredWithPassword(
6265
int passwordLen,
6366
out SafeGssCredHandle outputCredHandle);
6467

65-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_ReleaseCred")]
68+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_ReleaseCred")]
6669
internal static extern Status ReleaseCred(
6770
out Status minorStatus,
6871
ref IntPtr credHandle);
6972

70-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_InitSecContext")]
73+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_InitSecContext")]
7174
internal static extern Status InitSecContext(
7275
out Status minorStatus,
7376
SafeGssCredHandle initiatorCredHandle,
@@ -81,7 +84,7 @@ internal static extern Status InitSecContext(
8184
out uint retFlags,
8285
out int isNtlmUsed);
8386

84-
[DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_DeleteSecContext")]
87+
[DllImport(Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_DeleteSecContext")]
8588
internal static extern Status DeleteSecContext(
8689
out Status minorStatus,
8790
ref IntPtr contextHandle);
@@ -109,5 +112,17 @@ internal enum GssFlags : uint
109112
GSS_C_EXTENDED_ERROR_FLAG = 0x4000,
110113
GSS_C_DELEG_POLICY_FLAG = 0x8000
111114
}
115+
116+
// This constructor is added to address the issue with net6 regarding
117+
// Shim gss api on Linux to delay loading libgssapi_krb5.so
118+
// issue https://github.com/dotnet/SqlClient/issues/1390
119+
// dotnet runtime issue https://github.com/dotnet/runtime/pull/55037
120+
static NetSecurityNative()
121+
{
122+
if (Environment.Version.Major >= 6)
123+
{
124+
EnsureGssInitialized();
125+
}
126+
}
112127
}
113128
}

0 commit comments

Comments
 (0)