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