Fix GSSAPI error handling (dotnet/corefx#34883)
authorDavid Shulman <david.shulman@microsoft.com>
Sun, 27 Jan 2019 23:41:53 +0000 (15:41 -0800)
committerGitHub <noreply@github.com>
Sun, 27 Jan 2019 23:41:53 +0000 (15:41 -0800)
commit7dc14e490bc3bc2a4c0ceeaa4d5cd8879c7858a5
treec6ac3044a70858b25098b06e11b6e2680d1b7a6d
parent84fe28a486af100c27b668032630f206d83fd901
Fix GSSAPI error handling (dotnet/corefx#34883)

This PR addresses 3 issues in GSSAPI error handling:

* Fixes an uninitialized variable when calling gss_display_status().
This was causing the major statuscode error message to always return
'An invalid status code was supplied'.

* If the minor statuscode is 0 (GSS_S_COMPLETE), we shouldn't be calling
for the minor statuscode error message text. That is why we were always getting
'Unknown error' for that text.

* Added more text (help text) to certain errors returned from GSSAPI
such as when the NTLM plugin is not installed.

No new tests were added to this PR since it requires machine changes
to test. However, I manually tested various combinations of errors
including when 'gss-ntlmssp' is installed or not.

In terms of dotnet/corefx#34877, the exception message goes from:

>GSSAPI operation failed with error - An invalid status code was supplied (Unknown error).

to

>GSSAPI operation failed with error - An unsupported mechanism was requested. NTLM authentication requires the GSSAPI plugin 'gss-ntlmssp'.

Fixes dotnet/corefx#34877

Commit migrated from https://github.com/dotnet/corefx/commit/eec001d96a68376c0e504eb7635c8edec196f90f
src/libraries/Common/src/Interop/Unix/System.Net.Security.Native/Interop.GssApiException.cs
src/libraries/Common/src/Interop/Unix/System.Net.Security.Native/Interop.NetSecurityNative.cs
src/libraries/Common/src/Microsoft/Win32/SafeHandles/GssSafeHandles.cs
src/libraries/Native/Unix/System.Net.Security.Native/pal_gssapi.c
src/libraries/System.Data.SqlClient/src/Resources/Strings.resx
src/libraries/System.Net.Http/src/Resources/Strings.resx
src/libraries/System.Net.Mail/src/Resources/Strings.resx
src/libraries/System.Net.Security/src/Resources/Strings.resx
src/libraries/System.Net.Security/tests/FunctionalTests/Resources/Strings.resx