diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/smp.h | 14 | ||||
-rw-r--r-- | nscd/initgrcache.c | 5 |
3 files changed, 14 insertions, 8 deletions
@@ -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. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/smp.h b/nptl/sysdeps/unix/sysv/linux/i386/smp.h index cb24c9e177..f68a0c0758 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/smp.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/smp.h @@ -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; diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c index f2ff03a0b1..b4ae13903a 100644 --- a/nscd/initgrcache.c +++ b/nscd/initgrcache.c @@ -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); |