--- /dev/null
+:mod:`subprocess` *extra_groups* is now correctly passed into setgroups()
+system call.
if (groups_list != Py_None) {
#ifdef HAVE_SETGROUPS
Py_ssize_t i;
- unsigned long gid;
+ gid_t gid;
if (!PyList_Check(groups_list)) {
PyErr_SetString(PyExc_TypeError,
Py_DECREF(elem);
goto cleanup;
} else {
- /* In posixmodule.c UnsignedLong is used as a fallback value
- * if the value provided does not fit in a Long. Since we are
- * already doing the bounds checking on the Python side, we
- * can go directly to an UnsignedLong here. */
if (!_Py_Gid_Converter(elem, &gid)) {
Py_DECREF(elem);
PyErr_SetString(PyExc_ValueError, "invalid group id");
}
int
-_Py_Uid_Converter(PyObject *obj, void *p)
+_Py_Uid_Converter(PyObject *obj, uid_t *p)
{
uid_t uid;
PyObject *index;
success:
Py_DECREF(index);
- *(uid_t *)p = uid;
+ *p = uid;
return 1;
underflow:
}
int
-_Py_Gid_Converter(PyObject *obj, void *p)
+_Py_Gid_Converter(PyObject *obj, gid_t *p)
{
gid_t gid;
PyObject *index;
success:
Py_DECREF(index);
- *(gid_t *)p = gid;
+ *p = gid;
return 1;
underflow:
#ifndef MS_WINDOWS
PyAPI_FUNC(PyObject *) _PyLong_FromUid(uid_t);
PyAPI_FUNC(PyObject *) _PyLong_FromGid(gid_t);
-PyAPI_FUNC(int) _Py_Uid_Converter(PyObject *, void *);
-PyAPI_FUNC(int) _Py_Gid_Converter(PyObject *, void *);
+PyAPI_FUNC(int) _Py_Uid_Converter(PyObject *, uid_t *);
+PyAPI_FUNC(int) _Py_Gid_Converter(PyObject *, gid_t *);
#endif /* MS_WINDOWS */
#if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGWAIT) || \