1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-12 04:25:08 -05:00

http_negotiate: do not close connection until negotiation is completed

Fix HTTP POST using CURLAUTH_NEGOTIATE.

Closes #3275
This commit is contained in:
Elia Tufarolo 2018-11-13 18:30:56 +01:00 committed by Daniel Stenberg
parent 6d0e487f9f
commit 07ebaf8378
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 8 additions and 1 deletions

View File

@ -610,7 +610,6 @@ output_auth_headers(struct connectdata *conn,
result = Curl_output_negotiate(conn, proxy); result = Curl_output_negotiate(conn, proxy);
if(result) if(result)
return result; return result;
authstatus->done = TRUE;
negdata->state = GSS_AUTHSENT; negdata->state = GSS_AUTHSENT;
} }
else else

View File

@ -49,6 +49,7 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
/* Point to the correct struct with this */ /* Point to the correct struct with this */
struct negotiatedata *neg_ctx; struct negotiatedata *neg_ctx;
struct auth *authp;
if(proxy) { if(proxy) {
userp = conn->http_proxy.user; userp = conn->http_proxy.user;
@ -57,6 +58,7 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
data->set.str[STRING_PROXY_SERVICE_NAME] : "HTTP"; data->set.str[STRING_PROXY_SERVICE_NAME] : "HTTP";
host = conn->http_proxy.host.name; host = conn->http_proxy.host.name;
neg_ctx = &data->state.proxyneg; neg_ctx = &data->state.proxyneg;
authp = &conn->data->state.authproxy;
} }
else { else {
userp = conn->user; userp = conn->user;
@ -65,6 +67,7 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
data->set.str[STRING_SERVICE_NAME] : "HTTP"; data->set.str[STRING_SERVICE_NAME] : "HTTP";
host = conn->host.name; host = conn->host.name;
neg_ctx = &data->state.negotiate; neg_ctx = &data->state.negotiate;
authp = &conn->data->state.authhost;
} }
/* Not set means empty */ /* Not set means empty */
@ -95,6 +98,11 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
if(result) if(result)
Curl_auth_spnego_cleanup(neg_ctx); Curl_auth_spnego_cleanup(neg_ctx);
else
/* If the status is different than 0 and we encountered no errors
it means we have to continue. 0 is the OK value for both GSSAPI
(GSS_S_COMPLETE) and SSPI (SEC_E_OK) */
authp->done = !neg_ctx->status;
return result; return result;
} }