Package: libc6 Version: 2.3.6.ds1-13 Severity: important getaddrinfo() does not prefer IPv6 addresses, even though it should according to RFC 3484. I have debugged the issue and it all boils down to match_prefix() in sysdeps/posix/getaddrinfo.c. The prefix test runs like this:
while (bits > 8) { if (*mask != *val) break; ++mask; ++val; bits -= 8; } if (bits < 8) { if ((*mask & (0xff00 >> bits)) == (*val & (0xff00 >> bits))) /* Match! */ break; } Of course, for prefix lengths which are a multiple of 8 the loop ends prematurely and the subsequent test returns 8, so there is never a match for these lengths. Since the prefix for IPv4 addresses is 96 bits long (see default_precedence), IPv4 addresses get the default priority (40) and not the correct one (10). I was able to fix this by changing the condition to: while (bits >= 8) Since match_prefix() is used for labels as well, this bug probably also breaks RFC 3484 rule 5 (Prefer matching label). -- System Information: Debian Release: 4.0 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.20.3 Locale: LANG=cs_CZ.UTF-8, LC_CTYPE=cs_CZ.UTF-8 (charmap=UTF-8) Versions of packages libc6 depends on: ii tzdata 2007b-1 Time Zone and Daylight Saving Time libc6 recommends no packages. -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]