Issue #18787: spwd.getspnam() now raises a PermissionError if the user
doesn't have privileges.
This commit is contained in:
parent
af4a1f20ba
commit
3c3d7f4b99
|
@ -54,6 +54,9 @@ The following functions are defined:
|
|||
|
||||
Return the shadow password database entry for the given user name.
|
||||
|
||||
.. versionchanged:: 3.6
|
||||
Raises a :exc:`PermissionError` instead of :exc:`KeyError` if the user
|
||||
doesn't have privileges.
|
||||
|
||||
.. function:: getspall()
|
||||
|
||||
|
|
|
@ -471,6 +471,8 @@ Changes in the Python API
|
|||
the exception will stop a single-threaded server. (Contributed by
|
||||
Martin Panter in :issue:`23430`.)
|
||||
|
||||
* :func:`spwd.getspnam` now raises a :exc:`PermissionError` instead of
|
||||
:exc:`KeyError` if the user doesn't have privileges.
|
||||
|
||||
Changes in the C API
|
||||
--------------------
|
||||
|
|
|
@ -56,5 +56,15 @@ class TestSpwdRoot(unittest.TestCase):
|
|||
self.assertRaises(TypeError, spwd.getspnam, bytes_name)
|
||||
|
||||
|
||||
@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() != 0,
|
||||
'non-root user required')
|
||||
class TestSpwdNonRoot(unittest.TestCase):
|
||||
|
||||
def test_getspnam_exception(self):
|
||||
with self.assertRaises(PermissionError) as cm:
|
||||
spwd.getspnam('bin')
|
||||
self.assertEqual(str(cm.exception), '[Errno 13] Permission denied')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -226,6 +226,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #18787: spwd.getspnam() now raises a PermissionError if the user
|
||||
doesn't have privileges.
|
||||
|
||||
- Issue #26560: Avoid potential ValueError in BaseHandler.start_response.
|
||||
Initial patch by Peter Inglesby.
|
||||
|
||||
|
|
|
@ -137,7 +137,10 @@ spwd_getspnam_impl(PyModuleDef *module, PyObject *arg)
|
|||
if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1)
|
||||
goto out;
|
||||
if ((p = getspnam(name)) == NULL) {
|
||||
PyErr_SetString(PyExc_KeyError, "getspnam(): name not found");
|
||||
if (errno != 0)
|
||||
PyErr_SetFromErrno(PyExc_OSError);
|
||||
else
|
||||
PyErr_SetString(PyExc_KeyError, "getspnam(): name not found");
|
||||
goto out;
|
||||
}
|
||||
retval = mkspent(p);
|
||||
|
|
Loading…
Reference in New Issue