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
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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:

+12 −6
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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