Cluster Project branch, master, updated. cluster-2.99.00-17-g4b49aac

ccaulfield@sourceware.org ccaulfield@sourceware.org
Tue May 6 10:48:00 GMT 2008


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Cluster Project".

http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=4b49aac718e1c8d703d4c4de6dd9fa9bfe83c932

The branch, master has been updated
       via  4b49aac718e1c8d703d4c4de6dd9fa9bfe83c932 (commit)
      from  446a3d0249ea5f352047233103b9e0ade611466d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 4b49aac718e1c8d703d4c4de6dd9fa9bfe83c932
Author: Christine Caulfield <ccaulfie@redhat.com>
Date:   Tue May 6 11:48:13 2008 +0100

    [CMAN] Fix localhost checking that I broke last week.
    
    Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>

-----------------------------------------------------------------------

Summary of changes:
 cman/daemon/cman-preconfig.c |   44 ++++++++++++++++++++++++++---------------
 1 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/cman/daemon/cman-preconfig.c b/cman/daemon/cman-preconfig.c
index 5aa5087..b03d995 100644
--- a/cman/daemon/cman-preconfig.c
+++ b/cman/daemon/cman-preconfig.c
@@ -110,14 +110,14 @@ static int ipaddr_equal(struct sockaddr_storage *addr1, struct sockaddr_storage
 		return 0;
 
 	if (saddr1->sa_family == AF_INET) {
-		addrlen = sizeof(struct in_addr);
+		addrlen = sizeof(struct sockaddr_in);
 	}
 	if (saddr1->sa_family == AF_INET6) {
-		addrlen = sizeof(struct in6_addr);
+		addrlen = sizeof(struct sockaddr_in6);
 	}
 	assert(addrlen);
 
-	if (memcmp(saddr1->sa_data, saddr2->sa_data, addrlen) == 0)
+	if (memcmp(saddr1, saddr2, addrlen) == 0)
 		return 1;
 	else
 		return 0;
@@ -128,32 +128,39 @@ static int ipaddr_equal(struct sockaddr_storage *addr1, struct sockaddr_storage
 static int get_localhost(int family, struct sockaddr_storage *localhost)
 {
 	char *addr_text;
-	struct sockaddr *saddr = (struct sockaddr *)localhost;
-
-	memset (localhost, 0, sizeof (struct sockaddr_storage));
+	struct addrinfo *ainfo;
+	struct addrinfo ahints;
+	int ret;
 
 	if (family == AF_INET) {
 		addr_text = LOCALHOST_IPV4;
-		if (inet_pton(family, addr_text, (char *)&nodeid) <= 0) {
-			return -1;
-		}
 	} else {
 		addr_text = LOCALHOST_IPV6;
 	}
 
-	if (inet_pton(family, addr_text, (char *)saddr->sa_data) <= 0)
+	memset(&ahints, 0, sizeof(ahints));
+	ahints.ai_socktype = SOCK_DGRAM;
+	ahints.ai_protocol = IPPROTO_UDP;
+	ahints.ai_family = family;
+
+	/* Lookup the nodename address */
+	ret = getaddrinfo(addr_text, NULL, &ahints, &ainfo);
+	if (ret)
 		return -1;
 
-	localhost->ss_family = family;
+	memset(localhost, 0, sizeof(struct sockaddr_storage));
+	memcpy(localhost, ainfo->ai_addr, ainfo->ai_addrlen);
 
+	freeaddrinfo(ainfo);
 	return 0;
 }
 
 /* Return the address family of an IP[46] name */
-static int address_family(char *addr)
+static int address_family(char *addr, struct sockaddr_storage *ssaddr)
 {
 	struct addrinfo *ainfo;
 	struct addrinfo ahints;
+	int family;
 	int ret;
 
 	memset(&ahints, 0, sizeof(ahints));
@@ -165,7 +172,12 @@ static int address_family(char *addr)
 	if (ret)
 		return -1;
 
-	return ainfo->ai_family;
+	memset(ssaddr, 0, sizeof(struct sockaddr_storage));
+	memcpy(ssaddr, ainfo->ai_addr, ainfo->ai_addrlen);
+	family = ainfo->ai_family;
+
+	freeaddrinfo(ainfo);
+	return family;
 }
 
 
@@ -178,14 +190,14 @@ static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr,
 	int ret = 0;
 
 	/* Check the families match */
-	if (address_family(mcast) !=
-	    address_family(ifaddr)) {
+	if (address_family(mcast, &mcast_addr) !=
+	    address_family(ifaddr, &if_addr)) {
 		sprintf(error_reason, "Node address family does not match multicast address family");
 		return -1;
 	}
 
 	/* Check it's not bound to localhost, sigh */
-	get_localhost(mcast_addr.ss_family, &localhost);
+	get_localhost(if_addr.ss_family, &localhost);
 	if (ipaddr_equal(&localhost, &if_addr)) {
 		sprintf(error_reason, "Node address is localhost, please choose a real host address");
 		return -1;


hooks/post-receive
--
Cluster Project



More information about the Cluster-cvs mailing list