aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2013-01-24 12:32:09 +0100
committerAndreas Schwab <schwab@suse.de>2013-09-30 10:29:13 +0200
commitb2179107f3eabb5e349333cd5adc6e2fb4431990 (patch)
tree1a723f6ae54607a352f17983db026987734cf10c
parent47f28d0a6627c8b263df3c3e8f905bfaf42557bc (diff)
downloadglibc-b2179107f3eabb5e349333cd5adc6e2fb4431990.tar
glibc-b2179107f3eabb5e349333cd5adc6e2fb4431990.tar.gz
glibc-b2179107f3eabb5e349333cd5adc6e2fb4431990.tar.bz2
glibc-b2179107f3eabb5e349333cd5adc6e2fb4431990.zip
Properly cache the result from looking up the nss database config
-rw-r--r--ChangeLog8
-rw-r--r--NEWS10
-rw-r--r--nscd/aicache.c15
-rw-r--r--nscd/initgrcache.c15
-rw-r--r--sysdeps/posix/getaddrinfo.c14
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 <schwab@suse.de>
+
+ [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 <vapier@gentoo.org>
* 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))