Hajimu UMEMOTO writes:
> > It seems -CURRENT's libftpio.c always set passive flag according to
> > environment variable FTP_PASSIVE_MODE.  Then, PASV/PORT selection
> > obeys only FTP_PASSIVE_MODE and direction of sysinstall is ignored.
> > Does this patch fix your problem?
> archie> Don't know, because I'd have to create new install floppies first..
> archie> But I don't think this patch would fix things.. I don't see any
> archie> logical flaw there. ftpPassive() just checks that the toggle is
> archie> set to the right value -- it doesn't necessarily do anything.
> After checking, FTP_PASSIVE_MODE is tested by check_passive() every
> fetGET() call.  check_passive() calls ftpPassive().  So,
> ftp->is_passive is resetted.

OK, now I think I see part of the problem.. check out ftpPassive():

      /* Unlike binary mode, passive mode is a toggle! :-( */
      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;
          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;
          ftp->is_passive = !ftp->is_passive;
          return SUCCESS;

This is completely wrong.  The comment "passive mode is a toggle"
is incorrect.  It's correct when you're talking about ftp(1)'s
"pass" command, but NOT true in the FTP protocol.  Therefore
ftpPassive() should not be issuing any PASV command at all; the
sending of the PASV or PORT command (which applies per-transfer)
is handled by ftp_file_op() anyway (so the one sent by ftpPassive()
ends up having no effect anyway).

What must be happening is that sysinstall is actually setting
up an active mode connection, and the PASV is simply the extraneous
one emitted by ftpPassive().

But why is sysinstall going to active mode? I *know* FTP passive
was selected..

In the meantime, I'll fix ftpPassive()..


Archie Cobbs   *   Whistle Communications, Inc.  *   http://www.whistle.com

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to