aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2009-04-17 12:48:24 +0000
committerDaniel Stenberg <daniel@haxx.se>2009-04-17 12:48:24 +0000
commit30f7a2ff20deea9b9950c54ec17c7ea9f7c77866 (patch)
tree2294afb155b8851350d464f44bae8b43918e6f71
parentf6b55fae7971f63d5e02efad9d97d3b04f417f63 (diff)
- 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.
-rw-r--r--CHANGES11
-rw-r--r--lib/ftp.c7
-rw-r--r--tests/data/Makefile.am3
-rw-r--r--tests/data/test109873
4 files changed, 92 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 1c270c83a..4d6af3457 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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
diff --git a/lib/ftp.c b/lib/ftp.c
index 5282204a7..1fa93dd37 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -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;
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 37c8b2051..d7068871e 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -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; \
diff --git a/tests/data/test1098 b/tests/data/test1098
new file mode 100644
index 000000000..b5c45cbc9
--- /dev/null
+++ b/tests/data/test1098
@@ -0,0 +1,73 @@
+<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>