summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoshinobu Inoue <shin@FreeBSD.org>2000-02-18 07:02:48 +0000
committerYoshinobu Inoue <shin@FreeBSD.org>2000-02-18 07:02:48 +0000
commitaeb2954d05850ad75c978fd62d9319c1eab41009 (patch)
treeb7dac2d426dd4ed00377882daa9e07f5cc6b1bc5
parentb349038c95fa6633679b16c5a851ff75c36260ce (diff)
Notes
-rw-r--r--usr.bin/ftp/ftp.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/usr.bin/ftp/ftp.c b/usr.bin/ftp/ftp.c
index cfdfda8f3995..ddf41e19318e 100644
--- a/usr.bin/ftp/ftp.c
+++ b/usr.bin/ftp/ftp.c
@@ -1174,6 +1174,8 @@ initconn()
#endif
if (passivemode) {
+ static int try_epsv = 1;
+
data_addr = myctladdr;
data = socket(data_addr.su_family, SOCK_STREAM, 0);
if (data < 0) {
@@ -1205,13 +1207,18 @@ initconn()
warn("setsockopt (ignored)");
switch (data_addr.su_family) {
case AF_INET:
- result = command(pasvcmd = "EPSV");
- if (code / 10 == 22 && code != 229) {
- puts("wrong server: return code must be 229");
+ if (try_epsv != 0) {
+ result = command(pasvcmd = "EPSV");
+ if (code / 10 == 22 && code != 229) {
+ puts("wrong server: return code must be 229");
+ result = COMPLETE + 1;
+ }
+ } else
result = COMPLETE + 1;
- }
- if (result != COMPLETE)
+ if (result != COMPLETE) {
+ try_epsv = 0;
result = command(pasvcmd = "PASV");
+ }
break;
#ifdef INET6
case AF_INET6: