diff options
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | RELEASE-NOTES | 1 | ||||
-rw-r--r-- | lib/http.c | 18 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test5320 | 94 | ||||
-rw-r--r-- | tests/data/test5322 | 106 |
6 files changed, 219 insertions, 7 deletions
@@ -6,6 +6,11 @@ Changelog +Daniel S (17 August 2007) +- Song Ma provided a patch that cures a problem libcurl has when doing resume + HTTP PUT using Digest authentication. Test case 5320 and 5322 were also + added to verify the functionality. + Daniel S (14 August 2007) - Andrew Wansink provided an NTLM bugfix: in the case the server sets the flag NTLMFLAG_NEGOTIATE_UNICODE, we need to filter it off because libcurl doesn't diff --git a/RELEASE-NOTES b/RELEASE-NOTES index e444a40f7..85fb3ef97 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -40,6 +40,7 @@ This release includes the following bugfixes: "clean" o memory leak when handling compressed data streams from broken servers o no NTLM unicode response + o resume HTTP PUT using Digest authentication This release includes the following known bugs: diff --git a/lib/http.c b/lib/http.c index d22c591f9..e72ed43e1 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1993,7 +1993,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) data->reqdata.resume_from = 0; } - if(data->reqdata.resume_from) { + if(data->reqdata.resume_from && !data->state.this_is_a_follow) { /* do we still game? */ curl_off_t passed=0; @@ -2049,6 +2049,10 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) else if((httpreq != HTTPREQ_GET) && !checkheaders(data, "Content-Range:")) { + /* if a line like this was already allocated, free the previous one */ + if(conn->allocptr.rangeline) + free(conn->allocptr.rangeline); + if(data->reqdata.resume_from) { /* This is because "resume" was selected */ curl_off_t total_expected_size= @@ -2066,6 +2070,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) aprintf("Content-Range: bytes %s/%" FORMAT_OFF_T "\r\n", data->reqdata.range, data->set.infilesize); } + if(!conn->allocptr.rangeline) + return CURLE_OUT_OF_MEMORY; } } @@ -2185,11 +2191,11 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) if(data->set.timecondition) { struct tm *tm; - /* Phil Karn (Fri, 13 Apr 2001) pointed out that the If-Modified-Since - * header family should have their times set in GMT as RFC2616 defines: - * "All HTTP date/time stamps MUST be represented in Greenwich Mean Time - * (GMT), without exception. For the purposes of HTTP, GMT is exactly - * equal to UTC (Coordinated Universal Time)." (see page 20 of RFC2616). + /* The If-Modified-Since header family should have their times set in + * GMT as RFC2616 defines: "All HTTP date/time stamps MUST be + * represented in Greenwich Mean Time (GMT), without exception. For the + * purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal + * Time)." (see page 20 of RFC2616). */ #ifdef HAVE_GMTIME_R diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 97c117152..f611fc3a3 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -43,4 +43,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test296 test297 test298 test610 test611 test612 test406 test407 test408 \ test409 test613 test614 test700 test701 test702 test704 test705 test703 \ test706 test707 test350 test351 test352 test353 test289 test540 test354 \ - test231 + test231 test5320 test5322 diff --git a/tests/data/test5320 b/tests/data/test5320 new file mode 100644 index 000000000..f56f702ec --- /dev/null +++ b/tests/data/test5320 @@ -0,0 +1,94 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP POST --digest with PUT and resumed upload and modified method + </name> + <command> +http://%HOSTIP:%HTTPPORT/5320 -u auser:apasswd --digest -T log/5320 -x http://%HOSTIP:%HTTPPORT -C 2 -X GET +</command> +<file name="log/5320"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/5320 HTTP/1.1
+Content-Range: bytes 2-4/5
+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
+Host: %HOSTIP:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/5320 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/5320", response="2bcdd77cd20487372fe7ecd3158b80f9"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +</protocol> +</verify> +</testcase> diff --git a/tests/data/test5322 b/tests/data/test5322 new file mode 100644 index 000000000..c94a96289 --- /dev/null +++ b/tests/data/test5322 @@ -0,0 +1,106 @@ +<testcase> +# Server-side +<reply> +<data> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+</data> +<data1000> +HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</data1000> + +<datacheck> +HTTP/1.1 100 Continue
+Server: Microsoft-IIS/5.0
+Date: Sun, 03 Apr 2005 14:57:45 GMT
+X-Powered-By: ASP.NET
+
+HTTP/1.1 401 authentication please swsbounce
+Server: Microsoft-IIS/6.0
+WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 0
+
+HTTP/1.1 200 A OK
+Server: Microsoft-IIS/6.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 3
+
+ok +</datacheck> + +</reply> + +# Client-side +<client> +# +<server> +http +</server> + <name> +HTTP POST --digest with PUT and resumed upload and modified method, twice + </name> + <command> +http://%HOSTIP:%HTTPPORT/5320.upload1 -T log/5320 http://%HOSTIP:%HTTPPORT/5320.upload2 -T log/5320 -u auser:apasswd --digest -x http://%HOSTIP:%HTTPPORT -C 2 -X GET +</command> +<file name="log/5320"> +test +</file> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET http://%HOSTIP:%HTTPPORT/5320.upload1 HTTP/1.1
+Content-Range: bytes 2-4/5
+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
+Host: %HOSTIP:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 0
+Expect: 100-continue
+
+GET http://%HOSTIP:%HTTPPORT/5320.upload1 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/5320.upload1", response="0fb68703673e77243cbc4a3910e25c25"
+Content-Range: bytes 2-4/5
+Host: %HOSTIP:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +GET http://%HOSTIP:%HTTPPORT/5320.upload2 HTTP/1.1
+Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/5320.upload2", response="3d6a8cb72fae0b06039f5bdb1a09eccd"
+Content-Range: bytes 2-4/5
+User-Agent: curl/7.16.1
+Host: %HOSTIP:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+Proxy-Connection: Keep-Alive
+Content-Length: 3
+Expect: 100-continue
+
+st +</protocol> +</verify> +</testcase> |