[Python-checkins] cpython: Issue #18787: spwd.getspnam() now raises a PermissionError if the user
berker.peksag
python-checkins at python.org
Sat Mar 19 05:43:01 EDT 2016
https://hg.python.org/cpython/rev/a1d738158390
changeset: 100607:a1d738158390
user: Berker Peksag <berker.peksag at gmail.com>
date: Sat Mar 19 11:44:17 2016 +0200
summary:
Issue #18787: spwd.getspnam() now raises a PermissionError if the user
doesn't have privileges.
files:
Doc/library/spwd.rst | 3 +++
Doc/whatsnew/3.6.rst | 2 ++
Lib/test/test_spwd.py | 10 ++++++++++
Misc/NEWS | 3 +++
Modules/spwdmodule.c | 5 ++++-
5 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/Doc/library/spwd.rst b/Doc/library/spwd.rst
--- a/Doc/library/spwd.rst
+++ b/Doc/library/spwd.rst
@@ -54,6 +54,9 @@
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()
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -471,6 +471,8 @@
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
--------------------
diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
--- a/Lib/test/test_spwd.py
+++ b/Lib/test/test_spwd.py
@@ -56,5 +56,15 @@
self.assertRaises(TypeError, spwd.getspnam, bytes_name)
+ at 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()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -226,6 +226,9 @@
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.
diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c
--- a/Modules/spwdmodule.c
+++ b/Modules/spwdmodule.c
@@ -137,7 +137,10 @@
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);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list