summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ctdb/common/ctdb_util.c12
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) {