From 40fd66cfb295c6d88ddc9fa4a724d92be7b3ac25 Mon Sep 17 00:00:00 2001 From: David Engel Date: Fri, 5 Aug 2022 17:14:46 -0700 Subject: [PATCH] [Fix 3.1] Add support for Shim gss api on Linux to delay loading libgssapi_krb5.so Porting #1411 to 3.1-servicing. --- .../Interop.NetSecurityNative.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs b/src/Microsoft.Data.SqlClient/netcore/src/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs index ab8338e796..0ca643a487 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs @@ -16,6 +16,9 @@ internal static extern void ReleaseGssBuffer( IntPtr bufferPtr, ulong length); + [DllImport(Interop.Libraries.NetSecurityNative, EntryPoint = "NetSecurityNative_EnsureGssInitialized")] + private static extern int EnsureGssInitialized(); + [DllImport(Libraries.NetSecurityNative, EntryPoint="NetSecurityNative_DisplayMinorStatus")] internal static extern Status DisplayMinorStatus( out Status minorStatus, @@ -109,5 +112,17 @@ internal enum GssFlags : uint GSS_C_EXTENDED_ERROR_FLAG = 0x4000, GSS_C_DELEG_POLICY_FLAG = 0x8000 } + + // This constructor is added to address the issue with net6 regarding + // Shim gss api on Linux to delay loading libgssapi_krb5.so + // issue https://github.com/dotnet/SqlClient/issues/1390 + // dotnet runtime issue https://github.com/dotnet/runtime/pull/55037 + static NetSecurityNative() + { + if (Environment.Version.Major >= 6) + { + EnsureGssInitialized(); + } + } } }