summary refs log tree commit diff
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.tar.gz
glibc-797ed6f7e17732cb207293d406d6cf14336f5de0.tar.xz
glibc-797ed6f7e17732cb207293d406d6cf14336f5de0.zip
* 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 2daff79d78..01c223add5 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);
 	    }