Date: Thu, 17 Aug 2000 13:29:27 -0700 (PDT) From: Archie Cobbs <archie@whistle.com> To: Hajimu UMEMOTO <ume@mahoroba.org> Cc: freebsd-current@freebsd.org Subject: Re: 5.0 snapshot install problem Message-ID: <200008172029.NAA96024@bubba.whistle.com> In-Reply-To: <20000818.023721.115915969.ume@mahoroba.org> from Hajimu UMEMOTO at "Aug 18, 2000 02:37:21 am"
next in thread | previous in thread | raw e-mail | index | archive | help
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! :-( */ 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; 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 ___________________________________________________________________________ Archie Cobbs * Whistle Communications, Inc. * http://www.whistle.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200008172029.NAA96024>