krb5: fix detecting channel binding feature

Use the already detected `gssapi/gssapi_krb5.h` MIT Kerberos header
to pull in `gssapi_ext.h`, which in turn sets `GSS_C_CHANNEL_BOUND_FLAG`
if supported. Channel binding is present in MIT Kerberos 1.19+.

Also:
- lib: de-duplicate GSS-API header includes.
- vauth: de-duplicate `urldata.h` includes.
- drop interim feature macro in favor of the native GSS one.

Assisted-by: Max Faxälv
Reported-by: Max Faxälv
Bug: https://github.com/curl/curl/pull/19164#issuecomment-3551687025
Follow-up to 8616e5aada #19164
Closes #19603
Closes #19760
This commit is contained in:
Viktor Szakats 2025-11-29 15:23:58 +01:00
parent dabfae84f0
commit 4aed2dcc89
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
18 changed files with 13 additions and 56 deletions

View file

@ -31,7 +31,6 @@
#include <curl/curl.h>
#include "vauth.h"
#include "../urldata.h"
#include "../curlx/base64.h"
#include "../curl_gssapi.h"
#include "../curlx/warnless.h"
@ -92,7 +91,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
gss_channel_bindings_t chan_bindings = GSS_C_NO_CHANNEL_BINDINGS;
#ifdef CURL_GSSAPI_HAS_CHANNEL_BINDING
#ifdef GSS_C_CHANNEL_BOUND_FLAG
struct gss_channel_bindings_struct chan;
#endif
@ -155,7 +154,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
}
/* Set channel binding data if available */
#ifdef CURL_GSSAPI_HAS_CHANNEL_BINDING
#ifdef GSS_C_CHANNEL_BOUND_FLAG
if(curlx_dyn_len(&nego->channel_binding_data)) {
memset(&chan, 0, sizeof(struct gss_channel_bindings_struct));
chan.application_data.length = curlx_dyn_len(&nego->channel_binding_data);