]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
fixed segv when no public interface is set
authorAndrew Tridgell <tridge@samba.org>
Mon, 27 Aug 2007 01:49:42 +0000 (11:49 +1000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 27 Aug 2007 01:49:42 +0000 (11:49 +1000)
(This used to be ctdb commit 55b415f87bd3cba13c73ccd2fe661720754a6af7)

ctdb/server/ctdb_takeover.c

index aa83000131a8c1005c278665f1bfa4c2f6d62438..89787caf1be080a827acd30e6d0bb1f4f052daa1 100644 (file)
@@ -185,7 +185,7 @@ static int32_t find_public_ip_vnn(struct ctdb_context *ctdb, char *ip)
        int i;
 
        for (i=0;i<ctdb->num_nodes;i++) {
-               if (!strcmp(ip, ctdb->nodes[i]->public_address)) {
+               if (ctdb->nodes[i]->public_address && !strcmp(ip, ctdb->nodes[i]->public_address)) {
                        vnn = i;
                        break;
                }
@@ -641,6 +641,14 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
        char *addr;
        int32_t takeover_vnn;
 
+       addr = inet_ntoa(p->dest.sin_addr);
+
+       takeover_vnn = find_public_ip_vnn(ctdb, addr);
+       if (takeover_vnn == -1) {
+               DEBUG(3,("Could not add client IP %s. This is not a public address.\n", addr)); 
+               return 0;
+       }
+
        ip = talloc(client, struct ctdb_client_ip);
        CTDB_NO_MEMORY(ctdb, ip);
 
@@ -653,16 +661,6 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
        tcp = talloc(client, struct ctdb_tcp_list);
        CTDB_NO_MEMORY(ctdb, tcp);
 
-       addr = inet_ntoa(p->dest.sin_addr);
-
-       takeover_vnn = find_public_ip_vnn(ctdb, addr);
-       if (takeover_vnn == -1) {
-               DEBUG(3,("Could not add client IP %s. This is not a public address.\n", addr)); 
-               return -1;
-       }
-
-       addr = inet_ntoa(p->src.sin_addr);
-
        tcp->connection.saddr = p->src;
        tcp->connection.daddr = p->dest;
 
@@ -677,7 +675,7 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
 
        DEBUG(2,("registered tcp client for %u->%s:%u\n",
                 (unsigned)ntohs(p->dest.sin_port), 
-                addr,
+                inet_ntoa(p->src.sin_addr),
                 (unsigned)ntohs(p->src.sin_port)));
 
        /* tell all nodes about this tcp connection */