]> granicus.if.org Git - curl/commitdiff
NTLM: force the connection to HTTP/1.1
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 6 Dec 2018 16:26:13 +0000 (17:26 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 7 Dec 2018 12:03:21 +0000 (13:03 +0100)
Since v7.62.0, cURL tries to use HTTP/2 whenever the server announces
the capability. However, NTLM authentication only works with HTTP/1.1,
and will likely remain in that boat (for details, see
https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis#when-is-http2-not-supported).

When we just found out that we want to use NTLM, and when the current
connection runs in HTTP/2 mode, let's force the connection to be closed
and to be re-opened using HTTP/1.1.

Fixes https://github.com/curl/curl/issues/3341.
Closes #3345

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
lib/http.c

index aed7aa80f0dbb196c7194b320d88b76284fb5a1a..7be6f8b92a8eb8342b390bb5c0a34f0466aa0fea 100644 (file)
@@ -526,6 +526,12 @@ CURLcode Curl_http_auth_act(struct connectdata *conn)
     pickhost = pickoneauth(&data->state.authhost, authmask);
     if(!pickhost)
       data->state.authproblem = TRUE;
+    if(data->state.authhost.picked == CURLAUTH_NTLM &&
+       conn->httpversion > 11) {
+      infof(data, "Forcing HTTP/1.1 for NTLM");
+      connclose(conn, "Force HTTP/1.1 connection");
+      conn->data->set.httpversion = CURL_HTTP_VERSION_1_1;
+    }
   }
   if(conn->bits.proxy_user_passwd &&
      ((data->req.httpcode == 407) ||