Commit 30f7a2ff authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- Pramod Sharma reported and tracked down a bug when doing FTP over a HTTP

  proxy. libcurl would then wrongly close the connection after each
  request. In his case it had the weird side-effect that it killed NTLM auth
  for the proxy causing an inifinite loop!

  I added test case 1098 to verify this fix. The test case does however not
  properly verify that the transfers are done persistently - as I couldn't
  think of a clever way to achieve it right now - but you need to read the
  stderr output after a test run to see that it truly did the right thing.
parent f6b55fae
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -6,6 +6,17 @@

                                  Changelog

Daniel Stenberg (17 Apr 2009)
- Pramod Sharma reported and tracked down a bug when doing FTP over a HTTP
  proxy. libcurl would then wrongly close the connection after each
  request. In his case it had the weird side-effect that it killed NTLM auth
  for the proxy causing an inifinite loop!

  I added test case 1098 to verify this fix. The test case does however not
  properly verify that the transfers are done persistently - as I couldn't
  think of a clever way to achieve it right now - but you need to read the
  stderr output after a test run to see that it truly did the right thing.

Daniel Stenberg (13 Apr 2009)
- bug report #2727981 (http://curl.haxx.se/bug/view.cgi?id=2727981) by Martin
  Storsjö pointed out how setting CURLOPT_NOBODY to 0 could be downright
+6 −1
Original line number Diff line number Diff line
@@ -4146,7 +4146,12 @@ static CURLcode ftp_setup_connection(struct connectdata * conn)
      return CURLE_UNSUPPORTED_PROTOCOL;
#endif
    }

    /*
     * We explicitly mark this connection as persistent here as we're doing
     * FTP over HTTP and thus we accidentally avoid setting this value
     * otherwise.
     */
    conn->bits.close = FALSE;
#else
    failf(data, "FTP over http proxy requires HTTP support built-in!");
    return CURLE_UNSUPPORTED_PROTOCOL;
+2 −1
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079   \
 test1080 test1081 test1082 test1083 test1084 test1085 test633 test634     \
 test635 test636 test637 test558 test559 test1086 test1087 test1088        \
 test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096
 test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096   \
 test1097 test560 test561 test1098

filecheck:
	@mkdir test-place; \

tests/data/test1098

0 → 100644
+73 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
FTP
HTTP proxy
CURLOPT_PROXY
</keywords>
</info>

#
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 6

hello
</data>

</reply>

#
# Client-side
<client>
<server>
http
</server>
<features>
http
ftp
</features>
 <name>
FTP RETR twice over proxy confirming persistent connection
 </name>

 <command>
ftp://ftp-site/moo/1098 ftp://ftp-site/moo/1098 --proxy http://%HOSTIP:%HTTPPORT
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET ftp://ftp-site/moo/1098 HTTP/1.1
Host: ftp-site:21
Accept: */*
Proxy-Connection: Keep-Alive

GET ftp://ftp-site/moo/1098 HTTP/1.1
Host: ftp-site:21
Accept: */*
Proxy-Connection: Keep-Alive

</protocol>
<stdout mode="text">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 6

hello
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 6

hello
</stdout>
</verify>
</testcase>