diff options
Diffstat (limited to 'nscd')
-rw-r--r-- | nscd/nscd.c | 3 | ||||
-rw-r--r-- | nscd/nscd_getai.c | 11 | ||||
-rw-r--r-- | nscd/nscd_initgroups.c | 14 |
3 files changed, 23 insertions, 5 deletions
diff --git a/nscd/nscd.c b/nscd/nscd.c index b66abb5442..01baed8388 100644 --- a/nscd/nscd.c +++ b/nscd/nscd.c @@ -442,6 +442,9 @@ termination_handler (int signum) /* Synchronize memory. */ for (int cnt = 0; cnt < lastdb; ++cnt) { + if (!dbs[cnt].enabled) + continue; + /* Make sure nobody keeps using the database. */ dbs[cnt].head->timestamp = 0; diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c index 24b374b0dc..866f7b2a5f 100644 --- a/nscd/nscd_getai.c +++ b/nscd/nscd_getai.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -78,7 +78,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop) sizeof (ai_resp_mem)); if (sock == -1) { - /* nscd not running or wrong version or hosts caching disabled. */ + /* nscd not running or wrong version. */ __nss_not_use_nscd_hosts = 1; goto out; } @@ -151,6 +151,13 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop) } else { + if (__builtin_expect (ai_resp->found == -1, 0)) + { + /* The daemon does not cache this database. */ + __nss_not_use_nscd_hosts = 1; + goto out_close; + } + /* Store the error number. */ *h_errnop = ai_resp->error; diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c index 2ea9e7f862..daddf2e164 100644 --- a/nscd/nscd_initgroups.c +++ b/nscd/nscd_initgroups.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -75,7 +75,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, sizeof (initgr_resp_mem)); if (sock == -1) { - /* nscd not running or wrong version or hosts caching disabled. */ + /* nscd not running or wrong version. */ __nss_not_use_nscd_group = 1; goto out; } @@ -101,7 +101,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, (initgr_resp->ngrps + 1) * sizeof (gid_t)); if (newp == NULL) /* We cannot increase the buffer size. */ - goto out; + goto out_close; *groupsp = newp; *size = initgr_resp->ngrps + 1; @@ -125,6 +125,13 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, } else { + if (__builtin_expect (initgr_resp->found == -1, 0)) + { + /* The daemon does not cache this database. */ + __nss_not_use_nscd_group = 1; + goto out_close; + } + /* No group found yet. */ retval = 0; @@ -143,6 +150,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, (*groupsp)[retval++] = group; } + out_close: if (sock != -1) close_not_cancel_no_status (sock); out: |