mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
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.
This commit is contained in:
parent
29ac001aa6
commit
5a79532aee
5
CHANGES
5
CHANGES
@ -6,6 +6,11 @@
|
|||||||
|
|
||||||
Changelog
|
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)
|
Daniel S (14 August 2007)
|
||||||
- Andrew Wansink provided an NTLM bugfix: in the case the server sets the flag
|
- 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
|
NTLMFLAG_NEGOTIATE_UNICODE, we need to filter it off because libcurl doesn't
|
||||||
|
@ -40,6 +40,7 @@ This release includes the following bugfixes:
|
|||||||
"clean"
|
"clean"
|
||||||
o memory leak when handling compressed data streams from broken servers
|
o memory leak when handling compressed data streams from broken servers
|
||||||
o no NTLM unicode response
|
o no NTLM unicode response
|
||||||
|
o resume HTTP PUT using Digest authentication
|
||||||
|
|
||||||
This release includes the following known bugs:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
|
18
lib/http.c
18
lib/http.c
@ -1993,7 +1993,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||||||
data->reqdata.resume_from = 0;
|
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? */
|
/* do we still game? */
|
||||||
curl_off_t passed=0;
|
curl_off_t passed=0;
|
||||||
|
|
||||||
@ -2049,6 +2049,10 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||||||
else if((httpreq != HTTPREQ_GET) &&
|
else if((httpreq != HTTPREQ_GET) &&
|
||||||
!checkheaders(data, "Content-Range:")) {
|
!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) {
|
if(data->reqdata.resume_from) {
|
||||||
/* This is because "resume" was selected */
|
/* This is because "resume" was selected */
|
||||||
curl_off_t total_expected_size=
|
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",
|
aprintf("Content-Range: bytes %s/%" FORMAT_OFF_T "\r\n",
|
||||||
data->reqdata.range, data->set.infilesize);
|
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) {
|
if(data->set.timecondition) {
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
|
|
||||||
/* Phil Karn (Fri, 13 Apr 2001) pointed out that the If-Modified-Since
|
/* The If-Modified-Since header family should have their times set in
|
||||||
* header family should have their times set in GMT as RFC2616 defines:
|
* GMT as RFC2616 defines: "All HTTP date/time stamps MUST be
|
||||||
* "All HTTP date/time stamps MUST be represented in Greenwich Mean Time
|
* represented in Greenwich Mean Time (GMT), without exception. For the
|
||||||
* (GMT), without exception. For the purposes of HTTP, GMT is exactly
|
* purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal
|
||||||
* equal to UTC (Coordinated Universal Time)." (see page 20 of RFC2616).
|
* Time)." (see page 20 of RFC2616).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_GMTIME_R
|
#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 \
|
test296 test297 test298 test610 test611 test612 test406 test407 test408 \
|
||||||
test409 test613 test614 test700 test701 test702 test704 test705 test703 \
|
test409 test613 test614 test700 test701 test702 test704 test705 test703 \
|
||||||
test706 test707 test350 test351 test352 test353 test289 test540 test354 \
|
test706 test707 test350 test351 test352 test353 test289 test540 test354 \
|
||||||
test231
|
test231 test5320 test5322
|
||||||
|
94
tests/data/test5320
Normal file
94
tests/data/test5320
Normal file
@ -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>
|
106
tests/data/test5322
Normal file
106
tests/data/test5322
Normal file
@ -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>
|
Loading…
Reference in New Issue
Block a user