]> granicus.if.org Git - php/commitdiff
Test getaddrinfo() for brokenness. Pretend it doesn't exist if it misbehaves.
authorSara Golemon <pollita@php.net>
Fri, 12 Mar 2004 00:16:38 +0000 (00:16 +0000)
committerSara Golemon <pollita@php.net>
Fri, 12 Mar 2004 00:16:38 +0000 (00:16 +0000)
configure.in

index 17b145f33ccda2c88acb2ae8444955c4a7de776d..6caada3f87e928b68115a3369b876144318c8c00 100644 (file)
@@ -521,10 +521,45 @@ vsnprintf \
 )
 
 dnl Check for getaddrinfo, should be a better way, but...
+dnl Also check for working getaddrinfo
 AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo,
 [AC_TRY_LINK([#include <netdb.h>],
-                [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);],
-  ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)])
+                [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], 
+  AC_TRY_RUN([
+#include <netdb.h>
+#include <sys/types.h>
+int main(void) {
+  struct addrinfo *ai, *pai, hints;
+
+  memset(&hints, 0, sizeof(hints));
+  hints.ai_flags = AI_NUMERICHOST;
+
+  if (getaddrinfo("127.0.0.1", NULL, &hints, &ai) < 0) {
+    exit(1);
+  }
+
+  if (ai == NULL) {
+    exit(1);
+  }
+
+  pai = ai;
+  
+  while (pai) {
+    if (pai->ai_family != AF_INET) {
+      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
+      exit(1);
+    }
+    if (pai->ai_addr->sa_family != AF_INET) {
+      /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
+      exit(1);
+    }
+    pai = pai->ai_next;
+  }
+  freeaddrinfo(ai);
+  exit(0);
+}
+  ],ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no),
+ac_cv_func_getaddrinfo=no)])
 if test "$ac_cv_func_getaddrinfo" = yes; then
   AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
 fi