Skip to content
Snippets Groups Projects
Commit 5a79532a authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 29ac001a
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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:
......
......@@ -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
......
......@@ -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
<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>
<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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment