From ed6d9d060612a58be6310b981c5bf2dd462e938e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 20 Feb 2007 13:22:18 +1100 Subject: [PATCH] support hostnames for node names (This used to be ctdb commit 5c45b51ec42cdbadce7870b47b765a79d8d41b8b) --- ctdb/tcp/tcp_connect.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c index e828bb7cbba..0f7d617084c 100644 --- a/ctdb/tcp/tcp_connect.c +++ b/ctdb/tcp/tcp_connect.c @@ -69,6 +69,22 @@ 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, struct in_addr *addr) +{ + if (inet_pton(AF_INET, address, addr) <= 0) { + struct hostent *he = gethostbyname(address); + if (he == NULL || he->h_length > sizeof(*addr)) { + ctdb_set_error(ctdb, "invalid nework address '%s'\n", + address); + return -1; + } + memcpy(addr, he->h_addr, he->h_length); + } + return 0; +} + /* called when we should try and establish a tcp connection to a node */ @@ -85,7 +101,9 @@ void ctdb_tcp_node_connect(struct event_context *ev, struct timed_event *te, set_nonblocking(tnode->fd); - inet_pton(AF_INET, node->address.address, &sock_out.sin_addr); + if (ctdb_tcp_get_address(ctdb, node->address.address, &sock_out.sin_addr) != 0) { + return; + } sock_out.sin_port = htons(node->address.port); sock_out.sin_family = PF_INET; @@ -159,7 +177,9 @@ int ctdb_tcp_listen(struct ctdb_context *ctdb) sock.sin_port = htons(ctdb->address.port); sock.sin_family = PF_INET; - inet_pton(AF_INET, ctdb->address.address, &sock.sin_addr); + if (ctdb_tcp_get_address(ctdb, ctdb->address.address, &sock.sin_addr) != 0) { + return -1; + } ctcp->listen_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (ctcp->listen_fd == -1) {