From 48ad3758971909879fc4a18b1bc6d30f2194c50c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20Salvet?= Date: Wed, 28 Jul 2010 13:17:38 +0000 Subject: [PATCH] Support IPv6 literal adresses. --- org.glite.security.gss/src/glite_gss.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/org.glite.security.gss/src/glite_gss.c b/org.glite.security.gss/src/glite_gss.c index 290f29f..32f0c2b 100644 --- a/org.glite.security.gss/src/glite_gss.c +++ b/org.glite.security.gss/src/glite_gss.c @@ -151,6 +151,18 @@ static int asyn_getservbyname(struct sockaddr_storage *addrOut, socklen_t *a_len struct timeval tv, *tvp; struct timeval start_time,check_time; int err = NETDB_INTERNAL; + char *name2; + size_t namelen; + + name2 = name; + namelen = strlen(name); + if (name[0]=='[' && name[namelen-1]==']') { + /* IPv6 literal, strip brackets */ + name2 = strdup(name); + if (!name2) return NETDB_INTERNAL; + name2[namelen-1] = '\0'; + name2++; + } /* start timer */ gettimeofday(&start_time,0); @@ -160,7 +172,7 @@ static int asyn_getservbyname(struct sockaddr_storage *addrOut, socklen_t *a_len ar.ent = (struct hostent *) calloc (sizeof(*ar.ent),1); /* query DNS server asynchronously */ - ares_gethostbyname(channel, name, QUERY_AF_ALL, callback_ares_gethostbyname, + ares_gethostbyname(channel, name2, QUERY_AF_ALL, callback_ares_gethostbyname, (void *) &ar); /* wait for result */ @@ -221,6 +233,9 @@ static int asyn_getservbyname(struct sockaddr_storage *addrOut, socklen_t *a_len free_hostent(ar.ent); ar.ent = NULL; err = ar.err; + /* literal conversion should always succeed */ + if (name2 != name) free(name2-1); + ares_destroy(channel); return err; -- 1.8.2.3