Sync to unbound to allow interface names as scope-id in IPv6
authorflorian <florian@openbsd.org>
Fri, 19 Nov 2021 16:49:32 +0000 (16:49 +0000)
committerflorian <florian@openbsd.org>
Fri, 19 Nov 2021 16:49:32 +0000 (16:49 +0000)
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
sbin/unwind/libunbound/util/net_help.c

index 435139a..695945c 100644 (file)
 /* Define to 1 if you have the <ifaddrs.h> 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
 
index 06bc1f5..f8b6090 100644 (file)
  */
 
 #include "config.h"
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>
+#endif
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#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) {