diff --git a/daemon/aux.h b/daemon/aux.h index b493582c8..9be4445d2 100644 --- a/daemon/aux.h +++ b/daemon/aux.h @@ -113,6 +113,14 @@ static inline void smart_ntop(char *o, struct in6_addr *a, size_t len) { inet_ntop(AF_INET6, a, o, len); } +static inline int smart_pton(int af, const char *src, void *dst) { + if (af == AF_INET6) { + if (src[0] == '[') + return inet_pton(af, src+1, dst); + } + return inet_pton(af, src, dst); +} + #endif diff --git a/daemon/main.c b/daemon/main.c index 3babb2195..fa5e5fade 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -197,11 +197,11 @@ static void options(int *argc, char ***argv) { } if (ipv6s) { - if (inet_pton(AF_INET6, ipv6s, &ipv6) != 1) + if (smart_pton(AF_INET6, ipv6s, &ipv6) != 1) die("Invalid IPv6 address (--ip6)\n"); } if (adv_ipv6s) { - if (inet_pton(AF_INET6, adv_ipv6s, &adv_ipv6) != 1) + if (smart_pton(AF_INET6, adv_ipv6s, &adv_ipv6) != 1) die("Invalid IPv6 address (--advertised-ip6)\n"); }