1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-25 09:38:54 -05:00

c-hyper: fix NTLM on closed connection tested with test159

Closes #7154
This commit is contained in:
Daniel Stenberg 2021-05-31 15:11:27 +02:00
parent dddad339e8
commit 83036d86af
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 21 additions and 2 deletions

View File

@ -166,6 +166,18 @@ static int hyper_body_chunk(void *userdata, const hyper_buf *chunk)
if(0 == k->bodywrites++) { if(0 == k->bodywrites++) {
bool done = FALSE; bool done = FALSE;
#if defined(USE_NTLM)
struct connectdata *conn = data->conn;
if(conn->bits.close &&
(((data->req.httpcode == 401) &&
(conn->http_ntlm_state == NTLMSTATE_TYPE2)) ||
((data->req.httpcode == 407) &&
(conn->proxy_ntlm_state == NTLMSTATE_TYPE2)))) {
infof(data, "Connection closed while negotiating NTLM\n");
data->state.authproblem = TRUE;
Curl_safefree(data->req.newurl);
}
#endif
result = Curl_http_firstwrite(data, data->conn, &done); result = Curl_http_firstwrite(data, data->conn, &done);
if(result || done) { if(result || done) {
infof(data, "Return early from hyper_body_chunk\n"); infof(data, "Return early from hyper_body_chunk\n");

View File

@ -1212,8 +1212,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,
} }
#ifdef USE_HYPER #ifdef USE_HYPER
if(conn->datastream) if(conn->datastream) {
return conn->datastream(data, conn, &didwhat, done, select_res); result = conn->datastream(data, conn, &didwhat, done, select_res);
if(result || *done)
return result;
}
else {
#endif #endif
/* We go ahead and do a read if we have a readable socket or if /* We go ahead and do a read if we have a readable socket or if
the stream was rewound (in which case we have data in a the stream was rewound (in which case we have data in a
@ -1232,6 +1236,9 @@ CURLcode Curl_readwrite(struct connectdata *conn,
if(result) if(result)
return result; return result;
} }
#ifdef USE_HYPER
}
#endif
k->now = Curl_now(); k->now = Curl_now();
if(!didwhat) { if(!didwhat) {