public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* AI_V4MAPPED/AI_ALL
@ 2003-03-24 17:59 Thorsten Kukuk
  2003-03-30 20:11 ` AI_V4MAPPED/AI_ALL Ulrich Drepper
  0 siblings, 1 reply; 7+ messages in thread
From: Thorsten Kukuk @ 2003-03-24 17:59 UTC (permalink / raw)
  To: libc-hacker

[-- Attachment #1: Type: text/plain, Size: 513 bytes --]


Hi,

POSIX and rfc2553 mentions AI_V4MAPPED and AI_ALL as flags for
getaddrinfo(), but we removed them from the public header because
we don't want people to use them. What where the reasons for this?

  Thorsten

-- 
Thorsten Kukuk       http://www.suse.de/~kukuk/        kukuk@suse.de
SuSE Linux AG        Deutschherrnstr. 15-19        D-90429 Nuernberg
--------------------------------------------------------------------    
Key fingerprint = A368 676B 5E1B 3E46 CFCE  2D97 F8FD 4E23 56C6 FB4B

[-- Attachment #2: Type: application/pgp-signature, Size: 240 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-24 17:59 AI_V4MAPPED/AI_ALL Thorsten Kukuk
@ 2003-03-30 20:11 ` Ulrich Drepper
  2003-03-30 22:08   ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
  0 siblings, 1 reply; 7+ messages in thread
From: Ulrich Drepper @ 2003-03-30 20:11 UTC (permalink / raw)
  To: Thorsten Kukuk; +Cc: libc-hacker

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Thorsten Kukuk wrote:

> POSIX and rfc2553 mentions AI_V4MAPPED and AI_ALL as flags for
> getaddrinfo(), but we removed them from the public header because
> we don't want people to use them. What where the reasons for this?

The RFCs are changed far too frequently for my taste.  I'm not positive
about adding anything not already in POSIX unless it's really proven to
be stable and not changed in a couple of months.

- -- 
- --------------.                        ,-.            444 Castro Street
Ulrich Drepper \    ,-----------------'   \ Mountain View, CA 94041 USA
Red Hat         `--' drepper at redhat.com `---------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+hoIT2ijCOnn/RHQRAnecAKDEv2E2ZcZSTzQdhhxda01ZFEWlNgCgv3T1
y/WQ8PQMTDvlGhjlDQWYIVA=
=Soes
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-30 20:11 ` AI_V4MAPPED/AI_ALL Ulrich Drepper
@ 2003-03-30 22:08   ` Thorsten Kukuk
  2003-03-30 23:33     ` AI_V4MAPPED/AI_ALL Roland McGrath
  0 siblings, 1 reply; 7+ messages in thread
From: Thorsten Kukuk @ 2003-03-30 22:08 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: libc-hacker

[-- Attachment #1: Type: text/plain, Size: 1237 bytes --]

On Sat, Mar 29, Ulrich Drepper wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Thorsten Kukuk wrote:
> 
> > POSIX and rfc2553 mentions AI_V4MAPPED and AI_ALL as flags for
> > getaddrinfo(), but we removed them from the public header because
> > we don't want people to use them. What where the reasons for this?
> 
> The RFCs are changed far too frequently for my taste.  I'm not positive
> about adding anything not already in POSIX unless it's really proven to
> be stable and not changed in a couple of months.

Ok, AI_V4MAPPED and AI_ALL are specified in POSIX, rfc2553 and
rfc3493. So I doubt that it will be changed in the near future
again, I think something specified in POSIX should be stable 
enought to include in glibc.

I append a patch which adds both defines to resolv/netdb.h and
implements it in getaddrinfo(). (Looking at the ugly getaddrinfo
code, it seems we really need a new, clean implementation :( ).

  Thorsten

-- 
Thorsten Kukuk       http://www.suse.de/~kukuk/        kukuk@suse.de
SuSE Linux AG        Deutschherrnstr. 15-19        D-90429 Nuernberg
--------------------------------------------------------------------    
Key fingerprint = A368 676B 5E1B 3E46 CFCE  2D97 F8FD 4E23 56C6 FB4B

[-- Attachment #2: getaddrinfo.v4mapped.diff --]
[-- Type: text/plain, Size: 3089 bytes --]

2003-03-29  Thorsten Kukuk <kukuk@suse.de>

	* sysdeps/posix/getaddrinfo.c: Add support for AI_V4MAPPED/AI_ALL
	as described by POSIX and in rfc3493
	* resolv/netdb.h: Add AI_V4MAPPED/AI_ALL

--- resolv/netdb.h	2002-08-11 09:57:16.000000000 +0200
+++ resolv/netdb.h	2003-03-30 19:47:20.000000000 +0200
@@ -424,6 +424,8 @@
 # define AI_PASSIVE	0x0001	/* Socket address is intended for `bind'.  */
 # define AI_CANONNAME	0x0002	/* Request for canonical name.  */
 # define AI_NUMERICHOST	0x0004	/* Don't use name resolution.  */
