Expose setgroups. Fixes feature request #468116.

This commit is contained in:
Martin v. Löwis 2001-10-18 04:06:00 +00:00
parent 6b47129424
commit 61c5edf6fc
6 changed files with 62 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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 */

4
configure vendored
View File

@ -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 \

View File

@ -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 \

View File

@ -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