Date: Mon, 23 Jul 2001 01:40:40 +0100 From: Brian Somers <brian@Awfulhak.org> To: Hajimu UMEMOTO <ume@mahoroba.org> Cc: brian@Awfulhak.org, brian@FreeBSD.org, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org, brian@Awfulhak.org Subject: Re: cvs commit: src/lib/libutil realhostname.c Message-ID: <200107230040.f6N0efg12288@hak.lan.Awfulhak.org> In-Reply-To: Message from Hajimu UMEMOTO <ume@mahoroba.org> of "Mon, 23 Jul 2001 05:52:25 %2B0900." <20010723.055225.111155784.ume@mahoroba.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> >>>>> On Sun, 22 Jul 2001 21:11:50 +0100
> >>>>> Brian Somers <brian@Awfulhak.org> said:
>
> brian> With this patch, getaddrinfo() only comes back with the A record, and
>
> Yes, it is expected behavior.
>
> brian> realhostname_sa() fails (because it's not the same as the connecting
> brian> IPv6 number).
>
> Umm, realhostname_sa() has a trick for this case. The past when I
> tested it, it seemd working to me.
>
> #ifdef INET6
[.....]
It seems to me that realhostname_sa() already has to deal specially
with ipv4 mapped ipv6 addresses. Surely the correct answer is to
special-case such addresses in the getaddrinfo() hints (see the
attached patch - based on what's in -current at the moment).
The only alternative that I can think of is to have getaddrinfo()
with a hint of AF_UNSPEC end up finding all A and AAAA records. If
it returns only one type of address, then it can't satisfy both the
ipv4 mapped address case *and* the normal ipv6 case (as per my
fec0::* addresses that I mentioned before).
> --
> Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
> ume@mahoroba.org ume@bisd.hitachi.co.jp ume@{,jp.}FreeBSD.org
> http://www.imasy.org/~ume/
Index: realhostname.c
===================================================================
RCS file: /home/ncvs/src/lib/libutil/realhostname.c,v
retrieving revision 1.12
diff -u -r1.12 realhostname.c
--- realhostname.c 2001/07/21 00:18:54 1.12
+++ realhostname.c 2001/07/23 00:32:52
@@ -103,8 +103,17 @@
memset(&hints, 0, sizeof(struct addrinfo));
switch (addr->sa_family) {
- case AF_INET:
+#ifdef INET6
case AF_INET6:
+ if (IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)
+ ->sin6_addr)) {
+ /* Special-case IP6 over IP4 stuff */
+ hints.ai_family = AF_INET;
+ break;
+ }
+ /*FALLTHRU*/
+#endif
+ case AF_INET:
hints.ai_family = addr->sa_family;
break;
default:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200107230040.f6N0efg12288>
