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

Reply via email to