From 0dc6c76d540c5048b41f8b402837e6e82ee3dc61 Mon Sep 17 00:00:00 2001 From: shin Date: Fri, 18 Feb 2000 07:02:48 +0000 Subject: Don't try EPSV once it failed. Specified by: Andrey A. Chernov" Approved by: jkh --- usr.bin/ftp/ftp.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'usr.bin/ftp') diff --git a/usr.bin/ftp/ftp.c b/usr.bin/ftp/ftp.c index cfdfda8..ddf41e1 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: -- cgit v1.1