Avoid write to invalid file descriptor in nscd
authorUlrich Drepper <drepper@gmail.com>
Thu, 30 Jun 2011 03:33:38 +0000 (23:33 -0400)
committerUlrich Drepper <drepper@gmail.com>
Thu, 30 Jun 2011 03:33:38 +0000 (23:33 -0400)
When readding entries to the group and services cache and the lookup
is unsuccesful, we tried to write the notfound record.  Just don't
do it in this case.

ChangeLog
nscd/grpcache.c
nscd/servicescache.c

index b4d30ca..16187bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-06-29  Ulrich Drepper  <drepper@gmail.com>
+
+       * nscd/grpcache.c (cache_addgr): Don't write notfound reply if we
+       are re-adding the entry.
+       * nscd/servicescache.c (cache_addserv): Likewise.
+
 2011-06-28  Ulrich Drepper  <drepper@gmail.com>
 
        [BZ #12935]
index fa21929..0e7f81f 100644 (file)
@@ -114,8 +114,9 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
             case.  */
          total = sizeof (notfound);
 
-         written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
-                                             MSG_NOSIGNAL));
+         if (fd != -1)
+           written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+                                               MSG_NOSIGNAL));
 
          dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
                                   1);
index 2dd1cc5..b0a2977 100644 (file)
@@ -104,8 +104,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
             case.  */
          total = sizeof (notfound);
 
-         written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
-                                             MSG_NOSIGNAL));
+         if (fd != -1)
+           written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+                                               MSG_NOSIGNAL));
 
          dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
                                   1);