mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Merge 8f86d3459e
into 61dd9fdad7
This commit is contained in:
commit
036aac60e6
3 changed files with 54 additions and 32 deletions
|
@ -0,0 +1,6 @@
|
|||
The Unix user (:func:`pwd.getpwuid`, :func:`pwd.getpwnam`) and group
|
||||
(:func:`grp.getgrgid`, :func:`grp.getgrnam`) database functions now
|
||||
differentiate between a lack of record (:exc:`KeyError` is risen, the current behaviour)
|
||||
and a database access error (:exc:`OSError` is risen).
|
||||
|
||||
Based on a patch by Oleg Iarygin.
|
|
@ -171,21 +171,25 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
|
|||
p = getgrgid(gid);
|
||||
#endif
|
||||
if (p == NULL) {
|
||||
PyMem_RawFree(buf);
|
||||
if (nomem == 1) {
|
||||
return PyErr_NoMemory();
|
||||
retval = PyErr_NoMemory();
|
||||
}
|
||||
else if (errno == 0) {
|
||||
PyObject *gid_obj = _PyLong_FromGid(gid);
|
||||
if (gid_obj == NULL)
|
||||
return NULL;
|
||||
retval = PyErr_Format(PyExc_KeyError,
|
||||
"getgrgid(): gid not found: %S", gid_obj);
|
||||
Py_DECREF(gid_obj);
|
||||
}
|
||||
else {
|
||||
retval = PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
PyObject *gid_obj = _PyLong_FromGid(gid);
|
||||
if (gid_obj == NULL)
|
||||
return NULL;
|
||||
PyErr_Format(PyExc_KeyError, "getgrgid(): gid not found: %S", gid_obj);
|
||||
Py_DECREF(gid_obj);
|
||||
return NULL;
|
||||
}
|
||||
retval = mkgrent(module, p);
|
||||
#ifdef HAVE_GETGRGID_R
|
||||
else {
|
||||
retval = mkgrent(module, p);
|
||||
}
|
||||
PyMem_RawFree(buf);
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -253,14 +257,19 @@ grp_getgrnam_impl(PyObject *module, PyObject *name)
|
|||
#endif
|
||||
if (p == NULL) {
|
||||
if (nomem == 1) {
|
||||
PyErr_NoMemory();
|
||||
retval = PyErr_NoMemory();
|
||||
}
|
||||
else if (errno == 0) {
|
||||
retval = PyErr_Format(PyExc_KeyError,
|
||||
"getgrnam(): name not found: %R", name);
|
||||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %R", name);
|
||||
retval = PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
retval = mkgrent(module, p);
|
||||
else {
|
||||
retval = mkgrent(module, p);
|
||||
}
|
||||
out:
|
||||
PyMem_RawFree(buf);
|
||||
Py_DECREF(bytes);
|
||||
|
|
|
@ -185,22 +185,25 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
|
|||
p = getpwuid(uid);
|
||||
#endif
|
||||
if (p == NULL) {
|
||||
PyMem_RawFree(buf);
|
||||
if (nomem == 1) {
|
||||
return PyErr_NoMemory();
|
||||
retval = PyErr_NoMemory();
|
||||
}
|
||||
else if (errno == 0) {
|
||||
PyObject *uid_obj = _PyLong_FromUid(uid);
|
||||
if (uid_obj == NULL)
|
||||
return NULL;
|
||||
retval = PyErr_Format(PyExc_KeyError,
|
||||
"getpwuid(): uid not found: %S", uid_obj);
|
||||
Py_DECREF(uid_obj);
|
||||
}
|
||||
else {
|
||||
retval = PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
PyObject *uid_obj = _PyLong_FromUid(uid);
|
||||
if (uid_obj == NULL)
|
||||
return NULL;
|
||||
PyErr_Format(PyExc_KeyError,
|
||||
"getpwuid(): uid not found: %S", uid_obj);
|
||||
Py_DECREF(uid_obj);
|
||||
return NULL;
|
||||
}
|
||||
retval = mkpwent(module, p);
|
||||
#ifdef HAVE_GETPWUID_R
|
||||
else {
|
||||
retval = mkpwent(module, p);
|
||||
}
|
||||
PyMem_RawFree(buf);
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -269,15 +272,19 @@ pwd_getpwnam_impl(PyObject *module, PyObject *name)
|
|||
#endif
|
||||
if (p == NULL) {
|
||||
if (nomem == 1) {
|
||||
PyErr_NoMemory();
|
||||
retval = PyErr_NoMemory();
|
||||
}
|
||||
else if (errno == 0) {
|
||||
retval = PyErr_Format(PyExc_KeyError,
|
||||
"getpwnam(): name not found: %R", name);
|
||||
}
|
||||
else {
|
||||
PyErr_Format(PyExc_KeyError,
|
||||
"getpwnam(): name not found: %R", name);
|
||||
retval = PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
retval = mkpwent(module, p);
|
||||
else {
|
||||
retval = mkpwent(module, p);
|
||||
}
|
||||
out:
|
||||
PyMem_RawFree(buf);
|
||||
Py_DECREF(bytes);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue