@@ -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