+# define AI_V4MAPPED    0x0008  /* IPv4-mapped addresses are acceptable.  */
+# define AI_ALL         0x0010  /* Return both IPv4 and IPv6 addresses.  */
 
 /* Error values for `getaddrinfo' function.  */
 # define EAI_BADFLAGS	  -1	/* Invalid value for `ai_flags' field.  */
--- sysdeps/posix/getaddrinfo.c	2002-12-21 14:39:05.000000000 +0100
+++ sysdeps/posix/getaddrinfo.c	2003-03-30 19:51:35.000000000 +0200
@@ -52,6 +52,9 @@
 #include <net/if.h>
 #include <nsswitch.h>
 
+/* Get implementation for some internal functions. */
+#include <resolv/mapv4v6addr.h>
+
 #define GAIH_OKIFUNSPEC 0x0100
 #define GAIH_EAI        ~(GAIH_OKIFUNSPEC)
 
@@ -368,6 +371,7 @@
   struct gaih_servtuple *st = (struct gaih_servtuple *) &nullserv;
   struct gaih_addrtuple *at = NULL;
   int rc;
+  int v4mapped = (req->ai_family == AF_INET6) && (req->ai_flags & AI_V4MAPPED);
 
   if (req->ai_protocol || req->ai_socktype)
     {
@@ -488,7 +492,7 @@
 
       if (inet_pton (AF_INET, name, at->addr) > 0)
 	{
-	  if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET)
+	  if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET || v4mapped)
 	    at->family = AF_INET;
 	  else
 	    return -EAI_ADDRFAMILY;
@@ -609,7 +613,10 @@
 	      gethosts (AF_INET6, struct in6_addr);
 	      no_inet6_data = no_data;
 	    }
-	  else if (req->ai_family == AF_INET)
+
+	  if (req->ai_family == AF_INET ||
+	      (v4mapped && (no_inet6_data != 0 || h == NULL
+			    || (req->ai_flags & AI_ALL))))
 	    gethosts (AF_INET, struct in_addr);
 
 	  if (no_data != 0 && no_inet6_data != 0)
@@ -745,7 +751,7 @@
 	else
 	  namelen = 0;
 
-	if (at2->family == AF_INET6)
+	if (at2->family == AF_INET6 || v4mapped)
 	  {
 	    family = AF_INET6;
 	    socklen = sizeof (struct sockaddr_in6);
@@ -779,8 +785,13 @@
 		  (struct sockaddr_in6 *) (*pai)->ai_addr;
 
 		sin6p->sin6_flowinfo = 0;
-		memcpy (&sin6p->sin6_addr,
-			at2->addr, sizeof (struct in6_addr));
+		if (at2->family == AF_INET6)
+		  memcpy (&sin6p->sin6_addr,
+			  at2->addr, sizeof (struct in6_addr));
+		else
+		  map_v4v6_address ((char *)&at2->addr,
+				    (char *)&sin6p->sin6_addr);
+
 		sin6p->sin6_port = st2->port;
 		sin6p->sin6_scope_id = at2->scopeid;
 	      }
