- Siegfried Gyuricsko found out that the curl manual said --retry would retry

on FTP errors in the transient 5xx range. Transient FTP errors are in the
  4xx range. The code itself only tried on 5xx errors that occured _at login_.
  Now the retry code retries on all FTP transfer failures that ended with a
  4xx response.

  (http://curl.haxx.se/bug/view.cgi?id=2911279)
This commit is contained in:
Daniel Stenberg 2009-12-10 21:02:11 +00:00
parent b91ed67276
commit 296ebf382c
5 changed files with 16 additions and 7 deletions

View File

@ -7,6 +7,14 @@
Changelog Changelog
Daniel Stenberg (10 Dec 2009) Daniel Stenberg (10 Dec 2009)
- Siegfried Gyuricsko found out that the curl manual said --retry would retry
on FTP errors in the transient 5xx range. Transient FTP errors are in the
4xx range. The code itself only tried on 5xx errors that occured _at login_.
Now the retry code retries on all FTP transfer failures that ended with a
4xx response.
(http://curl.haxx.se/bug/view.cgi?id=2911279)
- Constantine Sapuntzakis figured out a case which would lead to libcurl - Constantine Sapuntzakis figured out a case which would lead to libcurl
accessing alredy freed memory and thus crash when using HTTPS (with accessing alredy freed memory and thus crash when using HTTPS (with
OpenSSL), multi interface and the CURLOPT_DEBUGFUNCTION and a certain order OpenSSL), multi interface and the CURLOPT_DEBUGFUNCTION and a certain order

View File

@ -31,6 +31,7 @@ This release includes the following bugfixes:
o TFTP BLKSIZE o TFTP BLKSIZE
o Expect: 100-continue handling when set by the application o Expect: 100-continue handling when set by the application
o multi interface with OpenSSL read already freed memory when closing down o multi interface with OpenSSL read already freed memory when closing down
o --retry didn't do right for FTP transient errors
This release includes the following known bugs: This release includes the following known bugs:
@ -42,6 +43,6 @@ advice from friends like these:
Yang Tse, Kamil Dudka, Christian Schmitz, Constantine Sapuntzakis, Yang Tse, Kamil Dudka, Christian Schmitz, Constantine Sapuntzakis,
Marco Maggi, Camille Moncelier, Claes Jakobsson, Kevin Baughman, Marco Maggi, Camille Moncelier, Claes Jakobsson, Kevin Baughman,
Marc Kleine-Budde, Jad Chamcham, Bjorn Augustsson, David Byron, Marc Kleine-Budde, Jad Chamcham, Bjorn Augustsson, David Byron,
Markus Koetter, Chad Monroe, Martin Storsjo Markus Koetter, Chad Monroe, Martin Storsjo, Siegfried Gyuricsko
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -1079,7 +1079,7 @@ timestamp.
If a transient error is returned when curl tries to perform a transfer, it If a transient error is returned when curl tries to perform a transfer, it
will retry this number of times before giving up. Setting the number to 0 will retry this number of times before giving up. Setting the number to 0
makes curl do no retries (which is the default). Transient error means either: makes curl do no retries (which is the default). Transient error means either:
a timeout, an FTP 5xx response code or an HTTP 5xx response code. a timeout, an FTP 4xx response code or an HTTP 5xx response code.
When curl is about to retry a transfer, it will first wait one second and then When curl is about to retry a transfer, it will first wait one second and then
for all forthcoming retries it will double the waiting time until it reaches for all forthcoming retries it will double the waiting time until it reaches

View File

@ -5066,14 +5066,14 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
} }
} }
} /* if CURLE_OK */ } /* if CURLE_OK */
else if(CURLE_LOGIN_DENIED == res) { else if(res) {
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
if(response/100 == 5) if(response/100 == 4)
/* /*
* This is typically when the FTP server only allows a certain * This is typically when the FTP server only allows a certain
* amount of users and we are not one of them. It mostly * amount of users and we are not one of them. All 4xx codes
* returns 530 in this case, but all 5xx codes are transient. * are transient.
*/ */
retry = RETRY_FTP; retry = RETRY_FTP;
} }

View File

@ -2,7 +2,7 @@
# Server-side # Server-side
<reply> <reply>
<servercmd> <servercmd>
REPLY PASS 530 temporarily not available REPLY PASS 430 temporarily not available
</servercmd> </servercmd>
</reply> </reply>