aboutsummaryrefslogtreecommitdiff
path: root/nscd/pwdcache.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-04-26 17:32:10 +0000
committerUlrich Drepper <drepper@redhat.com>2006-04-26 17:32:10 +0000
commit797ed6f7e17732cb207293d406d6cf14336f5de0 (patch)
treec264c8be61ed68f7da042492c4a5a5a823f3c4ce /nscd/pwdcache.c
parent1f063dcadb802c57759e2ca2bf9c08e108bb3d70 (diff)
downloadglibc-797ed6f7e17732cb207293d406d6cf14336f5de0.zip
glibc-797ed6f7e17732cb207293d406d6cf14336f5de0.tar.gz
glibc-797ed6f7e17732cb207293d406d6cf14336f5de0.tar.bz2
* nscd/nscd.h (struct database_dyn): Add propagate field.
* nscd/nscd_conf.c (nscd_parse_file): Parse auto-propagate lines. * nscd/nscd.conf: Add auto-propagate lines. * nscd/connections.c (dbs): Initialize .propagate fields. * nscd/grpcache.c (cache_addgr): Do not add ID entry for name lookups and vice versa if propagation is disabled for the database. * nscd/pwdcache.c (cache_addpw): Likewise.
Diffstat (limited to 'nscd/pwdcache.c')
-rw-r--r--nscd/pwdcache.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c
index 2daff79..01c223a 100644
--- a/nscd/pwdcache.c
+++ b/nscd/pwdcache.c
@@ -338,10 +338,10 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
marked with FIRST first. Otherwise we end up with
dangling "pointers" in case a latter hash entry cannot be
added. */
- bool first = req->type == GETPWBYNAME;
+ bool first = true;
/* If the request was by UID, add that entry first. */
- if (req->type != GETPWBYNAME)
+ if (req->type == GETPWBYUID)
{
if (cache_add (GETPWBYUID, cp, key_offset, &dataset->head, true,
db, owner) < 0)
@@ -351,12 +351,14 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
dataset->head.usable = false;
goto out;
}
+
+ first = false;
}
/* If the key is different from the name add a separate entry. */
else if (strcmp (key_copy, dataset->strdata) != 0)
{
if (cache_add (GETPWBYNAME, key_copy, key_len + 1,
- &dataset->head, first, db, owner) < 0)
+ &dataset->head, true, db, owner) < 0)
{
/* Could not allocate memory. Make sure the data gets
discarded. */
@@ -368,11 +370,12 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
}
/* We have to add the value for both, byname and byuid. */
- if (__builtin_expect (cache_add (GETPWBYNAME, dataset->strdata,
- pw_name_len, &dataset->head, first,
- db, owner) == 0, 1))
+ if ((req->type == GETPWBYNAME || db->propagate)
+ && __builtin_expect (cache_add (GETPWBYNAME, dataset->strdata,
+ pw_name_len, &dataset->head,
+ first, db, owner) == 0, 1))
{
- if (req->type == GETPWBYNAME)
+ if (req->type == GETPWBYNAME && db->propagate)
(void) cache_add (GETPWBYUID, cp, key_offset, &dataset->head,
req->type != GETPWBYNAME, db, owner);
}