| Summary: | [PATCH] FTP_PASSIVE_MODE and libftpio | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Base System | Reporter: | efutch <efutch> | ||||
| Component: | bin | Assignee: | freebsd-bugs (Nobody) <bugs> | ||||
| Status: | Closed FIXED | ||||||
| Severity: | Affects Only Me | ||||||
| Priority: | Normal | ||||||
| Version: | 4.0-STABLE | ||||||
| Hardware: | Any | ||||||
| OS: | Any | ||||||
| Attachments: |
|
||||||
|
Description
efutch
2000-04-20 04:20:00 UTC
On 20-Apr-2000 efutch@nyct.net wrote: | Apply this patch. Patch can also be found at: | http://quake.nyct.net/~efutch/FreeBSD/ftpio.c.patch | | Index: src/lib/libftpio/ftpio.c | =================================================================== | RCS file: /home/ncvs/src/lib/libftpio/ftpio.c,v | retrieving revision 1.33 | diff -u -r1.33 ftpio.c | --- src/lib/libftpio/ftpio.c 1999/09/28 13:33:13 1.33 | +++ src/lib/libftpio/ftpio.c 2000/04/20 02:28:20 | @@ -498,8 +498,13 @@ | static void | check_passive(FILE *fp) | { | - if (getenv("FTP_PASSIVE_MODE")) | - ftpPassive(fp, TRUE); | + char *cp; | + cp = getenv("FTP_PASSIVE_MODE"); | + printf("debug: cp(%s)",cp); | + if (!cp || (cp && (strncmp(cp,"NO",2)==0))) | + ftpPassive(fp, FALSE); | + if (cp && (strncmp(cp,"YES",3)==0)) | + ftpPassive(fp, TRUE); | } | Maybe it should do the comparison without depending on the string case? How about this: { char *cp; cp = getenv("FTP_PASSIVE_MODE"); if (cp && strncasecmp(cp, "YES", 3)==0) ftpPassive(fp, TRUE); else ftpPassive(fp, FALSE); } /**************************************** * Mike Heffner <spock@techfour.net> * * Fredericksburg, VA ICQ# 882073 * * Sent at: 20-Apr-2000 -- 00:37:28 EST * * http://my.ispchannel.com/~mheffner * ****************************************/ That looks better than my method. I knew it could have been cleaned up. Here's is a new version of the patch. You can also find it at http://quake.nyct.net/~efutch/FreeBSD/ftpio.c.patch-2 [snip here] Index: src/lib/libftpio/ftpio.c =================================================================== RCS file: /home/ncvs/src/lib/libftpio/ftpio.c,v retrieving revision 1.33 diff -u -r1.33 ftpio.c --- src/lib/libftpio/ftpio.c 1999/09/28 13:33:13 1.33 +++ src/lib/libftpio/ftpio.c 2000/04/20 05:19:15 @@ -498,8 +498,12 @@ static void check_passive(FILE *fp) { - if (getenv("FTP_PASSIVE_MODE")) - ftpPassive(fp, TRUE); + char *cp; + cp = getenv("FTP_PASSIVE_MODE"); + if (cp && strncasecmp(cp, "YES", 3)==0) + ftpPassive(fp, TRUE); + else + ftpPassive(fp, FALSE); } static void [snip here] Thanks! -- Eric Futch New York Connect.Net, Ltd. efutch@nyct.net Technical Support Staff http://www.nyct.net (212) 293-2620 "Bringing New York The Internet Access It Deserves" On Thu, 20 Apr 2000, Mike Heffner wrote: > >On 20-Apr-2000 efutch@nyct.net wrote: > | Apply this patch. Patch can also be found at: > | http://quake.nyct.net/~efutch/FreeBSD/ftpio.c.patch > | > | Index: src/lib/libftpio/ftpio.c > | =================================================================== > | RCS file: /home/ncvs/src/lib/libftpio/ftpio.c,v > | retrieving revision 1.33 > | diff -u -r1.33 ftpio.c > | --- src/lib/libftpio/ftpio.c 1999/09/28 13:33:13 1.33 > | +++ src/lib/libftpio/ftpio.c 2000/04/20 02:28:20 > | @@ -498,8 +498,13 @@ > | static void > | check_passive(FILE *fp) > | { > | - if (getenv("FTP_PASSIVE_MODE")) > | - ftpPassive(fp, TRUE); > | + char *cp; > | + cp = getenv("FTP_PASSIVE_MODE"); > | + printf("debug: cp(%s)",cp); > | + if (!cp || (cp && (strncmp(cp,"NO",2)==0))) > | + ftpPassive(fp, FALSE); > | + if (cp && (strncmp(cp,"YES",3)==0)) > | + ftpPassive(fp, TRUE); > | } > | > >Maybe it should do the comparison without depending on the string case? > >How about this: > >{ > char *cp; > cp = getenv("FTP_PASSIVE_MODE"); > if (cp && strncasecmp(cp, "YES", 3)==0) > ftpPassive(fp, TRUE); > else > ftpPassive(fp, FALSE); >} > > >/**************************************** > * Mike Heffner <spock@techfour.net> * > * Fredericksburg, VA ICQ# 882073 * > * Sent at: 20-Apr-2000 -- 00:37:28 EST * > * http://my.ispchannel.com/~mheffner * > ****************************************/ > The final revision of the patch can be found at: http://quake.nyct.net/~efutch/FreeBSD/ftpio.c.patch-3 Thanks -- Eric Futch New York Connect.Net, Ltd. efutch@nyct.net Technical Support Staff http://www.nyct.net (212) 293-2620 "Bringing New York The Internet Access It Deserves" I too have been recently "bitten" by this problem. I suggest that the
documentation of FTP_PASSIVE_MODE in libftpio be fixed to describe what
the possible legal values are and that the various programs which use
libftpio either copy the same information or refer back to it. Here is a
possible fix to the the ftpio documentation
The following patch might be appropriate for ftpio.3
*** /usr/src/lib/libftpio/ftpio.3 Thu Mar 2 18:16:58 2000
--- ftpio.3 Sun Apr 30 12:38:04 2000
***************
*** 194,200 ****
.Tn FTP
connection.
.It Ev FTP_PASSIVE_MODE
! Force the use of passive mode
.Tn FTP .
.El
.Sh BUGS
--- 194,202 ----
.Tn FTP
connection.
.It Ev FTP_PASSIVE_MODE
! If set and is not zero and does not match the regular expression
! .Em {Nn}{Oo}
! force the use of passive mode
.Tn FTP .
.El
.Sh BUGS
With this patch to the documentation one might want to change the patch
to the code in ftpio.c as follows:
*** /usr/src/lib/libftpio/ftpio.c Sun Apr 23 20:19:53 2000
--- ftpio.c Sun Apr 30 12:57:47 2000
***************
*** 499,506 ****
check_passive(FILE *fp)
{
char *cp = getenv("FTP_PASSIVE_MODE");
!
! ftpPassive(fp, (cp && !strncmp(cp, "YES", 3)));
}
static void
--- 499,506 ----
check_passive(FILE *fp)
{
char *cp = getenv("FTP_PASSIVE_MODE");
! /* str routines return zero if comparisons are true */
! ftpPassive(fp, cp && strncasecmp(cp, "no", 2) && strcmp(cp, "0")
);
}
static void
This business of setting "logical' nvironment variables "rationally" is
a pain at best. I suspect athat it would be nice to have a system
standard for such things, but we would spend years arguing about it.
Regards, George Dinolt
State Changed From-To: open->closed Fixed in rev. 1.35 of src/lib/libftpio/ftpio.c. The correct behaviour is to default to passive mode. |