From: Ronnie Sahlberg Date: Tue, 24 Mar 2009 02:45:11 +0000 (+1100) Subject: we need to set the port properly in the parse_ip helper X-Git-Tag: ctdb-1.0.76~11 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;ds=sidebyside;h=43fe18d86995744ba61c7a6405b70edcb265930a;p=sahlberg%2Fctdb.git we need to set the port properly in the parse_ip helper --- diff --git a/common/ctdb_util.c b/common/ctdb_util.c index 33d30e21..a3f1731f 100644 --- a/common/ctdb_util.c +++ b/common/ctdb_util.c @@ -435,7 +435,7 @@ bool parse_ip_port(const char *addr, ctdb_sock_addr *saddr) /* now is this a ipv4 or ipv6 address ?*/ - ret = parse_ip(s, NULL, addr); + ret = parse_ip(s, NULL, port, saddr); talloc_free(tmp_ctx); return ret; @@ -444,7 +444,7 @@ bool parse_ip_port(const char *addr, ctdb_sock_addr *saddr) /* parse an ip */ -bool parse_ip(const char *addr, const char *iface, ctdb_sock_addr *saddr) +bool parse_ip(const char *addr, const char *iface, unsigned port, ctdb_sock_addr *saddr) { char *p; bool ret; @@ -452,9 +452,9 @@ bool parse_ip(const char *addr, const char *iface, ctdb_sock_addr *saddr) /* now is this a ipv4 or ipv6 address ?*/ p = index(addr, ':'); if (p == NULL) { - ret = parse_ipv4(addr, 0, &saddr->ip); + ret = parse_ipv4(addr, port, &saddr->ip); } else { - ret = parse_ipv6(addr, iface, 0, saddr); + ret = parse_ipv6(addr, iface, port, saddr); } return ret; @@ -496,7 +496,7 @@ bool parse_ip_mask(const char *str, const char *iface, ctdb_sock_addr *addr, uns /* now is this a ipv4 or ipv6 address ?*/ - ret = parse_ip(s, iface, addr); + ret = parse_ip(s, iface, 0, addr); talloc_free(tmp_ctx); return ret; @@ -575,6 +575,21 @@ char *ctdb_addr_to_str(ctdb_sock_addr *addr) return cip; } +unsigned ctdb_addr_to_port(ctdb_sock_addr *addr) +{ + switch (addr->sa.sa_family) { + case AF_INET: + return ntohs(addr->ip.sin_port); + break; + case AF_INET6: + return ntohs(addr->ip6.sin6_port); + break; + default: + DEBUG(DEBUG_ERR, (__location__ " ERROR, unknown family %u\n", addr->sa.sa_family)); + } + + return 0; +} void ctdb_block_signal(int signum) { diff --git a/include/ctdb_private.h b/include/ctdb_private.h index 988b6d94..b6f44ded 100644 --- a/include/ctdb_private.h +++ b/include/ctdb_private.h @@ -1290,7 +1290,7 @@ void ctdb_start_freeze(struct ctdb_context *ctdb); bool parse_ip_mask(const char *s, const char *iface, ctdb_sock_addr *addr, unsigned *mask); bool parse_ip_port(const char *s, ctdb_sock_addr *addr); -bool parse_ip(const char *s, const char *iface, ctdb_sock_addr *addr); +bool parse_ip(const char *s, const char *iface, unsigned port, ctdb_sock_addr *addr); bool parse_ipv4(const char *s, unsigned port, struct sockaddr_in *sin); @@ -1401,6 +1401,7 @@ int32_t ctdb_control_trans2_error(struct ctdb_context *ctdb, struct ctdb_req_control *c); char *ctdb_addr_to_str(ctdb_sock_addr *addr); +unsigned ctdb_addr_to_port(ctdb_sock_addr *addr); void ctdb_canonicalize_ip(const ctdb_sock_addr *ip, ctdb_sock_addr *cip); int32_t ctdb_control_recd_ping(struct ctdb_context *ctdb); diff --git a/server/ctdb_recover.c b/server/ctdb_recover.c index 2d95b184..12b95deb 100644 --- a/server/ctdb_recover.c +++ b/server/ctdb_recover.c @@ -165,6 +165,7 @@ ctdb_control_getnodemap(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA ind for (i=0; inodes[i]->address.address, NULL, /* TODO: pass in the correct interface here*/ + 0, &node_map->nodes[i].addr) == 0) { DEBUG(DEBUG_ERR, (__location__ " Failed to parse %s into a sockaddr\n", ctdb->nodes[i]->address.address)); diff --git a/server/ctdbd.c b/server/ctdbd.c index 1d3b22af..5670b938 100644 --- a/server/ctdbd.c +++ b/server/ctdbd.c @@ -281,6 +281,7 @@ int main(int argc, const char *argv[]) if (parse_ip(options.single_public_ip, svnn->iface, + 0, &svnn->public_address) == 0) { DEBUG(DEBUG_ALERT,("Invalid --single-public-ip argument : %s . This is not a valid ip address. Exiting.\n", options.single_public_ip)); exit(10); diff --git a/tcp/tcp_connect.c b/tcp/tcp_connect.c index ac443d1f..9d28d48a 100644 --- a/tcp/tcp_connect.c +++ b/tcp/tcp_connect.c @@ -109,7 +109,7 @@ static void ctdb_node_connect_write(struct event_context *ev, struct fd_event *f static int ctdb_tcp_get_address(struct ctdb_context *ctdb, const char *address, ctdb_sock_addr *addr) { - if (parse_ip(address, NULL, addr) == 0) { + if (parse_ip(address, NULL, 0, addr) == 0) { DEBUG(DEBUG_CRIT, (__location__ " Unparsable address : %s.\n", address)); return -1; } diff --git a/tcp/tcp_init.c b/tcp/tcp_init.c index 737bd8e4..c0606f0e 100644 --- a/tcp/tcp_init.c +++ b/tcp/tcp_init.c @@ -27,7 +27,7 @@ static int tnode_destructor(struct ctdb_tcp_node *tnode) { - struct ctdb_node *node = talloc_find_parent_bytype(tnode, struct ctdb_node); + // struct ctdb_node *node = talloc_find_parent_bytype(tnode, struct ctdb_node); if (tnode->fd != -1) { close(tnode->fd); diff --git a/tools/ctdb.c b/tools/ctdb.c index c48d5870..8fcf95bd 100644 --- a/tools/ctdb.c +++ b/tools/ctdb.c @@ -540,7 +540,7 @@ static int control_get_tickles(struct ctdb_context *ctdb, int argc, const char * usage(); } - if (parse_ip(argv[0], NULL, &addr) == 0) { + if (parse_ip(argv[0], NULL, 0, &addr) == 0) { DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[0])); return -1; } @@ -612,7 +612,7 @@ static int control_moveip(struct ctdb_context *ctdb, int argc, const char **argv usage(); } - if (parse_ip(argv[0], NULL, &addr) == 0) { + if (parse_ip(argv[0], NULL, 0, &addr) == 0) { DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[0])); return -1; } @@ -988,7 +988,7 @@ static int control_delip(struct ctdb_context *ctdb, int argc, const char **argv) usage(); } - if (parse_ip(argv[0], NULL, &addr) == 0) { + if (parse_ip(argv[0], NULL, 0, &addr) == 0) { DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[0])); return -1; } @@ -1086,7 +1086,7 @@ static int control_gratious_arp(struct ctdb_context *ctdb, int argc, const char usage(); } - if (!parse_ip(argv[0], NULL, &addr)) { + if (!parse_ip(argv[0], NULL, 0, &addr)) { DEBUG(DEBUG_ERR, ("Bad IP '%s'\n", argv[0])); return -1; }