summaryrefslogtreecommitdiffstats
path: root/lib/libftpio/ftpio.c
diff options
context:
space:
mode:
authorarchie <archie@FreeBSD.org>2000-08-17 23:46:13 +0000
committerarchie <archie@FreeBSD.org>2000-08-17 23:46:13 +0000
commit0df88a05d9089445536ece33cbd62f932786a6b7 (patch)
treedb65840d0007dbb982415f5d8b5d761955bb21c2 /lib/libftpio/ftpio.c
parentd2bdccc3f89d8e510f1953252ff3057c2b08046b (diff)
downloadFreeBSD-src-0df88a05d9089445536ece33cbd62f932786a6b7.zip
FreeBSD-src-0df88a05d9089445536ece33cbd62f932786a6b7.tar.gz
Fix two bugs:
- The ftpPassive()
Diffstat (limited to 'lib/libftpio/ftpio.c')
-rw-r--r--lib/libftpio/ftpio.c36
1 files changed, 8 insertions, 28 deletions
diff --git a/lib/libftpio/ftpio.c b/lib/libftpio/ftpio.c
index d4e4a9e..fcf2424 100644
--- a/lib/libftpio/ftpio.c
+++ b/lib/libftpio/ftpio.c
@@ -327,37 +327,12 @@ ftpPut(FILE *fp, char *file)
return NULL;
}
-/* Unlike binary mode, passive mode is a toggle! :-( */
int
ftpPassive(FILE *fp, int st)
{
FTP_t ftp = fcookie(fp);
- int i;
- if (ftp->is_passive == st)
- return SUCCESS;
- switch (ftp->addrtype) {
- case AF_INET:
- i = cmd(ftp, "PASV");
- if (i < 0)
- return i;
- if (i != FTP_PASSIVE_HAPPY)
- return FAILURE;
- break;
- case AF_INET6:
- i = cmd(ftp, "EPSV");
- if (i < 0)
- return i;
- if (i != FTP_EPASSIVE_HAPPY) {
- i = cmd(ftp, "LPSV");
- if (i < 0)
- return i;
- if (i != FTP_LPASSIVE_HAPPY)
- return FAILURE;
- }
- break;
- }
- ftp->is_passive = !ftp->is_passive;
+ ftp->is_passive = !!st; /* normalize "st" to zero or one */
return SUCCESS;
}
@@ -545,12 +520,17 @@ ftp_close_method(void *n)
return i;
}
+/*
+ * This function checks whether the FTP_PASSIVE_MODE environment
+ * variable is set, and, if so, enforces the desired mode.
+ */
static void
check_passive(FILE *fp)
{
- char *cp = getenv("FTP_PASSIVE_MODE");
+ const char *cp = getenv("FTP_PASSIVE_MODE");
- ftpPassive(fp, (cp && strncasecmp(cp, "no", 2)));
+ if (cp != NULL)
+ ftpPassive(fp, strncasecmp(cp, "no", 2));
}
static void
OpenPOWER on IntegriCloud