From b2179107f3eabb5e349333cd5adc6e2fb4431990 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Thu, 24 Jan 2013 12:32:09 +0100 Subject: [PATCH] Properly cache the result from looking up the nss database config --- ChangeLog | 8 ++++++++ NEWS | 10 +++++----- nscd/aicache.c | 15 +++++++-------- nscd/initgrcache.c | 15 +++++++-------- sysdeps/posix/getaddrinfo.c | 14 ++++++-------- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab04bbf363..3abe62f4b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-09-30 Andreas Schwab + + [BZ #15048] + * nscd/aicache.c (addhstaiX): Properly use the cache variable for + the nss database lookup. + * nscd/initgrcache.c (addinitgroupsX): Likewise. + * sysdeps/posix/getaddrinfo.c (gaih_inet): Likewise. + 2013-09-28 Mike Frysinger * sysdeps/unix/sysv/linux/tst-fanotify.c (do_test): Fix style. diff --git a/NEWS b/NEWS index e7eb7775fd..acd0ca5873 100644 --- a/NEWS +++ b/NEWS @@ -9,11 +9,11 @@ Version 2.19 * The following bugs are resolved with this release: - 13985, 14155, 14547, 14699, 15400, 15427, 15522, 15531, 15532, 15608, - 15609, 15610, 15640, 15681, 15736, 15748, 15749, 15754, 15797, 15844, - 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890, 15892, - 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 15963, - 15966. + 13985, 14155, 14547, 14699, 15048, 15400, 15427, 15522, 15531, 15532, + 15608, 15609, 15610, 15640, 15681, 15736, 15748, 15749, 15754, 15797, + 15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890, + 15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, + 15963, 15966. * CVE-2012-4412 The strcoll implementation caches indices and rules for large collation sequences to optimize multiple passes. This cache diff --git a/nscd/aicache.c b/nscd/aicache.c index fd55852ed8..713e41a2e8 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -86,20 +86,19 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, } static service_user *hosts_database; - service_user *nip = NULL; + service_user *nip; int no_more; int rc6 = 0; int rc4 = 0; int herrno = 0; - if (hosts_database != NULL) - { - nip = hosts_database; - no_more = 0; - } - else + if (hosts_database == NULL) no_more = __nss_database_lookup ("hosts", NULL, - "dns [!UNAVAIL=return] files", &nip); + "dns [!UNAVAIL=return] files", + &hosts_database); + else + no_more = 0; + nip = hosts_database; /* Initialize configurations. */ if (__glibc_unlikely (!_res_hconf.initialized)) diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c index 462780e624..4580884ead 100644 --- a/nscd/initgrcache.c +++ b/nscd/initgrcache.c @@ -80,17 +80,16 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, } static service_user *group_database; - service_user *nip = NULL; + service_user *nip; int no_more; - if (group_database != NULL) - { - nip = group_database; - no_more = 0; - } - else + if (group_database == NULL) no_more = __nss_database_lookup ("group", NULL, - "compat [NOTFOUND=return] files", &nip); + "compat [NOTFOUND=return] files", + &group_database); + else + no_more = 0; + nip = group_database; /* We always use sysconf even if NGROUPS_MAX is defined. That way, the limit can be raised in the kernel configuration without having to diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 52177e454c..170ad8c400 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -558,7 +558,7 @@ gaih_inet (const char *name, const struct gaih_service *service, struct gaih_addrtuple **pat = &at; int no_data = 0; int no_inet6_data = 0; - service_user *nip = NULL; + service_user *nip; enum nss_status inet6_status = NSS_STATUS_UNAVAIL; enum nss_status status = NSS_STATUS_UNAVAIL; int no_more; @@ -791,15 +791,13 @@ gaih_inet (const char *name, const struct gaih_service *service, } #endif - if (__nss_hosts_database != NULL) - { - no_more = 0; - nip = __nss_hosts_database; - } - else + if (__nss_hosts_database == NULL) no_more = __nss_database_lookup ("hosts", NULL, "dns [!UNAVAIL=return] files", - &nip); + &__nss_hosts_database); + else + no_more = 0; + nip = __nss_hosts_database; /* Initialize configurations. */ if (__glibc_unlikely (!_res_hconf.initialized)) -- 2.11.4.GIT