Hardeep Singh reported a problem doing HTTP POST with Digest. (It was actually
authorDaniel Stenberg <daniel@haxx.se>
Sun, 3 Apr 2005 22:46:25 +0000 (22:46 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 3 Apr 2005 22:46:25 +0000 (22:46 +0000)
also affecting NTLM and Negotiate.) It turned out that if the server responded
with 100 Continue before the initial 401 response, libcurl didn't take care of
the response properly. Test case 245 and 246 added to verify this.

CHANGES
lib/http.c
tests/data/Makefile.am
tests/data/test246 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 719230dba3c5c09dc04b59bbe5eab83a45974e50..d26719bcc4f9d402d90e219e26a015aba1e9da57 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,13 @@
                                   Changelog
 
 
+Daniel (4 April 2005)
+- Hardeep Singh reported a problem doing HTTP POST with Digest. (It was
+  actually also affecting NTLM and Negotiate.) It turned out that if the
+  server responded with 100 Continue before the initial 401 response, libcurl
+  didn't take care of the response properly. Test case 245 and 246 added to
+  verify this.
+
 Daniel (30 March 2005)
 - Andres Garcia modified the configure script to check for libgdi32 before
   libcrypto, to make the SSL check work fine on msys/mingw.
index 308f9efc3bd4414e57493e3f3cf0724bd1ef5522..c689b65962b1c8354ec2d9c97da192f5f1577de8 100644 (file)
@@ -304,6 +304,10 @@ CURLcode Curl_http_auth_act(struct connectdata *conn)
   bool pickproxy = FALSE;
   CURLcode code = CURLE_OK;
 
+  if(100 == conn->keep.httpcode)
+    /* this is a transient response code, ignore */
+    return CURLE_OK;
+
   if(data->state.authproblem)
     return data->set.http_fail_on_error?CURLE_HTTP_RETURNED_ERROR:CURLE_OK;
 
index 16edae910ef9d9deae74087d466bd717c6831269..46a8465f1094732818c61f83991485a15302cae5 100644 (file)
@@ -33,7 +33,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46        \
  test241 test242 test519 test214 test215 test216 test217 test218       \
  test199 test225 test226 test227 test230 test231 test232 test228       \
  test229 test233 test234 test235 test236 test520 test237 test238 \
- test239 test243 test245
+ test239 test243 test245 test246
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test246 b/tests/data/test246
new file mode 100644 (file)
index 0000000..cfd12b0
--- /dev/null
@@ -0,0 +1,86 @@
+# Server-side
+<reply>
+<data>
+HTTP/1.1 100 Continue\r
+Server: Microsoft-IIS/5.0\r
+Date: Sun, 03 Apr 2005 14:57:45 GMT\r
+X-Powered-By: ASP.NET\r
+\r
+HTTP/1.1 401 authentication please swsbounce\r
+Server: Microsoft-IIS/6.0\r
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 0\r
+\r
+</data>
+<data1000>
+HTTP/1.1 200 A OK\r
+Server: Microsoft-IIS/6.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 3\r
+\r
+ok
+</data1000>
+
+<datacheck>
+HTTP/1.1 100 Continue\r
+Server: Microsoft-IIS/5.0\r
+Date: Sun, 03 Apr 2005 14:57:45 GMT\r
+X-Powered-By: ASP.NET\r
+\r
+HTTP/1.1 401 authentication please swsbounce\r
+Server: Microsoft-IIS/6.0\r
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 0\r
+\r
+HTTP/1.1 200 A OK\r
+Server: Microsoft-IIS/6.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 3\r
+\r
+ok
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+# 
+<server>
+http
+</server>
+ <name>
+HTTP POST --digest with server doing a 100 before 401 response
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/246 -u auser:apasswd --digest -d "junkelijunk"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol nonewline=yes>
+POST /246 HTTP/1.1\r
+User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6\r
+Host: 127.0.0.1:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 0\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+POST /246 HTTP/1.1\r
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/246", response="761e6fc9a760c39d587092e8d840e740"\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: 127.0.0.1:8990\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 11\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+junkelijunk
+</protocol>
+</verify>