diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2013-02-10 21:56:49 +0200 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2013-02-10 21:56:49 +0200 |
commit | 7cf5599346e397c3489012ad818b4f9b5d572b89 (patch) | |
tree | e3970ed7dd73a385d704121071307a05333ec054 /Modules/pwdmodule.c | |
parent | ac99576a8eda27d7554c5293df22d29ec9a2043d (diff) | |
download | cpython-git-7cf5599346e397c3489012ad818b4f9b5d572b89.tar.gz |
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Diffstat (limited to 'Modules/pwdmodule.c')
-rw-r--r-- | Modules/pwdmodule.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index 1e0903a388..632ffe3be8 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -2,8 +2,8 @@ /* UNIX password file access module */ #include "Python.h" +#include "posixmodule.h" -#include <sys/types.h> #include <pwd.h> static PyStructSequence_Field struct_pwd_type_fields[] = { @@ -74,8 +74,8 @@ mkpwent(struct passwd *p) #else SETS(setIndex++, p->pw_passwd); #endif - SETI(setIndex++, p->pw_uid); - SETI(setIndex++, p->pw_gid); + PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid)); + PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid)); #ifdef __VMS SETS(setIndex++, ""); #else @@ -104,13 +104,17 @@ See help(pwd) for more on password database entries."); static PyObject * pwd_getpwuid(PyObject *self, PyObject *args) { - unsigned int uid; + uid_t uid; struct passwd *p; - if (!PyArg_ParseTuple(args, "I:getpwuid", &uid)) + if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) return NULL; if ((p = getpwuid(uid)) == NULL) { + PyObject *uid_obj = _PyLong_FromUid(uid); + if (uid_obj == NULL) + return NULL; PyErr_Format(PyExc_KeyError, - "getpwuid(): uid not found: %d", uid); + "getpwuid(): uid not found: %S", uid_obj); + Py_DECREF(uid_obj); return NULL; } return mkpwent(p); |