Commit 8baa745c authored by Gregory P. Smith's avatar Gregory P. Smith

Merged revisions 78546 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78546 | gregory.p.smith | 2010-02-28 21:43:43 -0800 (Sun, 28 Feb 2010) | 3 lines

  Fixes issue #7999: os.setreuid() and os.setregid() would refuse to accept
  a -1 parameter on some platforms such as OS X.
........
parent c21d0cb6
...@@ -643,6 +643,7 @@ if sys.platform != 'win32': ...@@ -643,6 +643,7 @@ if sys.platform != 'win32':
self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(os.error, os.setreuid, 0, 0)
self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0)
self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32)
os.setreuid(-1, -1) # Does nothing, but it needs to accept -1
if hasattr(os, 'setregid'): if hasattr(os, 'setregid'):
def test_setregid(self): def test_setregid(self):
...@@ -650,6 +651,7 @@ if sys.platform != 'win32': ...@@ -650,6 +651,7 @@ if sys.platform != 'win32':
self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(os.error, os.setregid, 0, 0)
self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0)
self.assertRaises(OverflowError, os.setregid, 0, 1<<32) self.assertRaises(OverflowError, os.setregid, 0, 1<<32)
os.setregid(-1, -1) # Does nothing, but it needs to accept -1
else: else:
class PosixUidGidTests(unittest.TestCase): class PosixUidGidTests(unittest.TestCase):
pass pass
......
...@@ -254,6 +254,9 @@ Extension Modules ...@@ -254,6 +254,9 @@ Extension Modules
thread could raise an incorrect RuntimeError about not holding the import thread could raise an incorrect RuntimeError about not holding the import
lock. The import lock is now reinitialized after fork. lock. The import lock is now reinitialized after fork.
- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1
parameter on some platforms such as OS X.
Build Build
----- -----
......
...@@ -5649,9 +5649,16 @@ posix_setreuid (PyObject *self, PyObject *args) ...@@ -5649,9 +5649,16 @@ posix_setreuid (PyObject *self, PyObject *args)
uid_t ruid, euid; uid_t ruid, euid;
if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg))
return NULL; return NULL;
ruid = ruid_arg; if (ruid_arg == -1)
euid = euid_arg; ruid = (uid_t)-1; /* let the compiler choose how -1 fits */
if (euid != euid_arg || ruid != ruid_arg) { else
ruid = ruid_arg; /* otherwise, assign from our long */
if (euid_arg == -1)
euid = (uid_t)-1;
else
euid = euid_arg;
if ((euid_arg != -1 && euid != euid_arg) ||
(ruid_arg != -1 && ruid != ruid_arg)) {
PyErr_SetString(PyExc_OverflowError, "user id too big"); PyErr_SetString(PyExc_OverflowError, "user id too big");
return NULL; return NULL;
} }
...@@ -5676,9 +5683,16 @@ posix_setregid (PyObject *self, PyObject *args) ...@@ -5676,9 +5683,16 @@ posix_setregid (PyObject *self, PyObject *args)
gid_t rgid, egid; gid_t rgid, egid;
if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg))
return NULL; return NULL;
rgid = rgid_arg; if (rgid_arg == -1)
egid = egid_arg; rgid = (gid_t)-1; /* let the compiler choose how -1 fits */
if (egid != egid_arg || rgid != rgid_arg) { else
rgid = rgid_arg; /* otherwise, assign from our long */
if (egid_arg == -1)
egid = (gid_t)-1;
else
egid = egid_arg;
if ((egid_arg != -1 && egid != egid_arg) ||
(rgid_arg != -1 && rgid != rgid_arg)) {
PyErr_SetString(PyExc_OverflowError, "group id too big"); PyErr_SetString(PyExc_OverflowError, "group id too big");
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment