File autofs-5.0.5-fix-ipv6-name-for-lookup.patch of Package autofs.import5769

commit 5b083026ae08c91a0b01b309d44d278c7eb87ada
Author: Ian Kent <ikent@redhat.com>
Date:   Tue Jun 28 14:45:14 2011 +0800

    autofs-5.0.5 - fix ipv6 name for lookup
    
    When an IPv6 name is given in a map entry the convention is to
    surround the name with square brackets if it is an address. When
    trying to translate such a name autofs did not first remove the
    brackets so the name lookup failed.

Index: autofs-5.0.5/modules/replicated.c
===================================================================
--- autofs-5.0.5.orig/modules/replicated.c
+++ autofs-5.0.5/modules/replicated.c
@@ -217,10 +217,8 @@ static unsigned int get_proximity(struct
 
 		switch (ifr->ifr_addr.sa_family) {
 		case AF_INET:
-#ifndef INET6
 			if (host_addr->sa_family == AF_INET6)
 				break;
-#endif
 			if_addr = (struct sockaddr_in *) &ifr->ifr_addr;
 			ret = memcmp(&if_addr->sin_addr, hst_addr, addr_len);
 			if (!ret) {
@@ -270,10 +268,8 @@ static unsigned int get_proximity(struct
 
 		switch (ifr->ifr_addr.sa_family) {
 		case AF_INET:
-#ifndef INET6
 			if (host_addr->sa_family == AF_INET6)
 				break;
-#endif
 			if_addr = (struct sockaddr_in *) &ifr->ifr_addr;
 			ia =  ntohl((uint32_t) if_addr->sin_addr.s_addr);
 
@@ -1115,15 +1111,29 @@ static int add_host_addrs(struct host **
 			  unsigned int weight, unsigned int options)
 {
 	struct addrinfo hints, *ni, *this;
+	char *name = strdup(host);
+	int len;
+	char buf[MAX_ERR_BUF];
 	int rr = 0;
 	int ret;
 
+	if (!name) {
+		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+		error(LOGOPT_ANY, "strdup: %s", estr);
+		error(LOGOPT_ANY, "failed to add host %s", host);
+		return 0;
+	}
+	len = strlen(name);
+
+	if (name[0] == '[' && name[--len] == ']')
+		name[len] = '\0';
+
 	memset(&hints, 0, sizeof(hints));
 	hints.ai_flags = AI_NUMERICHOST;
 	hints.ai_family = AF_UNSPEC;
 	hints.ai_socktype = SOCK_DGRAM;
 
-	ret = getaddrinfo(host, NULL, &hints, &ni);
+	ret = getaddrinfo(name + 1, NULL, &hints, &ni);
 	if (ret)
 		goto try_name;
 
@@ -1143,10 +1153,11 @@ try_name:
 	hints.ai_family = AF_UNSPEC;
 	hints.ai_socktype = SOCK_DGRAM;
 
-	ret = getaddrinfo(host, NULL, &hints, &ni);
+	ret = getaddrinfo(name + 1, NULL, &hints, &ni);
 	if (ret) {
 		error(LOGOPT_ANY, "hostname lookup failed: %s",
 		      gai_strerror(ret));
+		free(name);
 		return 0;
 	}
 
@@ -1161,6 +1172,7 @@ try_name:
 	}
 	freeaddrinfo(ni);
 done:
+	free(name);
 	return ret;
 }
 
Index: autofs-5.0.5/CHANGELOG
===================================================================
--- autofs-5.0.5.orig/CHANGELOG
+++ autofs-5.0.5/CHANGELOG
@@ -77,6 +77,7 @@
 - fix map source check in file lookup.
 - fix simple bind without SASL support.
 - fix sasl bind host name selection.
+- fix ipv6 name for lookup.
 
 03/09/2009 autofs-5.0.5
 -----------------------
openSUSE Build Service is sponsored by