On Thu, 2011-06-30 at 14:37 +0800, Ian Kent wrote: > On Wed, 2011-06-29 at 11:39 -0300, Leonardo Chiquitto wrote: > > Fix non-IPv6 host name lookups > > > > Commit 5b083026 ("fix ipv6 name for lookup") causes a regression > > in regular (non-IPv6) host name lookups: it trims the first host > > name character even when it's not a "[". This patch fixes the issue. > > Gaah .... yep. > > > > > --- > > modules/replicated.c | 8 +++++--- > > 1 file changed, 5 insertions(+), 3 deletions(-) > > > > Index: autofs/modules/replicated.c > > =================================================================== > > --- autofs.orig/modules/replicated.c > > +++ autofs/modules/replicated.c > > @@ -1125,15 +1125,17 @@ static int add_host_addrs(struct host ** > > } > > len = strlen(name); > > > > - if (name[0] == '[' && name[--len] == ']') > > + if (name[0] == '[' && name[--len] == ']') { > > name[len] = '\0'; > > + memmove(name, name + 1, len); > > + } > > > > memset(&hints, 0, sizeof(hints)); > > hints.ai_flags = AI_NUMERICHOST; > > hints.ai_family = AF_UNSPEC; > > hints.ai_socktype = SOCK_DGRAM; > > > > - ret = getaddrinfo(name + 1, NULL, &hints, &ni); > > + ret = getaddrinfo(name, NULL, &hints, &ni); > > if (ret) > > goto try_name; > > > > @@ -1153,7 +1155,7 @@ try_name: > > hints.ai_family = AF_UNSPEC; > > hints.ai_socktype = SOCK_DGRAM; > > > > - ret = getaddrinfo(name + 1, NULL, &hints, &ni); > > + ret = getaddrinfo(name, NULL, &hints, &ni); > > if (ret) { > > error(LOGOPT_ANY, "hostname lookup failed: %s", > > gai_strerror(ret)); > >
I'd prefer to avoid the use of memmove(3) though so I think this will also fix it. autofs-5.0.6 - fix ipv6 name for lookup fix From: Ian Kent <ik...@redhat.com> Fix an error in the recent ipv6 name for lookup patch. --- modules/replicated.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/replicated.c b/modules/replicated.c index 7f2b892..a10a817 100644 --- a/modules/replicated.c +++ b/modules/replicated.c @@ -1111,7 +1111,8 @@ static int add_host_addrs(struct host **list, const char *host, unsigned int weight, unsigned int options) { struct addrinfo hints, *ni, *this; - char *name = strdup(host); + char *n_ptr; + char *name = n_ptr = strdup(host); int len; char buf[MAX_ERR_BUF]; int rr = 0; @@ -1125,15 +1126,17 @@ static int add_host_addrs(struct host **list, const char *host, } len = strlen(name); - if (name[0] == '[' && name[--len] == ']') + if (name[0] == '[' && name[--len] == ']') { name[len] = '\0'; + name++; + } memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_NUMERICHOST; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - ret = getaddrinfo(name + 1, NULL, &hints, &ni); + ret = getaddrinfo(name, NULL, &hints, &ni); if (ret) goto try_name; @@ -1153,7 +1156,7 @@ try_name: hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - ret = getaddrinfo(name + 1, NULL, &hints, &ni); + ret = getaddrinfo(name, NULL, &hints, &ni); if (ret) { error(LOGOPT_ANY, "hostname lookup failed: %s", gai_strerror(ret)); @@ -1172,7 +1175,7 @@ try_name: } freeaddrinfo(ni); done: - free(name); + free(n_ptr); return ret; } _______________________________________________ autofs mailing list autofs@linux.kernel.org http://linux.kernel.org/mailman/listinfo/autofs