bpo-42655: Fix subprocess extra_groups gid conversion (GH-23762)
This commit is contained in:
parent
dd39123970
commit
0159e5efee
|
@ -0,0 +1,2 @@
|
|||
:mod:`subprocess` *extra_groups* is now correctly passed into setgroups()
|
||||
system call.
|
|
@ -900,7 +900,7 @@ subprocess_fork_exec(PyObject *module, PyObject *args)
|
|||
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,
|
||||
|
@ -934,10 +934,6 @@ subprocess_fork_exec(PyObject *module, PyObject *args)
|
|||
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");
|
||||
|
|
|
@ -672,7 +672,7 @@ _PyLong_FromGid(gid_t gid)
|
|||
}
|
||||
|
||||
int
|
||||
_Py_Uid_Converter(PyObject *obj, void *p)
|
||||
_Py_Uid_Converter(PyObject *obj, uid_t *p)
|
||||
{
|
||||
uid_t uid;
|
||||
PyObject *index;
|
||||
|
@ -759,7 +759,7 @@ _Py_Uid_Converter(PyObject *obj, void *p)
|
|||
|
||||
success:
|
||||
Py_DECREF(index);
|
||||
*(uid_t *)p = uid;
|
||||
*p = uid;
|
||||
return 1;
|
||||
|
||||
underflow:
|
||||
|
@ -778,7 +778,7 @@ fail:
|
|||
}
|
||||
|
||||
int
|
||||
_Py_Gid_Converter(PyObject *obj, void *p)
|
||||
_Py_Gid_Converter(PyObject *obj, gid_t *p)
|
||||
{
|
||||
gid_t gid;
|
||||
PyObject *index;
|
||||
|
@ -866,7 +866,7 @@ _Py_Gid_Converter(PyObject *obj, void *p)
|
|||
|
||||
success:
|
||||
Py_DECREF(index);
|
||||
*(gid_t *)p = gid;
|
||||
*p = gid;
|
||||
return 1;
|
||||
|
||||
underflow:
|
||||
|
|
|
@ -14,8 +14,8 @@ extern "C" {
|
|||
#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) || \
|
||||
|
|
Loading…
Reference in New Issue