]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
ftp: fix "AUTH TLS" on primary conn and for SSL in PASV second conn
authorStefan Eissing <stefan@eissing.org>
Fri, 18 Nov 2022 20:33:37 +0000 (21:33 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 19 Nov 2022 11:30:29 +0000 (12:30 +0100)
Follow-up to dafdb20a26d0c89

Reported-by: Anthony Hu
Closes #9948

lib/ftp.c

index 4f7c12faa895b99ee6e1b6fb804cf50e2fee3b8f..f25d17a7a9dfbe28d2b96c4c0f75c75822ee5012 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2747,6 +2747,13 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
       if((ftpcode == 234) || (ftpcode == 334)) {
         /* this was BLOCKING, keep it so for now */
         bool done;
+        if(!Curl_cfilter_ssl_added(data, conn, FIRSTSOCKET)) {
+          result = Curl_cfilter_ssl_add(data, conn, FIRSTSOCKET);
+          if(result) {
+            /* we failed and bail out */
+            return CURLE_USE_SSL_FAILED;
+          }
+        }
         result = Curl_cfilter_connect(data, conn, FIRSTSOCKET, TRUE, &done);
         if(!result) {
           conn->bits.ftp_use_data_ssl = FALSE; /* clear-text data */
@@ -3557,7 +3564,8 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
   if(conn->cfilter[SECONDARYSOCKET]) {
     result = Curl_cfilter_connect(data, conn, SECONDARYSOCKET,
                                   FALSE, &connected);
-    if(result || !connected) {
+    if(result ||
+      (!connected && conn->sock[SECONDARYSOCKET] == CURL_SOCKET_BAD)) {
       if(result && (ftpc->count1 == 0)) {
         *completep = -1; /* go back to DOING please */
         /* this is a EPSV connect failing, try PASV instead */