From e2a211b680862c8148b016580d393412756fa690 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20Salvet?= Date: Mon, 2 Aug 2010 09:36:18 +0000 Subject: [PATCH] Move conversion of IPv6-mapped address before in front of other checks. --- org.glite.lb.server/src/bkserverd.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/org.glite.lb.server/src/bkserverd.c b/org.glite.lb.server/src/bkserverd.c index 2fa1a94..f0a2e87 100644 --- a/org.glite.lb.server/src/bkserverd.c +++ b/org.glite.lb.server/src/bkserverd.c @@ -1839,6 +1839,14 @@ static int asyn_gethostbyaddr(char **name, char **service, const struct sockaddr int err = NETDB_INTERNAL; struct sockaddr_in v4; + if (addr->sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)->sin6_addr)) { + v4.sin_family = AF_INET; + v4.sin_port = ((struct sockaddr_in6 *)addr)->sin6_port; + v4.sin_addr.s_addr = *(in_addr_t *) &((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr[12]; + addr = (struct sockaddr *) &v4; + len = sizeof(v4); + } + if (!numeric && addr->sa_family == AF_INET6) { /* don't bother, c-ares up to version 1.7.3 has fatal bug */ return NETDB_INTERNAL; @@ -1851,14 +1859,6 @@ static int asyn_gethostbyaddr(char **name, char **service, const struct sockaddr if ( ares_init(&channel) != ARES_SUCCESS ) return(NETDB_INTERNAL); memset((void *) &ar, 0, sizeof(ar)); - if (addr->sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)->sin6_addr)) { - v4.sin_family = AF_INET; - v4.sin_port = ((struct sockaddr_in6 *)addr)->sin6_port; - v4.sin_addr.s_addr = *(in_addr_t *) &((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr[12]; - addr = (struct sockaddr *) &v4; - len = sizeof(v4); - } - /* query DNS server asynchronously */ if (name) flags |= ARES_NI_LOOKUPHOST | ( numeric? ARES_NI_NUMERICHOST : 0); if (service) flags |= ARES_NI_LOOKUPSERVICE | ( numeric? ARES_NI_NUMERICSERV : 0); -- 1.8.2.3