mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
Avoid duplicate DNS requests if answer is longer than a implementation
limit [BZ #14307] * sysdeps/posix/getaddrinfo.c (gaih_inet): Increase the size of the temporary buffer used to invoke __gethostbyname2_r, __gethostbyaddr_r and gethostbyname4_r to make room for struct host_data / struct gaih_addrtuple. * resolv/nss_dns/dns-host.c (global scope): Move definition of implementation constants MAX_NR_ALIASES and MAX_NR_ADDRS to header file nss/nsswitch.h. * nss/nsswitch.h (global scope): Add definition of implementation constants MAX_NR_ALIASES and MAX_NR_ADDRS (moved from resolv/nss_dns/dns-host.c).
This commit is contained in:
parent
a766fb45a3
commit
7b6e99be77
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2012-07-12 Jeroen van Bemmel <jvb127@gmail.com>
|
||||
|
||||
[BZ #14307]
|
||||
* sysdeps/posix/getaddrinfo.c (gaih_inet): Increase the size of
|
||||
the temporary buffer used to invoke __gethostbyname2_r,
|
||||
__gethostbyaddr_r and gethostbyname4_r to make room for struct
|
||||
host_data / struct gaih_addrtuple.
|
||||
* resolv/nss_dns/dns-host.c (global scope): Move definition of
|
||||
implementation constants MAX_NR_ALIASES and MAX_NR_ADDRS to
|
||||
header file nss/nsswitch.h.
|
||||
* nss/nsswitch.h (global scope): Add definition of implementation
|
||||
constants MAX_NR_ALIASES and MAX_NR_ADDRS (moved from
|
||||
resolv/nss_dns/dns-host.c).
|
||||
|
||||
2012-07-11 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* po/fr.po: Update from translation team.
|
||||
|
@ -1,5 +1,4 @@
|
||||
/* Copyright (C) 1996-1999,2001,2002,2003,2004,2007,2010,2011
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996-2012 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -198,4 +197,8 @@ extern int __nss_hostname_digits_dots (const char *name,
|
||||
int *h_errnop);
|
||||
libc_hidden_proto (__nss_hostname_digits_dots)
|
||||
|
||||
/* Maximum number of aliases we allow. */
|
||||
#define MAX_NR_ALIASES 48
|
||||
#define MAX_NR_ADDRS 48
|
||||
|
||||
#endif /* nsswitch.h */
|
||||
|
@ -88,10 +88,6 @@
|
||||
|
||||
#define RESOLVSORT
|
||||
|
||||
/* Maximum number of aliases we allow. */
|
||||
#define MAX_NR_ALIASES 48
|
||||
#define MAX_NR_ADDRS 48
|
||||
|
||||
#if PACKETSZ > 65536
|
||||
# define MAXPACKET PACKETSZ
|
||||
#else
|
||||
|
@ -568,7 +568,9 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||
IPv6 scope ids. */
|
||||
if (req->ai_family == AF_INET)
|
||||
{
|
||||
size_t tmpbuflen = 512;
|
||||
/* Allocate additional room for struct host_data. */
|
||||
size_t tmpbuflen = (512 + MAX_NR_ALIASES * sizeof(char*)
|
||||
+ 16 * sizeof(char));
|
||||
assert (tmpbuf == NULL);
|
||||
tmpbuf = alloca_account (tmpbuflen, alloca_used);
|
||||
int rc;
|
||||
@ -811,7 +813,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||
old_res_options = _res.options;
|
||||
_res.options &= ~RES_USE_INET6;
|
||||
|
||||
size_t tmpbuflen = 1024;
|
||||
size_t tmpbuflen = 1024 + sizeof(struct gaih_addrtuple);
|
||||
malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen);
|
||||
assert (tmpbuf == NULL);
|
||||
if (!malloc_tmpbuf)
|
||||
@ -1113,7 +1115,9 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||
struct hostent *h = NULL;
|
||||
int herrno;
|
||||
struct hostent th;
|
||||
size_t tmpbuf2len = 512;
|
||||
/* Add room for struct host_data. */
|
||||
size_t tmpbuf2len = (512 + (MAX_NR_ALIASES+MAX_NR_ADDRS+1)
|
||||
* sizeof(char*) + 16 * sizeof(char));
|
||||
|
||||
do
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user