bpo-42655: Fix subprocess extra_groups gid conversion (GH-23762)
(cherry picked from commit 0159e5efee
)
Co-authored-by: Jakub Kulík <Kulikjak@gmail.com>
This commit is contained in:
parent
cc7f745e80
commit
3966e2ea41
|
@ -0,0 +1,2 @@
|
|||
:mod:`subprocess` *extra_groups* is now correctly passed into setgroups()
|
||||
system call.
|
|
@ -753,7 +753,7 @@ subprocess_fork_exec(PyObject* self, 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,
|
||||
|
@ -787,10 +787,6 @@ subprocess_fork_exec(PyObject* self, 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");
|
||||
|
|
|
@ -632,7 +632,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;
|
||||
|
@ -719,7 +719,7 @@ _Py_Uid_Converter(PyObject *obj, void *p)
|
|||
|
||||
success:
|
||||
Py_DECREF(index);
|
||||
*(uid_t *)p = uid;
|
||||
*p = uid;
|
||||
return 1;
|
||||
|
||||
underflow:
|
||||
|
@ -738,7 +738,7 @@ fail:
|
|||
}
|
||||
|
||||
int
|
||||
_Py_Gid_Converter(PyObject *obj, void *p)
|
||||
_Py_Gid_Converter(PyObject *obj, gid_t *p)
|
||||
{
|
||||
gid_t gid;
|
||||
PyObject *index;
|
||||
|
@ -826,7 +826,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