From 33c6de5801caeb9087c19f265e8af71309743445 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 22 Dec 2006 20:26:56 +0000 Subject: * nis/nss_compat/compat-grp.c (internal_getgrgid_r): Don't blacklist the group till after we look it up. --- ChangeLog | 5 +++++ nis/nss_compat/compat-grp.c | 6 +++++- nptl/sysdeps/unix/sysv/linux/pthread_kill.c | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 21d0d8e7ff..be6268ad75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-12-22 Gavin Romig-Koch + + * nis/nss_compat/compat-grp.c (internal_getgrgid_r): Don't + blacklist the group till after we look it up. + 2006-12-21 Ulrich Drepper * include/atomic.h (atomic_forced_read): New macro. diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c index f2f7195be1..236c84a20f 100644 --- a/nis/nss_compat/compat-grp.c +++ b/nis/nss_compat/compat-grp.c @@ -580,13 +580,17 @@ internal_getgrgid_r (gid_t gid, struct group *result, ent_t *ent, /* +group */ if (result->gr_name[0] == '+' && result->gr_name[1] != '\0') { + /* Yes, no +1, see the memcpy call below. */ + size_t len = strlen (result->gr_name); + char buf[len]; enum nss_status status; /* Store the group in the blacklist for the "+" at the end of /etc/group */ - blacklist_store_name (&result->gr_name[1], ent); + memcpy (buf, &result->gr_name[1], len); status = getgrnam_plusgroup (&result->gr_name[1], result, ent, buffer, buflen, errnop); + blacklist_store_name (buf, ent); if (status == NSS_STATUS_SUCCESS && result->gr_gid == gid) break; else diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c index 259c954322..75089365c3 100644 --- a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c +++ b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c @@ -37,7 +37,7 @@ __pthread_kill (threadid, signo) /* Not a valid thread handle. */ return ESRCH; - /* Force load of pd->tid into local variable or register. Oherwise + /* Force load of pd->tid into local variable or register. Otherwise if a thread exits between ESRCH test and tgkill, we might return EINVAL, because pd->tid would be cleared by the kernel. */ pid_t tid = atomic_forced_read (pd->tid); -- cgit v1.2.1