mirror of
https://github.com/python/cpython.git
synced 2025-12-09 10:37:17 +00:00
Issue #17557: Fix os.getgroups() to work with the modified behavior of
getgroups(2) on OS X 10.8. Original patch by Mateusz Lenik.
This commit is contained in:
parent
2e3e593e34
commit
b5dd6d2287
3 changed files with 34 additions and 0 deletions
|
|
@ -721,6 +721,7 @@ Petri Lehtinen
|
||||||
Luke Kenneth Casson Leighton
|
Luke Kenneth Casson Leighton
|
||||||
Tshepang Lekhonkhobe
|
Tshepang Lekhonkhobe
|
||||||
Marc-André Lemburg
|
Marc-André Lemburg
|
||||||
|
Mateusz Lenik
|
||||||
John Lenton
|
John Lenton
|
||||||
Kostyantyn Leschenko
|
Kostyantyn Leschenko
|
||||||
Christopher Tur Lesniewski-Laas
|
Christopher Tur Lesniewski-Laas
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #17557: Fix os.getgroups() to work with the modified behavior of
|
||||||
|
getgroups(2) on OS X 10.8. Original patch by Mateusz Lenik.
|
||||||
|
|
||||||
- Issue #18599: Fix name attribute of _sha1.sha1() object. It now returns
|
- Issue #18599: Fix name attribute of _sha1.sha1() object. It now returns
|
||||||
'SHA1' instead of 'SHA'.
|
'SHA1' instead of 'SHA'.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6331,6 +6331,34 @@ posix_getgroups(PyObject *self, PyObject *noargs)
|
||||||
gid_t* alt_grouplist = grouplist;
|
gid_t* alt_grouplist = grouplist;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
/* Issue #17557: As of OS X 10.8, getgroups(2) no longer raises EINVAL if
|
||||||
|
* there are more groups than can fit in grouplist. Therefore, on OS X
|
||||||
|
* always first call getgroups with length 0 to get the actual number
|
||||||
|
* of groups.
|
||||||
|
*/
|
||||||
|
n = getgroups(0, NULL);
|
||||||
|
if (n < 0) {
|
||||||
|
return posix_error();
|
||||||
|
} else if (n <= MAX_GROUPS) {
|
||||||
|
/* groups will fit in existing array */
|
||||||
|
alt_grouplist = grouplist;
|
||||||
|
} else {
|
||||||
|
alt_grouplist = PyMem_Malloc(n * sizeof(gid_t));
|
||||||
|
if (alt_grouplist == NULL) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return posix_error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
n = getgroups(n, alt_grouplist);
|
||||||
|
if (n == -1) {
|
||||||
|
if (alt_grouplist != grouplist) {
|
||||||
|
PyMem_Free(alt_grouplist);
|
||||||
|
}
|
||||||
|
return posix_error();
|
||||||
|
}
|
||||||
|
#else
|
||||||
n = getgroups(MAX_GROUPS, grouplist);
|
n = getgroups(MAX_GROUPS, grouplist);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
if (errno == EINVAL) {
|
if (errno == EINVAL) {
|
||||||
|
|
@ -6357,6 +6385,8 @@ posix_getgroups(PyObject *self, PyObject *noargs)
|
||||||
return posix_error();
|
return posix_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
result = PyList_New(n);
|
result = PyList_New(n);
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
int i;
|
int i;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue