From owner-freebsd-current Mon May 29 3:35:57 2000 Delivered-To: freebsd-current@freebsd.org Received: from piano.mahoroba.org (ratch.spacecom.netspace.or.jp [202.238.190.78]) by hub.freebsd.org (Postfix) with ESMTP id 0B49337BB53; Mon, 29 May 2000 03:35:45 -0700 (PDT) (envelope-from ume@bisd.hitachi.co.jp) Received: from localhost (IDENT:WGea50qSTOhcnGz9nIL0X9OmcgTf8+mQWp4yUVLjLfqkjKHaoIflL2aQMtTkS24Q@localhost [::1]) by piano.mahoroba.org (8.10.1/3.7W-piano) with ESMTP id e4TAZS803094; Mon, 29 May 2000 19:35:28 +0900 (JST) (envelope-from ume@bisd.hitachi.co.jp) To: andrews@technologist.com Cc: Cy.Schubert@uumail.gov.bc.ca, stable@FreeBSD.ORG, current@FreeBSD.ORG Cc: ume@bisd.hitachi.co.jp Subject: Re: ftp(1) breakage w/ passive mode? In-Reply-To: <20000528210423.F10345@argon.gryphonsoft.com> References: <20000528190327.C10345@argon.gryphonsoft.com> <200005290054.e4T0s2446726@cwsys.cwsent.com> <20000528210423.F10345@argon.gryphonsoft.com> X-Mailer: xcite1.20> Mew version 1.94.2 on Emacs 20.6 / Mule 4.0 =?iso-2022-jp?B?KBskQjJWMWMbKEIp?= X-PGP-Public-Key: http://www.imasy.org/~ume/publickey.asc X-PGP-Fingerprint: 6B 0C 53 FC 5D D0 37 91 05 D0 B3 EF 36 9B 6A BC X-URL: http://www.imasy.org/~ume/ X-OS: FreeBSD 3.4-RELEASE + KAME from cvs repository Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Mon_May_29_19:35:22_2000_809)--" Content-Transfer-Encoding: 7bit Message-Id: <20000529193526V.ume@bisd.hitachi.co.jp> Date: Mon, 29 May 2000 19:35:26 +0900 From: Hajimu UMEMOTO (=?ISO-2022-JP?B?GyRCR19LXBsoQiA=?= =?ISO-2022-JP?B?GyRCSCUbKEI=?=) X-Dispatcher: imput version 20000228(IM140) Lines: 95 Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG ----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 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-current" in the body of the message