Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Feb 2006 16:28:50 +0900
From:      Hajimu UMEMOTO <ume@freebsd.org>
To:        Rostislav Krasny <rosti.bsd@gmail.com>
Cc:        freebsd-stable@freebsd.org, freebsd-stable-local@be-well.ilk.org, Yar Tikhiy <yar@comp.chem.msu.su>, dwmalone@maths.tcd.ie, des@des.no, mak@ll.mit.edu, MH@kernel32.de
Subject:   Re: SSH login takes very long time...sometimes
Message-ID:  <ygeslq7ew25.wl%ume@mahoroba.org>
In-Reply-To: <20060225024246.d6284719.rosti.bsd@gmail.com>
References:  <20060218012029.e146e2ff.rosti.bsd@gmail.com> <20060219104912.GB20500@comp.chem.msu.su> <20060219225701.0e3e244b.rosti.bsd@gmail.com> <20060221165959.GB77513@comp.chem.msu.su> <20060222024430.ad4b5c60.rosti.bsd@gmail.com> <yge1wxvz5ha.wl%ume@mahoroba.org> <20060223235727.33cddb13.rosti.bsd@gmail.com> <ygefym98o7i.wl%ume@mahoroba.org> <20060224155153.f7da1a52.rosti.bsd@gmail.com> <ygewtfkelbu.wl%ume@mahoroba.org> <20060224174007.GF36227@comp.chem.msu.su> <20060225024246.d6284719.rosti.bsd@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

>>>>> On Sat, 25 Feb 2006 02:42:46 +0200
>>>>> Rostislav Krasny <rosti.bsd@gmail.com> said:

rosti> I've found the problem in both: ftpd(8) and ftp(1). In the ftpd(8) a
rosti> getaddrinfo() is called in two places with hints.ai_socktype == 0 and
rosti> hints.ai_family == PF_UNSPEC. In the ftp(1) a command reply timeout is
rosti> only 60 seconds. Those things are what I've changed to fix the problem.
rosti> Two diffs are attached to this email. The ftpd.c.diff extends -4 and -6
rosti> ftpd options. So if this patch is good, the ftpd(8) manual page and the
rosti> default /etc/inetd.conf should also be changed appropriately.

For your ftpd.c.diff, I like your idea to reduce redundant query.  It
is enough to query just appropriate address family.  In inetd mode, we
know the address family already.  So, we don't need to rely on the
-4/-6 option.  The following diff is against ftpd.c with your patch
applied:

--- ftpd.c.rosti	Sat Feb 25 15:41:52 2006
+++ ftpd.c	Sat Feb 25 16:01:46 2006
@@ -423,10 +423,6 @@ main(int argc, char *argv[], char **envp
 		}
 	}
 
-#ifdef VIRTUAL_HOSTING
-	inithosts(family);
-#endif
-
 	if (daemon_mode) {
 		int *ctl_sock, fd, maxfd = -1, nfds, i;
 		fd_set defreadfds, readfds;
@@ -456,6 +452,10 @@ main(int argc, char *argv[], char **envp
 		sa.sa_handler = reapchild;
 		(void)sigaction(SIGCHLD, &sa, NULL);
 
+#ifdef VIRTUAL_HOSTING
+		inithosts(family);
+#endif
+
 		/*
 		 * Open a socket, bind it to the FTP port, and start
 		 * listening.
@@ -525,6 +525,14 @@ main(int argc, char *argv[], char **envp
 			syslog(LOG_ERR, "getpeername (%s): %m",argv[0]);
 			exit(1);
 		}
+
+#ifdef VIRTUAL_HOSTING
+		family = his_addr.su_family;
+		if (his_addr.su_family == AF_INET6 &&
+		    IN6_IS_ADDR_V4MAPPED(&his_addr.su_sin6.sin6_addr))
+			family = AF_INET;
+		inithosts(family);
+#endif
 	}
 
 gotchild:


For ftp.c.diff, how about considering adding new option for timeout?
However, I'm still in doubt.  I cannot think it is usual situation
that there are unreachable IP addresses in /etc/resolv.conf.

Sincerely,

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume@mahoroba.org  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ygeslq7ew25.wl%ume>