2006-07-22 Yoann Vandoorselaere <yoann.v@prelude-ids.com>
authorSimon Josefsson <simon@josefsson.org>
Sat, 22 Jul 2006 10:13:57 +0000 (10:13 +0000)
committerSimon Josefsson <simon@josefsson.org>
Sat, 22 Jul 2006 10:13:57 +0000 (10:13 +0000)
and Simon Josefsson <jas@extundo.com>

* getaddrinfo.h (AI_PASSIVE): Make sure it is defined.

* getaddrinfo.c (getaddrinfo): Support AI_PASSIVE.

lib/ChangeLog
lib/getaddrinfo.c
lib/getaddrinfo.h

index 81548c3..f0dc0f7 100644 (file)
@@ -1,3 +1,10 @@
+2006-07-22  Yoann Vandoorselaere <yoann.v@prelude-ids.com>
+       and Simon Josefsson <jas@extundo.com>
+
+       * getaddrinfo.h (AI_PASSIVE): Make sure it is defined.
+
+       * getaddrinfo.c (getaddrinfo): Support AI_PASSIVE.
+
 2006-07-21  Eric Blake  <ebb9@byu.net>
 
        * stdlib-safer.h: New file from coreutils, required by
index e6bad11..9003abf 100644 (file)
@@ -140,7 +140,7 @@ getaddrinfo (const char *restrict nodename,
     return getaddrinfo_ptr (nodename, servname, hints, res);
 #endif
 
-  if (hints && (hints->ai_flags & ~AI_CANONNAME))
+  if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE)))
     /* FIXME: Support more flags. */
     return EAI_BADFLAGS;
 
@@ -153,8 +153,16 @@ getaddrinfo (const char *restrict nodename,
     return EAI_SOCKTYPE; /* FIXME: Better return code? */
 
   if (!nodename)
-    /* FIXME: Support server bind mode. */
-    return EAI_NONAME;
+    {
+      if (!(hints->ai_flags & AI_PASSIVE))
+       return EAI_NONAME;
+
+#ifdef HAVE_IPV6
+      nodename = (hint->ai_family == AF_INET6) ? "::" : "0.0.0.0";
+#else
+      nodename = "0.0.0.0";
+#endif
+    }
 
   if (servname)
     {
index 58048f4..b4ef242 100644 (file)
@@ -48,12 +48,16 @@ struct addrinfo
 #endif
 
 /* Possible values for `ai_flags' field in `addrinfo' structure.  */
+#ifndef AI_PASSIVE
+# define AI_PASSIVE    0x0001  /* Socket address is intended for `bind'.  */
+#endif
 #ifndef AI_CANONNAME
 # define AI_CANONNAME  0x0002  /* Request for canonical name.  */
 #endif
 #ifndef AI_NUMERICSERV
 # define AI_NUMERICSERV        0x0400  /* Don't use name resolution.  */
 #endif
+
 #if 0
 /* The commented out definitions below are not yet implemented in the
    GNULIB getaddrinfo() replacement, so are not yet needed and may, in fact,
@@ -61,7 +65,6 @@ struct addrinfo
    define them.
 
    If they are restored, be sure to protect the definitions with #ifndef.  */
-#define AI_PASSIVE     0x0001  /* Socket address is intended for `bind'.  */
 #define AI_NUMERICHOST 0x0004  /* Don't use name resolution.  */
 #define AI_V4MAPPED    0x0008  /* IPv4 mapped addresses are acceptable.  */
 #define AI_ALL         0x0010  /* Return IPv4 mapped and IPv6 addresses.  */