1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
1999-10-01  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Align
	handling of IPv6 tunnel address handling with bind 8.2.1.  Allow
	len argument to be greater than needed address size.
This commit is contained in:
Ulrich Drepper
1999-10-01 21:42:39 +00:00
parent a7123f0edf
commit 20cc4c87c0
2 changed files with 12 additions and 4 deletions

View File

@ -1,3 +1,9 @@
1999-10-01 Ulrich Drepper <drepper@cygnus.com>
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Align
handling of IPv6 tunnel address handling with bind 8.2.1. Allow
len argument to be greater than needed address size.
1999-10-01 Andreas Jaeger <aj@suse.de> 1999-10-01 Andreas Jaeger <aj@suse.de>
* locale/programs/ld-collate.c (insert_value): Add cast to avoid * locale/programs/ld-collate.c (insert_value): Add cast to avoid

View File

@ -197,6 +197,7 @@ _nss_dns_gethostbyaddr_r (const char *addr, size_t len, int af,
{ {
static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff }; static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
static const u_char v6local[] = { 0,0, 0,1 };
const u_char *uaddr = (const u_char *)addr; const u_char *uaddr = (const u_char *)addr;
struct host_data struct host_data
{ {
@ -210,9 +211,10 @@ _nss_dns_gethostbyaddr_r (const char *addr, size_t len, int af,
size_t size; size_t size;
int n, status; int n, status;
if (af == AF_INET6 && len == IN6ADDRSZ && if (af == AF_INET6 && len == IN6ADDRSZ
(memcmp (uaddr, mapped, sizeof mapped) == 0 && (memcmp (uaddr, mapped, sizeof mapped) == 0
|| memcmp (uaddr, tunnelled, sizeof tunnelled) == 0)) || (memcmp (uaddr, tunnelled, sizeof tunnelled) == 0
&& memcmp (&uaddr[sizeof tunnelled], v6local, sizeof v6local))))
{ {
/* Unmap. */ /* Unmap. */
addr += sizeof mapped; addr += sizeof mapped;
@ -234,7 +236,7 @@ _nss_dns_gethostbyaddr_r (const char *addr, size_t len, int af,
*h_errnop = NETDB_INTERNAL; *h_errnop = NETDB_INTERNAL;
return NSS_STATUS_UNAVAIL; return NSS_STATUS_UNAVAIL;
} }
if (size != len) if (size > len)
{ {
*errnop = EAFNOSUPPORT; *errnop = EAFNOSUPPORT;
*h_errnop = NETDB_INTERNAL; *h_errnop = NETDB_INTERNAL;