From owner-FreeBSD-users-jp@jp.freebsd.org  Sun Jun 11 04:13:01 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id EAA09885;
	Sun, 11 Jun 2000 04:13:01 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from tortoise.jp.freebsd.org (root@tortoise.jp.FreeBSD.ORG [210.157.158.41])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id EAA09880;
	Sun, 11 Jun 2000 04:13:00 +0900 (JST)
	(envelope-from ume@mahoroba.org)
Received: from piano.mahoroba.org (IDENT:zaa1mZLB5mNobYdD5jXXy4vIFry7Idffy0x42GhGce8XX+HYX39s+4FYPW8hb1LS@piano-wi.calm.imasy.or.jp [3ffe:505:2:0:260:1dff:fe22:dd55])
	by tortoise.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP/IPv6 id EAA07179;
	Sun, 11 Jun 2000 04:12:59 +0900 (JST)
	(envelope-from ume@mahoroba.org)
Received: from localhost (IDENT:y/4AThyZKDKsAGhopIhbNZHckFniVh6cz4kxT/aS2kcx1Hs2CytH9njqO0n221pZ@localhost [::1])
	by piano.mahoroba.org (8.10.2/3.7W-piano) with ESMTP id e5AJCpP10182;
	Sun, 11 Jun 2000 04:12:52 +0900 (JST)
	(envelope-from ume@mahoroba.org)
To: FreeBSD-users-jp@jp.freebsd.org
Cc: IPv6-jp@jp.freebsd.org
In-Reply-To: <20000611040609C.ume@mahoroba.org>
References: <20000611003604A.hideishi@alpha.geofront.magi-system.net>
	<20000611040609C.ume@mahoroba.org>
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(Sun_Jun_11_04:12:47_2000_809)--"
Content-Transfer-Encoding: 7bit
Message-Id: <20000611041251O.ume@mahoroba.org>
Date: Sun, 11 Jun 2000 04:12:51 +0900
From: Hajimu UMEMOTO (=?ISO-2022-JP?B?GyRCR19LXBsoQiA=?=
	=?ISO-2022-JP?B?GyRCSCUbKEI=?=) <ume@mahoroba.org>
X-Dispatcher: imput version 20000414(IM141)
Lines: 106
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-users-jp 52505
Subject: [FreeBSD-users-jp 52505] Re: [IPv6-jp 768] Re: Disabling IPv6 on
 FTP
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: ume@mahoroba.org

----Next_Part(Sun_Jun_11_04:12:47_2000_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

  $BG_K\!w(BIMASY$B$G$9!#(B

>>> Sun, 11 Jun 2000 04:06:09 +0900 $B$N9o$K!V(Bume$B!W!"$9$J$o$A(B
>>> Hajimu UMEMOTO ($BG_K\(B $BH%(B) <ume@mahoroba.org> $B;a[)$/(B

ume>   $BE:IU$N%Q%C%A$r;n$7$F$_$F$/$@$5$$!#(B

  $B$4$a$s$J$5$$!#E:IU$9$k$N$rK:$l$^$7$?!#(B^^;


----Next_Part(Sun_Jun_11_04:12:47_2000_809)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Description: ftp-mappedaddr.diff
Content-Disposition: attachment; filename="ftp-mappedaddr.diff"

Index: usr.bin/ftp/extern.h
diff -u usr.bin/ftp/extern.h.orig usr.bin/ftp/extern.h
--- usr.bin/ftp/extern.h.orig	Tue May 23 02:18:38 2000
+++ usr.bin/ftp/extern.h	Sun Jun 11 03:44:29 2000
@@ -41,6 +41,7 @@
 void    abortrecv __P((int));
 void    abortsend __P((int));
 void	account __P((int, char **));
+void	ai_unmapped __P((struct addrinfo *));
 void	alarmtimer __P((int));
 int	another __P((int *, char ***, const char *));
 int	auto_fetch __P((int, char **));
Index: usr.bin/ftp/fetch.c
diff -u usr.bin/ftp/fetch.c.orig usr.bin/ftp/fetch.c
--- usr.bin/ftp/fetch.c.orig	Sat Feb 19 03:16:52 2000
+++ usr.bin/ftp/fetch.c	Sun Jun 11 03:47:57 2000
@@ -217,6 +217,7 @@
 
 	while (1)
       {
+	ai_unmapped(res);
 	s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
 	if (s == -1) {
 		res = res->ai_next;
Index: usr.bin/ftp/ftp.c
diff -u usr.bin/ftp/ftp.c.orig usr.bin/ftp/ftp.c
--- usr.bin/ftp/ftp.c.orig	Fri May 26 00:27:31 2000
+++ usr.bin/ftp/ftp.c	Sun Jun 11 03:49:43 2000
@@ -139,6 +139,13 @@
 			       sizeof(hostnamebuf));
 	hostname = hostnamebuf;
 	while (1) {
+		/*
+		 * make sure that ai_addr is NOT an IPv4 mapped address.
+		 * IPv4 mapped address complicates too many things in FTP
+		 * protocol handling, as FTP protocol is defined differently
+		 * between IPv4 and IPv6.
+		 */
+		ai_unmapped(res);
 		s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
 		if (s < 0) {
 			res = res->ai_next;
@@ -1927,4 +1934,32 @@
 		(void)getreply(0);
 	}
 	(void)getreply(0);
+}
+
+void
+ai_unmapped(ai)
+	struct addrinfo *ai;
+{
+	struct sockaddr_in6 *sin6;
+	struct sockaddr_in sin;
+
+	if (ai->ai_family != AF_INET6)
+		return;
+	if (ai->ai_addrlen != sizeof(struct sockaddr_in6) ||
+	    sizeof(sin) > ai->ai_addrlen)
+		return;
+	sin6 = (struct sockaddr_in6 *)ai->ai_addr;
+	if (!IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
+		return;
+
+	memset(&sin, 0, sizeof(sin));
+	sin.sin_family = AF_INET;
+	sin.sin_len = sizeof(struct sockaddr_in);
+	memcpy(&sin.sin_addr, &sin6->sin6_addr.s6_addr[12],
+	    sizeof(sin.sin_addr));
+	sin.sin_port = sin6->sin6_port;
+
+	ai->ai_family = AF_INET;
+	memcpy(ai->ai_addr, &sin, sin.sin_len);
+	ai->ai_addrlen = sin.sin_len;
 }

----Next_Part(Sun_Jun_11_04:12:47_2000_809)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: My signature

$BG_K\(B $BH%(B $B!w(B $B%$%s%?!<%M%C%H8_=u2q2#IM(B  http://www.imasy.org/~ume/
ume@mahoroba.org  ume@bisd.hitachi.co.jp  ume@jp.FreeBSD.org
$B%W%m%0%i%`$O=q$$$??M$N0U?^$G$O$J$/=q$+$l$?DL$jF0$/(B

----Next_Part(Sun_Jun_11_04:12:47_2000_809)----
