From 36218c005590db91faf5512b555184080c5f69e9 Mon Sep 17 00:00:00 2001 From: des Date: Tue, 27 Sep 2011 18:42:09 +0000 Subject: Think first, commit second. 1. Allow the caller to select active mode. 2. Fix the envar logic so it *always* overrides the caller's flags. 3. Document the change from active to passive. --- lib/libfetch/fetch.3 | 20 ++++++++++++++++---- lib/libfetch/ftp.c | 7 +++---- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'lib/libfetch') diff --git a/lib/libfetch/fetch.3 b/lib/libfetch/fetch.3 index aaf1a8d..53bd686 100644 --- a/lib/libfetch/fetch.3 +++ b/lib/libfetch/fetch.3 @@ -318,9 +318,19 @@ and implement the FTP protocol as described in RFC959. .Pp If the +.Ql P +(not passive) flag is specified, an active (rather than passive) +connection will be attempted. +.Pp +The .Ql p -(passive) flag is specified, a passive (rather than active) connection -will be attempted. +flag is supported for compatibility with earlier versions where active +connections were the default. +It has precedence over the +.Ql P +flag, so if both are specified, +.Nm +will use a passive connection. .Pp If the .Ql l @@ -475,9 +485,11 @@ connections will be bound. .It Ev FTP_LOGIN Default FTP login if none was provided in the URL. .It Ev FTP_PASSIVE_MODE -If set to anything but +If set to .Ql no , -forces the FTP code to use passive mode. +forces the FTP code to use active mode. +If set to any other value, forces passive mode even if the application +requested active mode. .It Ev FTP_PASSWORD Default FTP password if the remote server requests one and none was provided in the URL. diff --git a/lib/libfetch/ftp.c b/lib/libfetch/ftp.c index 75af7a4..22af1b5 100644 --- a/lib/libfetch/ftp.c +++ b/lib/libfetch/ftp.c @@ -633,13 +633,12 @@ ftp_transfer(conn_t *conn, const char *oper, const char *file, /* check flags */ low = CHECK_FLAG('l'); - pasv = CHECK_FLAG('p'); + pasv = CHECK_FLAG('p') || !CHECK_FLAG('P'); verbose = CHECK_FLAG('v'); /* passive mode */ - if (!pasv) - pasv = ((s = getenv("FTP_PASSIVE_MODE")) == NULL || - strncasecmp(s, "no", 2) == 0); + if ((s = getenv("FTP_PASSIVE_MODE")) != NULL) + pasv = (strncasecmp(s, "no", 2) != 0); /* isolate filename */ filename = ftp_filename(file, &filenamelen, &type); -- cgit v1.1