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{}.
|
||||
\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}{}
|
||||
Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0,
|
||||
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.
|
||||
|
||||
- posix supports chroot where available.
|
||||
- posix supports chroot and setgroups where available.
|
||||
|
||||
- Decompression objects in the zlib module now accept an optional
|
||||
second parameter to decompress() that specifies the maximum amount
|
||||
|
|
|
@ -3127,6 +3127,51 @@ posix_setgid(PyObject *self, PyObject *args)
|
|||
}
|
||||
#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
|
||||
static char posix_waitpid__doc__[] =
|
||||
|
@ -5467,6 +5512,9 @@ static PyMethodDef posix_methods[] = {
|
|||
#ifdef HAVE_SETGID
|
||||
{"setgid", posix_setgid, METH_VARARGS, posix_setgid__doc__},
|
||||
#endif /* HAVE_SETGID */
|
||||
#ifdef HAVE_SETGROUPS
|
||||
{"setgroups", posix_setgroups, METH_VARARGS, posix_setgroups__doc__},
|
||||
#endif /* HAVE_SETGROUPS */
|
||||
#ifdef HAVE_SETPGRP
|
||||
{"setpgrp", posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__},
|
||||
#endif /* HAVE_SETPGRP */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
|
||||
# From configure.in Revision: 1.268
|
||||
# From configure.in Revision: 1.269
|
||||
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# 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 \
|
||||
nice pathconf pause plock poll pthread_init \
|
||||
putenv readlink \
|
||||
select setegid seteuid setgid \
|
||||
select setegid seteuid setgid setgroups \
|
||||
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
||||
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
||||
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 \
|
||||
nice pathconf pause plock poll pthread_init \
|
||||
putenv readlink \
|
||||
select setegid seteuid setgid \
|
||||
select setegid seteuid setgid setgroups \
|
||||
setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
|
||||
sigaction siginterrupt sigrelse strftime strptime symlink sysconf \
|
||||
tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
|
||||
|
|
|
@ -498,6 +498,9 @@
|
|||
/* Define if you have the setgid function. */
|
||||
#undef HAVE_SETGID
|
||||
|
||||
/* Define if you have the setgroups function. */
|
||||
#undef HAVE_SETGROUPS
|
||||
|
||||
/* Define if you have the setlocale function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
|
|
Loading…
Reference in New Issue