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>