From ebe1454102b5fede58210b53907e5da877ef45f2 Mon Sep 17 00:00:00 2001 From: florian Date: Fri, 19 Nov 2021 16:49:32 +0000 Subject: [PATCH] Sync to unbound to allow interface names as scope-id in IPv6 link-local addresses. With this dns proposals from slaacd with link-local addresses from slaacd(8) are wroking. Requested by & OK kn --- sbin/unwind/libunbound/config.h | 3 +++ sbin/unwind/libunbound/util/net_help.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sbin/unwind/libunbound/config.h b/sbin/unwind/libunbound/config.h index 435139a9ee4..695945c89b4 100644 --- a/sbin/unwind/libunbound/config.h +++ b/sbin/unwind/libunbound/config.h @@ -316,6 +316,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_IFADDRS_H 1 +/* Define to 1 if you have the `if_nametoindex' function. */ +#define HAVE_IF_NAMETOINDEX 1 + /* Define to 1 if you have the `inet_aton' function. */ #define HAVE_INET_ATON 1 diff --git a/sbin/unwind/libunbound/util/net_help.c b/sbin/unwind/libunbound/util/net_help.c index 06bc1f5dd7e..f8b60908fa7 100644 --- a/sbin/unwind/libunbound/util/net_help.c +++ b/sbin/unwind/libunbound/util/net_help.c @@ -38,6 +38,12 @@ */ #include "config.h" +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif #include "util/net_help.h" #include "util/log.h" #include "util/data/dname.h" @@ -266,7 +272,10 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, return 0; (void)strlcpy(buf, ip, sizeof(buf)); buf[s-ip]=0; - sa->sin6_scope_id = (uint32_t)atoi(s+1); +#ifdef HAVE_IF_NAMETOINDEX + if (!(sa->sin6_scope_id = if_nametoindex(s+1))) +#endif /* HAVE_IF_NAMETOINDEX */ + sa->sin6_scope_id = (uint32_t)atoi(s+1); ip = buf; } if(inet_pton((int)sa->sin6_family, ip, &sa->sin6_addr) <= 0) { -- 2.20.1