aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--RELEASE-NOTES1
-rw-r--r--lib/ftp.c15
3 files changed, 18 insertions, 5 deletions
diff --git a/CHANGES b/CHANGES
index 38a734f02..e3c8e3b9d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,13 @@
Changelog
+Daniel S (23 June 2007)
+- As reported by "Tro" in http://curl.haxx.se/mail/lib-2007-06/0161.html and
+ http://curl.haxx.se/mail/lib-2007-06/0238.html, libcurl didn't properly do
+ no-body requests on FTP files on re-used connections properly, or at least
+ it didn't provide the info back in the header callback properly in the
+ subsequent requests.
+
Daniel S (21 June 2007)
- Gerrit Bruchhäuser pointed out a warning that the Intel(R) Thread Checker
tool reports and it was indeed a legitimate one and it is one fixed. It was
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index dc4b1f523..b09306f11 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -61,6 +61,7 @@ This release includes the following bugfixes:
o list FTP root directories when login dir is not root
o no longer slows down when getting very many URLs on the same command line
o lock share before decreasing dirty counter
+ o no-body FTP requests on re-used connections
This release includes the following known bugs:
diff --git a/lib/ftp.c b/lib/ftp.c
index 30de32f98..2e0740f64 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1253,9 +1253,8 @@ static CURLcode ftp_state_post_rest(struct connectdata *conn)
struct FTP *ftp = conn->data->reqdata.proto.ftp;
struct SessionHandle *data = conn->data;
- if(ftp->no_transfer || conn->bits.no_body) {
+ if(ftp->no_transfer) {
/* doesn't transfer any data */
- ftp->no_transfer = TRUE;
/* still possibly do PRE QUOTE jobs */
state(conn, FTP_RETR_PREQUOTE);
@@ -3351,7 +3350,7 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
DEBUGF(infof(data, "DO-MORE phase starts\n"));
- if(!ftp->no_transfer && !conn->bits.no_body) {
+ if(!ftp->no_transfer) {
/* a transfer is about to take place */
if(data->set.upload) {
@@ -3415,6 +3414,13 @@ CURLcode ftp_perform(struct connectdata *conn,
DEBUGF(infof(conn->data, "DO phase starts\n"));
+ if(conn->bits.no_body) {
+ /* requested no body means no transfer... */
+ struct FTP *ftp = conn->data->reqdata.proto.ftp;
+ ftp->no_transfer = TRUE;
+ }
+
+
*dophase_done = FALSE; /* not done yet */
/* start the first command in the DO phase */
@@ -3795,8 +3801,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL
pointer */
- if(data->set.upload && !ftp->file &&
- (!ftp->no_transfer || conn->bits.no_body)) {
+ if(data->set.upload && !ftp->file && !ftp->no_transfer) {
/* We need a file name when uploading. Return error! */
failf(data, "Uploading to a URL without a file name!");
return CURLE_URL_MALFORMAT;