Change setgroups to affect all the threads in the process.

This commit is contained in:
Ulrich Drepper 2011-01-14 08:42:11 -05:00
parent 794c3ad3a4
commit 70181fddf1
6 changed files with 66 additions and 12 deletions

View File

@ -1,5 +1,10 @@
2011-01-14 Ulrich Drepper <drepper@gmail.com>
[BZ #10563]
* sysdeps/unix/sysv/linux/i386/setgroups.c: Use INLINE_SETXID_SYSCALL
to make the syscall.
* sysdeps/unix/sysv/linux/setgroups.c: New file.
[BZ #12378]
* posix/fnmatch_loop.c (FCT): When matching '[' keep track of beginning
and fall back to matching as normal character if the string ends before

9
NEWS
View File

@ -9,10 +9,11 @@ Version 2.13
* The following bugs are resolved with this release:
3268, 7066, 10085, 10484, 10851, 11149, 11155, 11611, 11640, 11655, 11701,
11840, 11856, 11883, 11903, 11904, 11968, 11979, 12005, 12037, 12067,
12077, 12078, 12092, 12093, 12107, 12108, 12113, 12140, 12159, 12167,
12191, 12194, 12201, 12204, 12205, 12207, 12348, 12378, 12394, 12397
3268, 7066, 10085, 10484, 10563, 10851, 11149, 11155, 11611, 11640, 11655,
11701, 11840, 11856, 11883, 11903, 11904, 11968, 11979, 12005, 12037,
12067, 12077, 12078, 12092, 12093, 12107, 12108, 12113, 12140, 12159,
12167, 12191, 12194, 12201, 12204, 12205, 12207, 12348, 12378, 12394,
12397
* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark

View File

@ -1,3 +1,10 @@
2011-01-14 Ulrich Drepper <drepper@gmail.com>
[BZ #10563]
* sysdeps/pthread/setxid.h (__SETXID_1): Add cast to assignment.
(__SETXID_2): Likewise.
(__SETXID_3): Likewise.
2011-01-13 Ulrich Drepper <drepper@gmail.com>
[BZ #10484]

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2004, 2007 Free Software Foundation, Inc.
/* Copyright (C) 2004, 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -20,11 +20,11 @@
#include <sysdep.h>
#define __SETXID_1(cmd, arg1) \
cmd.id[0] = arg1
cmd.id[0] = (long int) arg1
#define __SETXID_2(cmd, arg1, arg2) \
__SETXID_1 (cmd, arg1); cmd.id[1] = arg2
__SETXID_1 (cmd, arg1); cmd.id[1] = (long int) arg2
#define __SETXID_3(cmd, arg1, arg2, arg3) \
__SETXID_2 (cmd, arg1, arg2); cmd.id[2] = arg3
__SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3
#ifdef SINGLE_THREAD
# define INLINE_SETXID_SYSCALL(name, nr, args...) \

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1997,1998,2000,2002,2004,2006 Free Software Foundation, Inc.
/* Copyright (C) 1997,1998,2000,2002,2004,2006,2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -25,6 +26,7 @@
#include <sys/syscall.h>
#include <bp-checks.h>
#include <setxid.h>
#include <linux/posix_types.h>
#include <kernel-features.h>
@ -44,7 +46,7 @@ int
setgroups (size_t n, const gid_t *groups)
{
#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
return INLINE_SETXID_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
#else
if (n > (size_t) __sysconf (_SC_NGROUPS_MAX))
{
@ -62,7 +64,8 @@ setgroups (size_t n, const gid_t *groups)
int result;
int saved_errno = errno;
result = INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
result = INLINE_SETXID_SYSCALL (setgroups32, 2, n,
CHECK_N (groups, n));
if (result == 0 || errno != ENOSYS)
return result;
@ -80,7 +83,8 @@ setgroups (size_t n, const gid_t *groups)
}
}
return INLINE_SYSCALL (setgroups, 2, n, CHECK_N (kernel_groups, n));
return INLINE_SETXID_SYSCALL (setgroups, 2, n,
CHECK_N (kernel_groups, n));
}
#endif
}

View File

@ -0,0 +1,37 @@
/* Copyright (C) 1997,1998,2000,2002,2004,2006,2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <grp.h>
#include <setxid.h>
#include <sysdep.h>
/* Set the group set for the current user to GROUPS (N of them). For
Linux we must convert the array of groups into the format that the
kernel expects. */
int
setgroups (size_t n, const gid_t *groups)
{
#ifdef __NR_setgroups32
# error "wrong setgroups.c file used"
#endif
return INLINE_SETXID_SYSCALL (setgroups, 2, n, groups);
}
libc_hidden_def (setgroups)