diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c index 460feaaccb..5ead5ecf3b 100644 --- a/src/dns-manager/nm-dns-dnsmasq.c +++ b/src/dns-manager/nm-dns-dnsmasq.c @@ -131,18 +131,18 @@ ip6_addr_to_string (const struct in6_addr *addr, const char *iface) char *buf; if (IN6_IS_ADDR_V4MAPPED (addr)) { - /* inet_ntop is probably supposed to do this for us, but it doesn't */ buf = g_malloc (INET_ADDRSTRLEN); nm_utils_inet4_ntop (addr->s6_addr32[3], buf); } else if (!iface || !iface[0] || !IN6_IS_ADDR_LINKLOCAL (addr)) { buf = g_malloc (INET6_ADDRSTRLEN); nm_utils_inet6_ntop (addr, buf); } else { - /* If we got a scope identifier, we need use '%' instead of - * '@', since dnsmasq supports '%' in server= addresses - * only since version 2.58 and up + /* Need to scope the address with %. Before dnsmasq 2.58, + * only '@' was supported as delimiter. Since 2.58, '@' and '%' + * are supported. Due to a bug, since 2.73 only '%' works properly + * as "server" address. */ - buf = g_strconcat (nm_utils_inet6_ntop (addr, NULL), "@", iface, NULL); + buf = g_strconcat (nm_utils_inet6_ntop (addr, NULL), "%", iface, NULL); } return buf; }