diff options
-rw-r--r-- | ctdb/common/ctdb_util.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/ctdb/common/ctdb_util.c b/ctdb/common/ctdb_util.c index bdff4255eb..137e0a8a09 100644 --- a/ctdb/common/ctdb_util.c +++ b/ctdb/common/ctdb_util.c @@ -100,12 +100,20 @@ int ctdb_parse_address(struct ctdb_context *ctdb, struct ctdb_address *address) { struct servent *se; + ctdb_sock_addr addr; setservent(0); se = getservbyname("ctdb", "tcp"); endservent(); - - address->address = talloc_strdup(mem_ctx, str); + + /* Parse IP address and re-convert to string. This ensure correct + * string form for IPv6 addresses. + */ + if (! parse_ip(str, NULL, 0, &addr)) { + return -1; + } + + address->address = talloc_strdup(mem_ctx, ctdb_addr_to_str(&addr)); CTDB_NO_MEMORY(ctdb, address->address); if (se == NULL) { |