aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ftp.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index 885ad243c..6fa2982a0 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1184,7 +1184,6 @@ CURLcode ftp_use_port(struct connectdata *conn)
return result;
if (ftpcode != 200) {
- failf(data, "Server does not grok %s", *modep);
continue;
}
else
@@ -1193,6 +1192,7 @@ CURLcode ftp_use_port(struct connectdata *conn)
if (!*modep) {
sclose(portsock);
+ failf(data, "PORT command attempts failed");
return CURLE_FTP_PORT_FAILED;
}
/* we set the secondary socket variable to this for now, it
@@ -1931,8 +1931,14 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
return result;
}
else {
- failf(data, "%s", buf+4);
- return CURLE_FTP_COULDNT_RETR_FILE;
+ if(dirlist && (ftpcode == 450)) {
+ /* simply no matching files */
+ ftp->no_transfer = TRUE; /* don't think we should download anything */
+ }
+ else {
+ failf(data, "%s", buf+4);
+ return CURLE_FTP_COULDNT_RETR_FILE;
+ }
}
}
@@ -2180,16 +2186,19 @@ CURLcode Curl_ftp(struct connectdata *conn)
if(CURLE_OK == retcode) {
if(connected)
retcode = Curl_ftp_nextconnect(conn);
- else {
- if(ftp->no_transfer) {
- /* no data to transfer */
- retcode=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- }
- else {
- /* since we didn't connect now, we want do_more to get called */
- conn->bits.do_more = TRUE;
- }
+
+ if(retcode && (conn->secondarysocket >= 0)) {
+ /* Failure detected, close the second socket if it was created already */
+ sclose(conn->secondarysocket);
+ conn->secondarysocket = -1;
}
+
+ if(ftp->no_transfer)
+ /* no data to transfer */
+ retcode=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ else if(!connected)
+ /* since we didn't connect now, we want do_more to get called */
+ conn->bits.do_more = TRUE;
}
return retcode;