]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
As reported by "Tro" in http://curl.haxx.se/mail/lib-2007-06/0161.html and
authorDaniel Stenberg <daniel@haxx.se>
Sun, 24 Jun 2007 19:32:33 +0000 (19:32 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 24 Jun 2007 19:32:33 +0000 (19:32 +0000)
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.

CHANGES
RELEASE-NOTES
lib/ftp.c

diff --git a/CHANGES b/CHANGES
index 38a734f021ce07264cc03ab5dc72289617e634ce..e3c8e3b9d82f8a5aae5db51fb8c31454c422483c 100644 (file)
--- 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
index dc4b1f523beb0d3b8b54afae67799a525481e956..b09306f11b9875a1cb3455194f1801408397441b 100644 (file)
@@ -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:
 
index 30de32f984ce64c1b4c4830fe7de6fb544950858..2e0740f64b0305a073136078962690ea9b70431c 100644 (file)
--- 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;