You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jo...@apache.org on 2004/03/04 17:17:25 UTC
cvs commit: apr/network_io/unix sockaddr.c
jorton 2004/03/04 08:17:25
Modified: network_io/unix sockaddr.c
Log:
Workaround odd behaviour of AF_UNSPEC lookups with AI_PASSIVE set on
some old versions of glibc:
* network_io/sockets/sockaddr.c (call_resolver): Ignore anything other
than AF_INET and AF_INET6 addresses.
Revision Changes Path
1.49 +11 -1 apr/network_io/unix/sockaddr.c
Index: sockaddr.c
===================================================================
RCS file: /home/cvs/apr/network_io/unix/sockaddr.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -w -d -u -r1.48 -r1.49
--- sockaddr.c 13 Feb 2004 09:38:33 -0000 1.48
+++ sockaddr.c 4 Mar 2004 16:17:25 -0000 1.49
@@ -352,7 +352,17 @@
prev_sa = NULL;
ai = ai_list;
while (ai) { /* while more addresses to report */
- apr_sockaddr_t *new_sa = apr_pcalloc(p, sizeof(apr_sockaddr_t));
+ apr_sockaddr_t *new_sa;
+
+ /* Ignore anything bogus: getaddrinfo in some old versions of
+ * glibc will return AF_UNIX entries for AF_UNSPEC+AI_PASSIVE
+ * lookups. */
+ if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) {
+ ai = ai->ai_next;
+ continue;
+ }
+
+ new_sa = apr_pcalloc(p, sizeof(apr_sockaddr_t));
new_sa->pool = p;
memcpy(&new_sa->sa, ai->ai_addr, ai->ai_addrlen);