Date: Mon, 29 May 2000 19:35:26 +0900 From: Hajimu UMEMOTO (=?ISO-2022-JP?B?GyRCR19LXBsoQiA=?= =?ISO-2022-JP?B?GyRCSCUbKEI=?=) <ume@bisd.hitachi.co.jp> To: andrews@technologist.com Cc: ume@bisd.hitachi.co.jp Subject: Re: ftp(1) breakage w/ passive mode? Message-ID: <20000529193526V.ume@bisd.hitachi.co.jp> In-Reply-To: <20000528210423.F10345@argon.gryphonsoft.com> References: <20000528190327.C10345@argon.gryphonsoft.com> <200005290054.e4T0s2446726@cwsys.cwsent.com> <20000528210423.F10345@argon.gryphonsoft.com>
next in thread | previous in thread | raw e-mail | index | archive | help
----Next_Part(Mon_May_29_19:35:22_2000_809)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit >>>>> On Sun, 28 May 2000 21:04:23 -0400 >>>>> Will Andrews <andrews@technologist.com> said: > What would make ftp(1) think it has an IPv6 connection? andrews> I have no idea.. It seems ftp(1) think using IPv6. There is a bug in existing getaddrinfo(). getaddrinfo() returns IPv4 address as IPv4 mapped IPv6 address in some case. It occures when: - INET6 is enabled in kernel - host has A RR and AAAA RR IPv4 connection via mapped address is still IPv6 connection. In this case, if ftp(1) doesn't have awareness of using mapped address, your problem will occur. And, ftp(1) seems not aware about it. But, it seems ftp.FreeBSD.org does't have AAAA RR. So, I believe it is not applicable to your case. And, actually I dont' see this problem here. However, I have no idea without this case. So, I attach the patch to solve getaddrinfo() problem. Please try it and I would like to hear the result. ----Next_Part(Mon_May_29_19:35:22_2000_809)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Description: getaddrinfo-mapped-workaround.diff Content-Disposition: attachment; filename="getaddrinfo-mapped-workaround.diff" Index: lib/libc/net/getaddrinfo.c diff -u lib/libc/net/getaddrinfo.c.orig lib/libc/net/getaddrinfo.c --- lib/libc/net/getaddrinfo.c.orig Thu Apr 20 12:31:40 2000 +++ lib/libc/net/getaddrinfo.c Mon Apr 24 21:41:24 2000 @@ -148,6 +148,7 @@ static int get_portmatch __P((const struct addrinfo *, const char *)); static int get_port __P((struct addrinfo *, const char *, int)); static const struct afd *find_afd __P((int)); +static void unmappedaddr __P((struct addrinfo *)); static char *ai_errlist[] = { "Success", @@ -512,6 +513,7 @@ */ GET_CANONNAME(cur->ai_next, hp->h_name); } + unmappedaddr(cur->ai_next); while (cur && cur->ai_next) cur = cur->ai_next; @@ -903,4 +905,25 @@ return afd; } return NULL; +} + +static void +unmappedaddr(struct addrinfo *res) +{ + struct sockaddr_in6 *sin6; + struct sockaddr_in *sin; + u_int32_t addr; + int port; + + sin6 = (struct sockaddr_in6 *)res->ai_addr; + if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) { + sin = (struct sockaddr_in *)res->ai_addr; + addr = *(u_int32_t *)&sin6->sin6_addr.s6_addr[12]; + port = sin6->sin6_port; + memset(res->ai_addr, 0, res->ai_addrlen); + sin->sin_addr.s_addr = addr; + sin->sin_port = port; + sin->sin_family = res->ai_family = AF_INET; + sin->sin_len = res->ai_addrlen = sizeof(struct sockaddr_in); + } } ----Next_Part(Mon_May_29_19:35:22_2000_809)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Description: My Signature Content-Disposition: attachment; filename=".signature-world" Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan ume@mahoroba.org ume@bisd.hitachi.co.jp ume@FreeBSD.org http://www.imasy.org/~ume/ ----Next_Part(Mon_May_29_19:35:22_2000_809)---- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000529193526V.ume>