This is the mail archive of the cluster-cvs@sourceware.org mailing list for the cluster.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

cluster: STABLE3 - fence: Allow IP addresses as node names


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=683f77512f627e47b0c93c814c56029b6cbf2f9e
Commit:        683f77512f627e47b0c93c814c56029b6cbf2f9e
Parent:        d2bb3a8ebb7b82bbede868ed970d3548aca21042
Author:        Christine Caulfield <ccaulfie@redhat.com>
AuthorDate:    Thu Jun 4 17:10:35 2009 +0100
Committer:     Christine Caulfield <ccaulfie@redhat.com>
CommitterDate: Thu Jun 4 17:10:35 2009 +0100

fence: Allow IP addresses as node names

When checking if a node is a member of the cluster, fenced does a full-string
check of the name. If that doesn't match it then assumes that one of the
names is a FQDN and one is truncated so it starts checking the bit before the
first dot.

If the node names are IP addresses then this will match all of the time for
most clusters. eg: 192.168.2.1 will match 192.168.2.2 because it just
matches the 192. This makes fenced think that the node has rejoined the cluster
because it sees the name in the list of active nodes, and won't fence it.

This patch abandons the match check afer the full-string one if the node
name is found to be an IP address.

bz#504158

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
---
 fence/fenced/member_cman.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/fence/fenced/member_cman.c b/fence/fenced/member_cman.c
index 2f9dbb6..83de8f1 100644
--- a/fence/fenced/member_cman.c
+++ b/fence/fenced/member_cman.c
@@ -1,5 +1,6 @@
 #include "fd.h"
 #include "config.h"
+#include <arpa/inet.h>
 #include <libcman.h>
 
 #define BUFLEN		MAX_NODENAME_LEN+1
@@ -33,6 +34,7 @@ void kick_node_from_cluster(int nodeid)
 static int name_equal(char *name1, char *name2)
 {
 	char name3[BUFLEN], name4[BUFLEN];
+	char addr1[INET6_ADDRSTRLEN];
 	int i, len1, len2;
 
 	len1 = strlen(name1);
@@ -41,6 +43,16 @@ static int name_equal(char *name1, char *name2)
 	if (len1 == len2 && !strncmp(name1, name2, len1))
 		return 1;
 
+	/*
+	 * If the names are IP addresses then don't compare
+	 * what is in front of the dots.
+	 */
+	if (inet_pton(AF_INET, name1, addr1) == 0)
+		return 0;
+
+	if (inet_pton(AF_INET6, name1, addr1) == 0)
+		return 0;
+
 	memset(name3, 0, BUFLEN);
 	memset(name4, 0, BUFLEN);
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]