Please review this patch. It fix all problems I mention.

--- ftp.c.old   Sun Feb 20 23:30:29 2000
+++ ftp.c       Mon Feb 21 02:21:01 2000
@@ -1173,8 +1173,6 @@
 #endif
 
        if (passivemode) {
-               static int try_epsv = 1;
-
                data_addr = myctladdr;
                data = socket(data_addr.su_family, SOCK_STREAM, 0);
                if (data < 0) {
@@ -1206,10 +1204,16 @@
                        warn("setsockopt (ignored)");
                switch (data_addr.su_family) {
                case AF_INET:
-                       if (try_epsv != 0) {
+                       if (try_epsv) {
+                               int overbose;
+
+                               overbose = verbose;
+                               if (debug == 0)
+                                       verbose = -1;
                                result = command(pasvcmd = "EPSV");
+                               verbose = overbose;
                                if (code / 10 == 22 && code != 229) {
-                                       puts("wrong server: return code must be 229");
+                                       puts("wrong server: EPSV return code must be 
+229");
                                        result = COMPLETE + 1;
                                }
                        } else
@@ -1223,7 +1227,7 @@
                case AF_INET6:
                        result = command(pasvcmd = "EPSV");
                        if (code / 10 == 22 && code != 229) {
-                               puts("wrong server: return code must be 229");
+                               puts("wrong server: EPSV return code must be 229");
                                result = COMPLETE + 1;
                        }
                        if (result != COMPLETE)
@@ -1711,7 +1715,9 @@
        }
        if (curtype != prox_type)
                changetype(prox_type, 1);
-       if (command("PASV") != COMPLETE) {
+       if (try_epsv && command("EPSV") != COMPLETE)
+               try_epsv = 0;
+       if (!try_epsv && command("PASV") != COMPLETE) {
                puts("proxy server does not support third party transfers.");
                return;
        }
--- util.c.old  Mon Feb  7 08:53:26 2000
+++ util.c      Mon Feb 21 02:13:20 2000
@@ -117,6 +117,7 @@
                }
 
                connected = 1;
+               try_epsv = 1;
                /*
                 * Set up defaults for FTP.
                 */
--- ftp_var.h.old       Mon Feb 14 21:31:56 2000
+++ ftp_var.h   Mon Feb 21 02:13:20 2000
@@ -120,6 +120,7 @@
 int    dirchange;              /* remote directory changed by cd command */
 int    ttywidth;               /* width of tty */
 char   *tmpdir;                        /* temporary directory */
+int     try_epsv;               /* try EPSV for this session */
 
 #ifndef SMALL
 int      editing;              /* command line editing enabled */

-- 
Andrey A. Chernov
<[EMAIL PROTECTED]>
http://nagual.pp.ru/~ache/


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to