mirror of https://github.com/python/cpython
Expose setgroups. Fixes feature request #468116.
This commit is contained in:
parent
6b47129424
commit
61c5edf6fc
|
@ -204,6 +204,13 @@ Set the current process' group id.
|
||||||
Availability: \UNIX{}.
|
Availability: \UNIX{}.
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
|
\begin{funcdesc}{setgroups}{groups}
|
||||||
|
Set list of supplemental group ids associated with the current
|
||||||
|
process to \var{groups}.
|
||||||
|
Availability: \UNIX{}.
|
||||||
|
\versionadded{2.2}
|
||||||
|
\end{funcdesc}
|
||||||
|
|
||||||
\begin{funcdesc}{setpgrp}{}
|
\begin{funcdesc}{setpgrp}{}
|
||||||
Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0,
|
Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0,
|
||||||
0)} depending on which version is implemented (if any). See the
|
0)} depending on which version is implemented (if any). See the
|
||||||
|
|
|
@ -44,7 +44,7 @@ Extension modules
|
||||||
|
|
||||||
- readline now supports setting the startup_hook and the pre_event_hook.
|
- readline now supports setting the startup_hook and the pre_event_hook.
|
||||||
|
|
||||||
- posix supports chroot where available.
|
- posix supports chroot and setgroups where available.
|
||||||
|
|
||||||
- Decompression objects in the zlib module now accept an optional
|
- Decompression objects in the zlib module now accept an optional
|
||||||
second parameter to decompress() that specifies the maximum amount
|
second parameter to decompress() that specifies the maximum amount
|
||||||
|
|
|
@ -3127,6 +3127,51 @@ posix_setgid(PyObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
#endif /* HAVE_SETGID */
|
#endif /* HAVE_SETGID */
|
||||||
|
|
||||||
|
#ifdef HAVE_SETGROUPS
|
||||||
|
static char posix_setgroups__doc__[] =
|
||||||
|
"setgroups(list) -> None\n\
|
||||||
|
Set the groups of the current process to list.";
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
posix_setgroups(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
PyObject *groups;
|
||||||
|
int i, len;
|
||||||
|
gid_t grouplist[MAX_GROUPS];
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "O:setgid", &groups))
|
||||||
|
return NULL;
|
||||||
|
if (!PySequence_Check(groups)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "setgroups argument must be a sequence");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
len = PySequence_Size(groups);
|
||||||
|
if (len > MAX_GROUPS) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "too many groups");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
for(i = 0; i < len; i++) {
|
||||||
|
PyObject *elem;
|
||||||
|
elem = PySequence_GetItem(groups, i);
|
||||||
|
if (!elem)
|
||||||
|
return NULL;
|
||||||
|
if (!PyInt_Check(elem)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"groups must be integers");
|
||||||
|
Py_DECREF(elem);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* XXX: check that value fits into gid_t. */
|
||||||
|
grouplist[i] = PyInt_AsLong(elem);
|
||||||
|
Py_DECREF(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setgroups(len, grouplist) < 0)
|
||||||
|
return posix_error();
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_SETGROUPS */
|
||||||
|
|
||||||
#ifdef HAVE_WAITPID
|
#ifdef HAVE_WAITPID
|
||||||
static char posix_waitpid__doc__[] =
|
static char posix_waitpid__doc__[] =
|
||||||
|
@ -5467,6 +5512,9 @@ static PyMethodDef posix_methods[] = {
|
||||||
#ifdef HAVE_SETGID
|
#ifdef HAVE_SETGID
|
||||||
{"setgid", posix_setgid, METH_VARARGS, posix_setgid__doc__},
|
{"setgid", posix_setgid, METH_VARARGS, posix_setgid__doc__},
|
||||||
#endif /* HAVE_SETGID */
|
#endif /* HAVE_SETGID */
|
||||||
|
#ifdef HAVE_SETGROUPS
|
||||||
|
{"setgroups", posix_setgroups, METH_VARARGS, posix_setgroups__doc__},
|
||||||
|
#endif /* HAVE_SETGROUPS */
|
||||||
#ifdef HAVE_SETPGRP
|
#ifdef HAVE_SETPGRP
|
||||||
{"setpgrp", posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__},
|
{"setpgrp", posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__},
|
||||||
#endif /* HAVE_SETPGRP */
|
#endif /* HAVE_SETPGRP */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# From configure.in Revision: 1.268
|
# From configure.in Revision: 1.269
|
||||||
|
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated automatically using autoconf version 2.13
|
# Generated automatically using autoconf version 2.13
|
||||||
|
@ -4804,7 +4804,7 @@ for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \
|
||||||
hstrerror inet_pton kill link lstat mkfifo mktime mremap \
|
hstrerror inet_pton kill link lstat mkfifo mktime mremap \
|
||||||
nice pathconf pause plock poll pthread_init \
|
nice pathconf pause plock poll pthread_init \
|
||||||
putenv readlink \
|
putenv readlink \
|
||||||
select setegid seteuid setgid \
|
select setegid seteuid setgid setgroups \
|
||||||
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
||||||
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
||||||
tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
|
tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
|
||||||
|
|
|
@ -1391,7 +1391,7 @@ AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \
|
||||||
hstrerror inet_pton kill link lstat mkfifo mktime mremap \
|
hstrerror inet_pton kill link lstat mkfifo mktime mremap \
|
||||||
nice pathconf pause plock poll pthread_init \
|
nice pathconf pause plock poll pthread_init \
|
||||||
putenv readlink \
|
putenv readlink \
|
||||||
select setegid seteuid setgid \
|
select setegid seteuid setgid setgroups \
|
||||||
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
||||||
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
||||||
tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
|
tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
|
||||||
|
|
|
@ -498,6 +498,9 @@
|
||||||
/* Define if you have the setgid function. */
|
/* Define if you have the setgid function. */
|
||||||
#undef HAVE_SETGID
|
#undef HAVE_SETGID
|
||||||
|
|
||||||
|
/* Define if you have the setgroups function. */
|
||||||
|
#undef HAVE_SETGROUPS
|
||||||
|
|
||||||
/* Define if you have the setlocale function. */
|
/* Define if you have the setlocale function. */
|
||||||
#undef HAVE_SETLOCALE
|
#undef HAVE_SETLOCALE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue