diff --git a/7.36.0/src/curl-7.36.0/include/curl/curl.h b/7.36.0/src/curl-7.36.0/include/curl/curl.h --- a/7.36.0/src/curl-7.36.0/include/curl/curl.h +++ b/7.36.0/src/curl-7.36.0/include/curl/curl.h @@ -1581,6 +1581,8 @@ * Expect: 100-continue header before sending the data anyway. */ CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), + CINIT(NEGOTIATE_SERVICE_IDENTITY, OBJECTPOINT, 231), + CURLOPT_LASTENTRY /* the last unused */ } CURLoption; diff --git a/7.36.0/src/curl-7.36.0/lib/http_negotiate.c b/7.36.0/src/curl-7.36.0/lib/http_negotiate.c --- a/7.36.0/src/curl-7.36.0/lib/http_negotiate.c +++ b/7.36.0/src/curl-7.36.0/lib/http_negotiate.c @@ -59,7 +59,11 @@ #include "memdebug.h" static int -get_gss_name(struct connectdata *conn, bool proxy, gss_name_t *server) +get_gss_name( + struct connectdata *conn, + bool proxy, + const char* service_identity, + gss_name_t *server) { struct negotiatedata *neg_ctx = proxy?&conn->data->state.proxyneg: &conn->data->state.negotiate; @@ -75,7 +79,9 @@ /* IIS uses the @ form but uses 'http' as the service name */ - if(neg_ctx->gss) + if (service_identity) + service = service_identity; + else if(neg_ctx->gss) service = "KHTTP"; else service = "HTTP"; @@ -175,7 +181,10 @@ } if(neg_ctx->server_name == NULL && - (ret = get_gss_name(conn, proxy, &neg_ctx->server_name))) + (ret = get_gss_name(conn, + proxy, + data->set.str[STRING_NEGOTIATE_SERVICE_IDENTITY], + &neg_ctx->server_name))) return ret; header += strlen(neg_ctx->protocol); diff --git a/7.36.0/src/curl-7.36.0/lib/url.c b/7.36.0/src/curl-7.36.0/lib/url.c --- a/7.36.0/src/curl-7.36.0/lib/url.c +++ b/7.36.0/src/curl-7.36.0/lib/url.c @@ -2496,6 +2496,10 @@ case CURLOPT_SSL_ENABLE_ALPN: data->set.ssl_enable_alpn = (0 != va_arg(param, long))?TRUE:FALSE; break; + case CURLOPT_NEGOTIATE_SERVICE_IDENTITY: + result = setstropt(&data->set.str[STRING_NEGOTIATE_SERVICE_IDENTITY], + va_arg(param, char *)); + break; default: /* unknown tag and its companion, just ignore: */ diff --git a/7.36.0/src/curl-7.36.0/lib/urldata.h b/7.36.0/src/curl-7.36.0/lib/urldata.h --- a/7.36.0/src/curl-7.36.0/lib/urldata.h +++ b/7.36.0/src/curl-7.36.0/lib/urldata.h @@ -1386,6 +1386,7 @@ #endif STRING_BEARER, /* , if used */ + STRING_NEGOTIATE_SERVICE_IDENTITY, /* Service identity for Negotiate */ /* -- end of strings -- */ STRING_LAST /* not used, just an end-of-list marker */