Loading CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -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 Loading RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -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: Loading lib/http.c +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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= Loading @@ -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; } } Loading Loading @@ -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 Loading tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -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 tests/data/test5320 0 → 100644 +94 −0 Original line number Diff line number Diff line <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> Loading
CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -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: Loading
lib/http.c +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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= Loading @@ -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; } } Loading Loading @@ -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 Loading
tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -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
tests/data/test5320 0 → 100644 +94 −0 Original line number Diff line number Diff line <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>