* nscd/initgrcache.c (addinitgroupsX): Judge successful lookups by
authorUlrich Drepper <drepper@redhat.com>
Wed, 2 Aug 2006 00:08:03 +0000 (00:08 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 2 Aug 2006 00:08:03 +0000 (00:08 +0000)
status of NSS calls, not the number of returned entries.

ChangeLog
nptl/sysdeps/unix/sysv/linux/i386/smp.h
nscd/initgrcache.c

index fa9aea7..a4bb3e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2006-08-01  Ulrich Drepper  <drepper@redhat.com>
 
+       * nscd/initgrcache.c (addinitgroupsX): Judge successful lookups by
+       status of NSS calls, not the number of returned entries.
+
        * sysdeps/unix/sysv/linux/syscalls.list: Remove add_key,
        request_key, keyctl.
 
index cb24c9e..f68a0c0 100644 (file)
@@ -31,25 +31,25 @@ is_smp_system (void)
 {
   union
   {
-    struct utsname  uts;
+    struct utsname uts;
     char buf[512];
-  };
+  } u;
   char *cp;
 
   /* Try reading the number using `sysctl' first.  */
-  if (uname (&uts) == 0)
-    cp = uts.version;
+  if (uname (&u.uts) == 0)
+    cp = u.uts.version;
   else
     {
       /* This was not successful.  Now try reading the /proc filesystem.  */
       int fd = open_not_cancel_2 ("/proc/sys/kernel/version", O_RDONLY);
       if (__builtin_expect (fd, 0) == -1
-         || (reslen = read_not_cancel (fd, buf, sizeof (buf))) <= 0)
+         || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0)
        /* This also didn't work.  We give up and say it's a UP machine.  */
-       buf[0] = '\0';
+       u.buf[0] = '\0';
 
       close_not_cancel_no_status (fd);
-      cp = buf;
+      cp = u.buf;
     }
 
   return strstr (cp, "SMP") != NULL;
index f2ff03a..b4ae139 100644 (file)
@@ -117,6 +117,7 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
     goto out;
 
   /* Nothing added yet.  */
+  bool any_success = false;
   while (! no_more)
     {
       long int prev_start = start;
@@ -158,6 +159,8 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
       if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
        __libc_fatal ("illegal status in internal_getgrouplist");
 
+      any_success |= status == NSS_STATUS_SUCCESS;
+
       if (status != NSS_STATUS_SUCCESS
          && nss_next_action (nip, status) == NSS_ACTION_RETURN)
         break;
@@ -171,7 +174,7 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
   ssize_t total;
   ssize_t written;
  out:
-  if (start == 0)
+  if (!any_success)
     {
       /* Nothing found.  Create a negative result record.  */
       written = total = sizeof (notfound);