Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 May 2000 08:01:35 -0700
From:      Cy Schubert - ITSD Open Systems Group <Cy.Schubert@uumail.gov.bc.ca>
To:        Hajimu UMEMOTO (=?ISO-2022-JP?B?GyRCR19LXBsoQiA=?=      =?ISO-2022-JP?B?GyRCSCUbKEI=?=) <ume@bisd.hitachi.co.jp>
Cc:        andrews@technologist.com, Cy.Schubert@uumail.gov.bc.ca, stable@FreeBSD.ORG, current@FreeBSD.ORG
Subject:   Re: ftp(1) breakage w/ passive mode? 
Message-ID:  <200005291501.e4TF1nr01222@cwsys.cwsent.com>
In-Reply-To: Your message of "Mon, 29 May 2000 19:35:26 %2B0900." <20000529193526V.ume@bisd.hitachi.co.jp> 

next in thread | previous in thread | raw e-mail | index | archive | help
This might even solve my Kerberos V problem when IPv6 is enabled in the 
kernel.


Regards,                       Phone:  (250)387-8437
Cy Schubert                      Fax:  (250)387-5766
Team Leader, Sun/DEC Team   Internet:  Cy.Schubert@osg.gov.bc.ca
Open Systems Group, ITSD, ISTA
Province of BC

In message <20000529193526V.ume@bisd.hitachi.co.jp>, Hajimu UMEMOTO 
writes:
> ----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




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?200005291501.e4TF1nr01222>