--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: libc6: Please support fe80::[...]%eth0-like nameservers in /etc/resolv.conf
- From: Pierre Ynard <linkfanel@yahoo.fr>
- Date: Tue, 11 Dec 2007 05:03:55 +0100
- Message-id: <20071211040355.17126.75177.reportbug@localhost.localdomain>
Package: libc6
Version: 2.7-4
Severity: wishlist
Tags: patch
It seems that glibc's resolver does not support IPv6 link-local
addresses with an explicit scope (like fe80::[...]%eth0), in the
nameserver options in /etc/resolv.conf. Currently, nameservers with a
scope fail to be parsed. Nameservers with a link-local address (without
scope) are parsed and used, but obviously do not work (connect() fails
with EINVAL because a sin6_scope_id of 0 is used with the link-local
address).
With the apparition of the new RDNSS option (RFC5006), which allows
for DNS configuration through stateless autoconf, we expect that IPv6
link-local resolvers may be used, and set into /etc/resolv.conf.
Kernel-side support is included in Linux 2.6.24, and the corresponding
userland RDNSS daemon is currently under development and will be shipped
in the next release of the ndisc6 package. We would need glibc to
support this feature to integrate our work.
Please review this patch, and consider it for application and submission
to upstream.
--- resolv/res_init.c 2007-12-09 17:30:57.000000000 +0100
+++ resolv/res_init.c 2007-12-09 18:19:40.000000000 +0100
@@ -74,11 +74,14 @@ static const char rcsid[] = "$BINDId: re
#include <sys/socket.h>
#include <sys/time.h>
+#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/nameser.h>
+#include <assert.h>
#include <ctype.h>
+#include <netdb.h>
#include <resolv.h>
#include <stdio.h>
#include <stdio_ext.h>
@@ -327,6 +330,8 @@ __res_vinit(res_state statp, int preinit
if ((el = strchr(cp, '\n')) != NULL)
*el = '\0';
+ if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL)
+ *el = '\0';
if ((*cp != '\0') &&
(inet_pton(AF_INET6, cp, &a6) > 0)) {
struct sockaddr_in6 *sa6;
@@ -336,6 +341,27 @@ __res_vinit(res_state statp, int preinit
sa6->sin6_addr = a6;
sa6->sin6_family = AF_INET6;
sa6->sin6_port = htons(NAMESERVER_PORT);
+
+ if (el != NULL) {
+ int try_numericscope = 0;
+ if (IN6_IS_ADDR_LINKLOCAL(&a6)
+ || IN6_IS_ADDR_MC_LINKLOCAL(&a6)) {
+ sa6->sin6_scope_id = if_nametoindex(el + 1);
+ if (sa6->sin6_scope_id == 0)
+ try_numericscope = 1;
+ } else
+ try_numericscope = 1;
+
+ if (try_numericscope != 0) {
+ char *end;
+ assert(sizeof(uint32_t) <= sizeof(unsigned long));
+ sa6->sin6_scope_id = (uint32_t) strtoul(el + 1, &end, 10);
+ if (*end != '\0')
+ sa6->sin6_scope_id = 0;
+ }
+ } else
+ sa6->sin6_scope_id = 0;
+
statp->_u._ext.nsaddrs[nservall] = sa6;
statp->_u._ext.nssocks[nservall] = -1;
statp->_u._ext.nsmap[nservall] = MAXNS + 1;
Regards,
--
Pierre Ynard
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.23.8-grsec
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages libc6 depends on:
ii libgcc1 1:4.2.2-4 GCC support library
libc6 recommends no packages.
-- debconf information:
glibc/restart-failed:
glibc/restart-services:
--- End Message ---
--- Begin Message ---
- To: 455671-done@bugs.debian.org
- Subject: Re: libc6: Please support fe80::[...]%eth0-like nameservers in /etc/resolv.conf
- From: Aurelien Jarno <aurelien@aurel32.net>
- Date: Wed, 5 Mar 2008 10:53:12 +0100
- Message-id: <20080305095312.GA27860@volta.aurel32.net>
- In-reply-to: <20071211040355.17126.75177.reportbug@localhost.localdomain>
- References: <20071211040355.17126.75177.reportbug@localhost.localdomain>
Version: 2.7-9
On Tue, Dec 11, 2007 at 05:03:55AM +0100, Pierre Ynard wrote:
> Package: libc6
> Version: 2.7-4
> Severity: wishlist
> Tags: patch
>
> It seems that glibc's resolver does not support IPv6 link-local
> addresses with an explicit scope (like fe80::[...]%eth0), in the
> nameserver options in /etc/resolv.conf. Currently, nameservers with a
> scope fail to be parsed. Nameservers with a link-local address (without
> scope) are parsed and used, but obviously do not work (connect() fails
> with EINVAL because a sin6_scope_id of 0 is used with the link-local
> address).
>
> With the apparition of the new RDNSS option (RFC5006), which allows
> for DNS configuration through stateless autoconf, we expect that IPv6
> link-local resolvers may be used, and set into /etc/resolv.conf.
> Kernel-side support is included in Linux 2.6.24, and the corresponding
> userland RDNSS daemon is currently under development and will be shipped
> in the next release of the ndisc6 package. We would need glibc to
> support this feature to integrate our work.
>
> Please review this patch, and consider it for application and submission
> to upstream.
>
This patch has been applied in version 2.7-9, it's just that I forget to
add the bug number to the changelog. Closing the bug now.
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
--- End Message ---