diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-12-02 20:37:54 +0000 |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-12-02 20:37:54 +0000 |
commit | 30b3b35cbac52719e44d8457fd9a7be09e6edd2c (patch) | |
tree | 595a8572a948775e3dcb4017fa13240dd5baf251 /Modules/posixmodule.c | |
parent | f2bf0d2a51f305f7df9d6199f580b488f1aa5135 (diff) | |
download | cpython-git-30b3b35cbac52719e44d8457fd9a7be09e6edd2c.tar.gz |
Issue #7333: The `posix` module gains an `initgroups()` function providing
access to the initgroups(3) C library call on Unix systems which implement
it. Patch by Jean-Paul Calderone.
Diffstat (limited to 'Modules/posixmodule.c')
-rw-r--r-- | Modules/posixmodule.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 68e7286efc..8956e939c2 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3861,6 +3861,30 @@ posix_getgroups(PyObject *self, PyObject *noargs) } #endif +#ifdef HAVE_INITGROUPS +PyDoc_STRVAR(posix_initgroups__doc__, +"initgroups(username, gid) -> None\n\n\ +Call the system initgroups() to initialize the group access list with all of\n\ +the groups of which the specified username is a member, plus the specified\n\ +group id."); + +static PyObject * +posix_initgroups(PyObject *self, PyObject *args) +{ + char *username; + long gid; + + if (!PyArg_ParseTuple(args, "sl:initgroups", &username, &gid)) + return NULL; + + if (initgroups(username, (gid_t) gid) == -1) + return PyErr_SetFromErrno(PyExc_OSError); + + Py_INCREF(Py_None); + return Py_None; +} +#endif + #ifdef HAVE_GETPGID PyDoc_STRVAR(posix_getpgid__doc__, "getpgid(pid) -> pgid\n\n\ @@ -8629,6 +8653,9 @@ static PyMethodDef posix_methods[] = { #ifdef HAVE_SETGROUPS {"setgroups", posix_setgroups, METH_O, posix_setgroups__doc__}, #endif /* HAVE_SETGROUPS */ +#ifdef HAVE_INITGROUPS + {"initgroups", posix_initgroups, METH_VARARGS, posix_initgroups__doc__}, +#endif /* HAVE_INITGROUPS */ #ifdef HAVE_GETPGID {"getpgid", posix_getpgid, METH_VARARGS, posix_getpgid__doc__}, #endif /* HAVE_GETPGID */ |