]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
c-hyper: fix NTLM on closed connection tested with test159
authorDaniel Stenberg <daniel@haxx.se>
Mon, 31 May 2021 13:11:27 +0000 (15:11 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 1 Jun 2021 16:03:37 +0000 (18:03 +0200)
Closes #7154

lib/c-hyper.c
lib/transfer.c

index 0f307f3e827af3e9dad7d9c9a233f5a2aa42d0a4..4de93838de18304f27771e6dd42c6d069cedf544 100644 (file)
@@ -166,6 +166,18 @@ static int hyper_body_chunk(void *userdata, const hyper_buf *chunk)
 
   if(0 == k->bodywrites++) {
     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);
     if(result || done) {
       infof(data, "Return early from hyper_body_chunk\n");
index bca4e548faefcbc53e84388841b290ffd23ccaee..3ea07c5e942e5e5ce6ebdd5428470a5ede09e0e3 100644 (file)
@@ -1212,8 +1212,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,
   }
 
 #ifdef USE_HYPER
-  if(conn->datastream)
-    return conn->datastream(data, conn, &didwhat, done, select_res);
+  if(conn->datastream) {
+    result = conn->datastream(data, conn, &didwhat, done, select_res);
+    if(result || *done)
+      return result;
+  }
+  else {
 #endif
   /* 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
@@ -1232,6 +1236,9 @@ CURLcode Curl_readwrite(struct connectdata *conn,
     if(result)
       return result;
   }
+#ifdef USE_HYPER
+  }
+#endif
 
   k->now = Curl_now();
   if(!didwhat) {