@@ -844,7 +854,8 @@
   if (hints == NULL)
     hints = &default_hints;
 
-  if (hints->ai_flags & ~(AI_PASSIVE|AI_CANONNAME|AI_NUMERICHOST))
+  if (hints->ai_flags & ~(AI_PASSIVE|AI_CANONNAME|AI_NUMERICHOST|
+                          AI_V4MAPPED|AI_ALL))
     return EAI_BADFLAGS;
 
   if ((hints->ai_flags & AI_CANONNAME) && name == NULL)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-30 22:08   ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
@ 2003-03-30 23:33     ` Roland McGrath
  2003-03-31  9:46       ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
  0 siblings, 1 reply; 7+ messages in thread
From: Roland McGrath @ 2003-03-30 23:33 UTC (permalink / raw)
  To: Thorsten Kukuk; +Cc: Ulrich Drepper, libc-hacker

> Ok, AI_V4MAPPED and AI_ALL are specified in POSIX, rfc2553 and
> rfc3493. So I doubt that it will be changed in the near future
> again, I think something specified in POSIX should be stable 
> enought to include in glibc.

Agreed.  I'm not sure the RFCs always indicate a stable interface, but
what's in 1003.1-2001 we definitely want to implement and these are there.

Can you add a test case that is broken by the current code and fixed by
your patch?  We can add an xtests case that requires some particular DNS
zone data to do the test.  At least for forward zone data, I can set up a
glibc-test.gnu.org subdomain with test data if needed.

> I append a patch which adds both defines to resolv/netdb.h and
> implements it in getaddrinfo(). (Looking at the ugly getaddrinfo
> code, it seems we really need a new, clean implementation :( ).

Definitely true.  It was close to the top of my list before you fixed the
AF_UNSPEC behavior.  I can probably find time before the next release to do
the rewrite.  If you have any list of known issues with the current
implementation (aside from its internal structure), and especially if we
can soup up the tests to cover more details, that would be a help.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-30 23:33     ` AI_V4MAPPED/AI_ALL Roland McGrath
@ 2003-03-31  9:46       ` Thorsten Kukuk
  2003-03-31 13:29         ` AI_V4MAPPED/AI_ALL Roland McGrath
  0 siblings, 1 reply; 7+ messages in thread
From: Thorsten Kukuk @ 2003-03-31  9:46 UTC (permalink / raw)
  To: Roland McGrath; +Cc: libc-hacker

