diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | nptl/ChangeLog | 3 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S | 2 | ||||
-rw-r--r-- | nscd/nscd_initgroups.c | 29 |
4 files changed, 20 insertions, 17 deletions
@@ -1,5 +1,8 @@ 2004-10-01 Ulrich Drepper <drepper@redhat.com> + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Always add the + group the caller provided unless there is a real problem. + * posix/bug-glob1.c (prepare): Fix creation of symlink. 2004-09-30 Ulrich Drepper <drepper@redhat.com> diff --git a/nptl/ChangeLog b/nptl/ChangeLog index cbedbc3..85df60f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,8 @@ 2004-10-01 Ulrich Drepper <drepper@redhat.com> + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S + (__lll_mutex_timedlock_wait): Address futex correctly. + * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S (__lll_mutex_timedlock_wait): I woken but cannot get the lock, make sure 2 is stored in the futex and we looked at the old value. diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S index 6827804..d5c9345 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S @@ -152,7 +152,7 @@ __lll_mutex_timedlock_wait: /* Make sure the current holder knows we are going to sleep. */ movl %edx, %eax - xchgl %eax, (%ebx) + xchgl %eax, (%rdi) testl %eax, %eax jz 6b jmp 1b diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c index ea32ab6..d6cb000 100644 --- a/nscd/nscd_initgroups.c +++ b/nscd/nscd_initgroups.c @@ -95,6 +95,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, doesn't use memcpy but instead copies each array element one by one. */ assert (sizeof (int32_t) == sizeof (gid_t)); + assert (initgr_resp->ngrps > 0); /* Make sure we have enough room. We always count GROUP in even though we might not end up adding it. */ @@ -125,25 +126,21 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, retval = initgr_resp->ngrps; memcpy (*groupsp, respdata, retval * sizeof (gid_t)); } - - /* Check whether GROUP is part of the mix. If not, add it. */ - if (retval >= 0) - { - int cnt; - for (cnt = 0; cnt < retval; ++cnt) - if ((*groupsp)[cnt] == group) - break; - - if (cnt == retval) - (*groupsp)[retval++] = group; - } } else + /* No group found yet. */ + retval = 0; + + /* Check whether GROUP is part of the mix. If not, add it. */ + if (retval >= 0) { - /* The `errno' to some value != ERANGE. */ - __set_errno (ENOENT); - /* Even though we have not found anything, the result is zero. */ - retval = 0; + int cnt; + for (cnt = 0; cnt < retval; ++cnt) + if ((*groupsp)[cnt] == group) + break; + + if (cnt == retval) + (*groupsp)[retval++] = group; } if (sock != -1) |