Fix several problems with EPSV (verbosity, one-per-session, missing place)

Approved by:	jkh
This commit is contained in:
Andrey A. Chernov 2000-02-21 18:18:41 +00:00
parent 80275388cb
commit b2ca2dccc4
3 changed files with 14 additions and 6 deletions

View File

@ -1173,8 +1173,6 @@ initconn()
#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 @@ initconn()
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 @@ initconn()
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 @@ proxtrans(cmd, local, remote)
}
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;
}

View File

@ -120,6 +120,7 @@ int anonftp; /* automatic anonymous login */
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 */

View File

@ -117,6 +117,7 @@ setpeer(argc, argv)
}
connected = 1;
try_epsv = 1;
/*
* Set up defaults for FTP.
*/