[-- Attachment #1: Type: text/plain, Size: 2211 bytes --]

On Sun, Mar 30, Roland McGrath wrote:

> > Ok, AI_V4MAPPED and AI_ALL are specified in POSIX, rfc2553 and
> > rfc3493. So I doubt that it will be changed in the near future
> > again, I think something specified in POSIX should be stable 
> > enought to include in glibc.
> 
> Agreed.  I'm not sure the RFCs always indicate a stable interface, but
> what's in 1003.1-2001 we definitely want to implement and these are there.
> 
> Can you add a test case that is broken by the current code and fixed by
> your patch?  We can add an xtests case that requires some particular DNS
> zone data to do the test.  At least for forward zone data, I can set up a
> glibc-test.gnu.org subdomain with test data if needed.

I can write a test on basis of my current test program for this.
All I need is a hostname with only one IPv4 address and one with
a IPv4 and a IPv6 address.

I can also add test cases for more flags, but than reverse lookup
must work, too.

> > I append a patch which adds both defines to resolv/netdb.h and
> > implements it in getaddrinfo(). (Looking at the ugly getaddrinfo
> > code, it seems we really need a new, clean implementation :( ).
> 
> Definitely true.  It was close to the top of my list before you fixed the
> AF_UNSPEC behavior.  I can probably find time before the next release to do
> the rewrite.  If you have any list of known issues with the current
> implementation (aside from its internal structure), and especially if we
> can soup up the tests to cover more details, that would be a help.

There is a new flag AI_NUMERICSERV which is not supported and it
seems to me that return codes are wrong in most cases, too.

The WIDE project seems to have some tests for getaddrinfo, too. But
they expect that you have an entry for localhost with "::1" and
"127.0.0.1" in /etc/hosts. But maybe we can change this and add
this tests, too?

  Thorsten

-- 
Thorsten Kukuk       http://www.suse.de/~kukuk/        kukuk@suse.de
SuSE Linux AG        Deutschherrnstr. 15-19        D-90429 Nuernberg
--------------------------------------------------------------------    
Key fingerprint = A368 676B 5E1B 3E46 CFCE  2D97 F8FD 4E23 56C6 FB4B

[-- Attachment #2: Type: application/pgp-signature, Size: 240 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-31  9:46       ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
@ 2003-03-31 13:29         ` Roland McGrath
  2003-03-31 21:36           ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
  0 siblings, 1 reply; 7+ messages in thread
From: Roland McGrath @ 2003-03-31 13:29 UTC (permalink / raw)
  To: Thorsten Kukuk; +Cc: libc-hacker

> I can write a test on basis of my current test program for this.

Please do.

> I can also add test cases for more flags, but than reverse lookup
> must work, too.

These are useful to have as well, but put them in a separate test so that
they can be enabled/disabled independent of the others.  For now you can
write tests using whatever domain data is easy for you to test with locally.
When you post the tests you can show me the relevant records (e.g. dig output)
and then I can fix up the names in the test data with more permanent names
when I install them.

> The WIDE project seems to have some tests for getaddrinfo, too. But
> they expect that you have an entry for localhost with "::1" and
> "127.0.0.1" in /etc/hosts. But maybe we can change this and add
> this tests, too?

That is fine for xtests.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: AI_V4MAPPED/AI_ALL
  2003-03-31 13:29         ` AI_V4MAPPED/AI_ALL Roland McGrath
@ 2003-03-31 21:36           ` Thorsten Kukuk
  0 siblings, 0 replies; 7+ messages in thread
From: Thorsten Kukuk @ 2003-03-31 21:36 UTC (permalink / raw)
  To: Roland McGrath; +Cc: libc-hacker

[-- Attachment #1: Type: text/plain, Size: 620 bytes --]

On Mon, Mar 31, Roland McGrath wrote:

> > I can write a test on basis of my current test program for this.
> 
> Please do.

I have appended tst-v4mapped.c. All it needs is a hostname which has
one IPv4 address and one hostname with one IPv4 and one IPv6 address.
Currently I use www.gnu.org and wwwprod.ipv6.bieringer.de.

  Thorsten

-- 
Thorsten Kukuk       http://www.suse.de/~kukuk/        kukuk@suse.de
SuSE Linux AG        Deutschherrnstr. 15-19        D-90429 Nuernberg
--------------------------------------------------------------------    
Key fingerprint = A368 676B 5E1B 3E46 CFCE  2D97 F8FD 4E23 56C6 FB4B

[-- Attachment #2: tst-v4mapped.c --]
[-- Type: text/plain, Size: 6381 bytes --]

/* Test case for AI_V4MAPPED/AI_ALL and getaddrinfo(). */

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <err.h>
#include <alloca.h>

static int
print_getaddrinfo (struct addrinfo *res0)
{
  struct addrinfo *res;

  for (res = res0; res; res = res->ai_next)
    {
      if (res->ai_canonname)
	printf ("canonname=%s\n", res->ai_canonname);
      if (res->ai_family == AF_INET)
	{
	  char buf[INET6_ADDRSTRLEN];
	  struct sockaddr_in *sin = (struct sockaddr_in *) res->ai_addr;
	  const char *ip = inet_ntop (res->ai_family, &sin->sin_addr.s_addr,
				      buf, sizeof (buf));
	  printf ("ai_family=AF_INET\n");
	  printf ("ai_addr=%s\n", ip);
	}
      else if (res->ai_family == AF_INET6)
	{
	  char buf[INET6_ADDRSTRLEN];
	  struct sockaddr_in6 *sin = (struct sockaddr_in6 *) res->ai_addr;
	  const char *ip =
	    inet_ntop (res->ai_family, (void *) &sin->sin6_addr,
		       buf, sizeof (buf));
	  printf ("ai_family=AF_INET6\n");
	  printf ("ai_addr=%s\n", ip);
	}
      else
	printf ("ai_family=%i\n", res->ai_family);
    }
  return 0;
}

static struct addrinfo *
call_getaddrinfo (const char *name, int af, int flags)
{
  struct addrinfo hints, *res;
  int error;

  hints.ai_family = af;
  hints.ai_socktype = SOCK_STREAM;
  hints.ai_flags = flags;
  hints.ai_protocol = 0;
  hints.ai_addrlen = 0;
  hints.ai_canonname = NULL;
  hints.ai_addr = NULL;
  hints.ai_next = NULL;
  error = getaddrinfo (name, NULL, &hints, &res);
  if (error)
    {
      fprintf (stderr, "%s\n", gai_strerror (error));
      return NULL;
    }

  return res;
}

int
main (int argc, char *argv[])
{
  int errors = 0;
  struct addrinfo *res;
  /* hostname, which has only one IPv4 address.  */
  const char *ipv4only_host = "www.gnu.org";
  /* hostname, which has one IPv4 and one IPv6 address.  */
  const char *ipv4ipv6_host = "wwwprod.ipv6.bieringer.de";

  printf ("Using getaddrinfo (%s, AF_INET, AI_CANONNAME):\n", ipv4only_host);
  res = call_getaddrinfo (ipv4only_host, AF_INET, AI_CANONNAME);
  if (res == NULL)
    {
      printf ("ERROR: getaddrinfo should return an entry\n");
      ++errors;
    }
  else
    {
      if (res->ai_next != NULL)
	{
	  printf ("ERROR: getaddrinfo should return only one entry\n");
	  ++errors;
	}
      if (res->ai_family != AF_INET)
	{
	  printf ("ERROR: %d is not AF_INET\n", res->ai_family);
	  ++errors;
	}
      if (res->ai_canonname == NULL)
	{
	  printf ("ERROR: ai_canonname is not set\n");
	  ++errors;
	}
      print_getaddrinfo (res);
      freeaddrinfo (res);
    }

  printf ("Using getaddrinfo (%s, AF_INET6, AI_CANONNAME):\n", ipv4ipv6_host);
  res = call_getaddrinfo (ipv4ipv6_host, AF_INET6, AI_CANONNAME);
  if (res == NULL)
    {
      printf ("ERROR: getaddrinfo should return an entry\n");
      ++errors;
    }
  else
    {
      if (res->ai_next != NULL)
	{
	  printf ("ERROR: test should return only one entry\n");
	  ++errors;
	}
      if (res->ai_family != AF_INET6)
	{
	  printf ("ERROR: %d is not AF_INET6\n", res->ai_family);
	  ++errors;
	}
      if (res->ai_canonname == NULL)
	{
	  printf ("ERROR: ai_canonname is not set\n");
	  ++errors;
	}

      print_getaddrinfo (res);
      freeaddrinfo (res);
    }

  printf ("Using getaddrinfo (%s, AF_INET6, AI_CANONNAME|AI_V4MAPPED):\n",
	  ipv4only_host);
  res =
    call_getaddrinfo (ipv4only_host, AF_INET6, AI_CANONNAME | AI_V4MAPPED);
  if (res == NULL)
    {
      printf ("ERROR: getaddrinfo should return an entry\n");
      ++errors;
    }
  else
    {
      struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) res->ai_addr;
      if (res->ai_next != NULL)
	{
	  printf ("ERROR: test should return only one entry\n");
	  ++errors;
	}
      if (res->ai_family != AF_INET6)
	{
	  printf ("ERROR: %d is not AF_INET6\n", res->ai_family);
	  ++errors;
	}
      if (!IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32))
	{
	  printf ("ERROR: No IPv6 mapped IPv4 address returned\n");
	  ++errors;
	}
      if (res->ai_canonname == NULL)
	{
	  printf ("ERROR: ai_canonname is not set\n");
	  ++errors;
	}

      print_getaddrinfo (res);
      freeaddrinfo (res);
    }

  printf ("Using getaddrinfo (%s, AF_INET6, AI_CANONNAME|AI_V4MAPPED):\n",
	  ipv4ipv6_host);
  res =
    call_getaddrinfo (ipv4ipv6_host, AF_INET6, AI_CANONNAME | AI_V4MAPPED);
  if (res == NULL)
    {
      printf ("ERROR: getaddrinfo should return an entry\n");
      ++errors;
    }
  else
    {
      struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) res->ai_addr;
      if (res->ai_next != NULL)
	{
	  printf ("ERROR: test should return only one entry\n");
	  ++errors;
	}
      if (res->ai_family != AF_INET6)
	{
	  printf ("ERROR: %d is not AF_INET6\n", res->ai_family);
	  ++errors;
	}
      if (IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32))
	{
	  printf ("ERROR: getaddrinfo returns a IPv6 mapped IPv4 address\n");
	  ++errors;
	}
      if (res->ai_canonname == NULL)
	{
	  printf ("ERROR: ai_canonname is not set\n");
	  ++errors;
	}

      print_getaddrinfo (res);
      freeaddrinfo (res);
    }

  printf
    ("Using getaddrinfo (%s, AF_INET6, AI_CANONNAME|AI_V4MAPPED|AI_ALL):\n",
     ipv4ipv6_host);
  res =
    call_getaddrinfo (ipv4ipv6_host, AF_INET6,
		      AI_CANONNAME | AI_V4MAPPED | AI_ALL);
  if (res == NULL)
    {
      printf ("ERROR: getaddrinfo should return an entry\n");
      ++errors;
    }
  else
    {
      struct addrinfo *res0;
      int found_ipv4 = 0, found_ipv6 = 0;

      if (res->ai_next == NULL || res->ai_next->ai_next != NULL)
	{
	  printf ("ERROR: test should return exact two entries\n");
	  ++errors;
	}

      for (res0 = res; res0; res0 = res0->ai_next)
	{
	  struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) res0->ai_addr;
	  if (res0->ai_family != AF_INET6)
	    {
	      printf ("ERROR: %d is not AF_INET6\n", res->ai_family);
	      ++errors;
	    }
	  if (IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32))
	    ++found_ipv4;
	  else
	    ++found_ipv6;
	}

      if (found_ipv4 != 1)
	{
	  printf
	    ("ERROR: we should got one IPv6 mapped IPv4 address, but we got %d\n",
	     found_ipv4);
	  ++errors;
	}
      if (found_ipv6 != 1)
	{
	  printf ("ERROR: we should got one IPv6 address, but we got %d\n",
		  found_ipv6);
	  ++errors;
	}
      print_getaddrinfo (res);
      freeaddrinfo (res);
    }

  return errors;
}

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2003-03-31 13:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-24 17:59 AI_V4MAPPED/AI_ALL Thorsten Kukuk
2003-03-30 20:11 ` AI_V4MAPPED/AI_ALL Ulrich Drepper
2003-03-30 22:08   ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
2003-03-30 23:33     ` AI_V4MAPPED/AI_ALL Roland McGrath
2003-03-31  9:46       ` AI_V4MAPPED/AI_ALL Thorsten Kukuk
2003-03-31 13:29         ` AI_V4MAPPED/AI_ALL Roland McGrath
2003-03-31 21:36           ` AI_V4MAPPED/AI_ALL Thorsten Kukuk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).