Changeset 388 for python/vendor/current/Modules/pwdmodule.c
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Modules/pwdmodule.c
r2 r388 4 4 #include "Python.h" 5 5 #include "structseq.h" 6 7 #include <sys/types.h> 6 #include "posixmodule.h" 7 8 8 #include <pwd.h> 9 9 10 10 static PyStructSequence_Field struct_pwd_type_fields[] = { 11 12 13 14 {"pw_gid", "group id"}, 15 {"pw_gecos", "real name"}, 16 17 18 11 {"pw_name", "user name"}, 12 {"pw_passwd", "password"}, 13 {"pw_uid", "user id"}, 14 {"pw_gid", "group id"}, 15 {"pw_gecos", "real name"}, 16 {"pw_dir", "home directory"}, 17 {"pw_shell", "shell program"}, 18 {0} 19 19 }; 20 20 … … 26 26 27 27 static PyStructSequence_Desc struct_pwd_type_desc = { 28 29 30 31 28 "pwd.struct_passwd", 29 struct_passwd__doc__, 30 struct_pwd_type_fields, 31 7, 32 32 }; 33 33 … … 42 42 exception is raised if the entry asked for cannot be found."); 43 43 44 44 45 45 static int initialized; 46 46 static PyTypeObject StructPwdType; … … 50 50 { 51 51 if (val) 52 52 PyStructSequence_SET_ITEM(v, i, PyString_FromString(val)); 53 53 else { 54 55 54 PyStructSequence_SET_ITEM(v, i, Py_None); 55 Py_INCREF(Py_None); 56 56 } 57 57 } … … 60 60 mkpwent(struct passwd *p) 61 61 { 62 63 64 65 62 int setIndex = 0; 63 PyObject *v = PyStructSequence_New(&StructPwdType); 64 if (v == NULL) 65 return NULL; 66 66 67 67 #define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val)) 68 68 #define SETS(i,val) sets(v, i, val) 69 69 70 70 SETS(setIndex++, p->pw_name); 71 71 #ifdef __VMS 72 72 SETS(setIndex++, ""); 73 73 #else 74 75 #endif 76 SETI(setIndex++, p->pw_uid);77 SETI(setIndex++, p->pw_gid);74 SETS(setIndex++, p->pw_passwd); 75 #endif 76 PyStructSequence_SET_ITEM(v, setIndex++, _PyInt_FromUid(p->pw_uid)); 77 PyStructSequence_SET_ITEM(v, setIndex++, _PyInt_FromGid(p->pw_gid)); 78 78 #ifdef __VMS 79 79 SETS(setIndex++, ""); 80 80 #else 81 82 #endif 83 84 81 SETS(setIndex++, p->pw_gecos); 82 #endif 83 SETS(setIndex++, p->pw_dir); 84 SETS(setIndex++, p->pw_shell); 85 85 86 86 #undef SETS 87 87 #undef SETI 88 88 89 90 91 92 93 94 89 if (PyErr_Occurred()) { 90 Py_XDECREF(v); 91 return NULL; 92 } 93 94 return v; 95 95 } 96 96 … … 99 99 pw_gid,pw_gecos,pw_dir,pw_shell)\n\ 100 100 Return the password database entry for the given numeric user ID.\n\ 101 See pwd.__doc__for more on password database entries.");101 See help(pwd) for more on password database entries."); 102 102 103 103 static PyObject * 104 104 pwd_getpwuid(PyObject *self, PyObject *args) 105 105 { 106 unsigned int uid; 107 struct passwd *p; 108 if (!PyArg_ParseTuple(args, "I:getpwuid", &uid)) 109 return NULL; 110 if ((p = getpwuid(uid)) == NULL) { 111 PyErr_Format(PyExc_KeyError, 112 "getpwuid(): uid not found: %d", uid); 113 return NULL; 114 } 115 return mkpwent(p); 106 uid_t uid; 107 struct passwd *p; 108 if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) { 109 if (PyErr_ExceptionMatches(PyExc_OverflowError)) 110 PyErr_Format(PyExc_KeyError, 111 "getpwuid(): uid not found"); 112 return NULL; 113 } 114 if ((p = getpwuid(uid)) == NULL) { 115 if (uid < 0) 116 PyErr_Format(PyExc_KeyError, 117 "getpwuid(): uid not found: %ld", (long)uid); 118 else 119 PyErr_Format(PyExc_KeyError, 120 "getpwuid(): uid not found: %lu", (unsigned long)uid); 121 return NULL; 122 } 123 return mkpwent(p); 116 124 } 117 125 … … 120 128 pw_gid,pw_gecos,pw_dir,pw_shell)\n\ 121 129 Return the password database entry for the given user name.\n\ 122 See pwd.__doc__for more on password database entries.");130 See help(pwd) for more on password database entries."); 123 131 124 132 static PyObject * 125 133 pwd_getpwnam(PyObject *self, PyObject *args) 126 134 { 127 128 129 130 131 132 133 134 135 136 135 char *name; 136 struct passwd *p; 137 if (!PyArg_ParseTuple(args, "s:getpwnam", &name)) 138 return NULL; 139 if ((p = getpwnam(name)) == NULL) { 140 PyErr_Format(PyExc_KeyError, 141 "getpwnam(): name not found: %s", name); 142 return NULL; 143 } 144 return mkpwent(p); 137 145 } 138 146 … … 142 150 Return a list of all available password database entries, \ 143 151 in arbitrary order.\n\ 144 See pwd.__doc__for more on password database entries.");152 See help(pwd) for more on password database entries."); 145 153 146 154 static PyObject * 147 155 pwd_getpwall(PyObject *self) 148 156 { 149 150 151 152 157 PyObject *d; 158 struct passwd *p; 159 if ((d = PyList_New(0)) == NULL) 160 return NULL; 153 161 #if defined(PYOS_OS2) && defined(PYCC_GCC) 154 162 if ((p = getpwuid(0)) != NULL) { 155 163 #else 156 157 158 #endif 159 160 161 162 163 164 165 166 167 168 169 164 setpwent(); 165 while ((p = getpwent()) != NULL) { 166 #endif 167 PyObject *v = mkpwent(p); 168 if (v == NULL || PyList_Append(d, v) != 0) { 169 Py_XDECREF(v); 170 Py_DECREF(d); 171 endpwent(); 172 return NULL; 173 } 174 Py_DECREF(v); 175 } 176 endpwent(); 177 return d; 170 178 } 171 179 #endif 172 180 173 181 static PyMethodDef pwd_methods[] = { 174 {"getpwuid",pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__},175 {"getpwnam",pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__},182 {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, 183 {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, 176 184 #ifdef HAVE_GETPWENT 177 {"getpwall",(PyCFunction)pwd_getpwall,178 179 #endif 180 {NULL, NULL}/* sentinel */185 {"getpwall", (PyCFunction)pwd_getpwall, 186 METH_NOARGS, pwd_getpwall__doc__}, 187 #endif 188 {NULL, NULL} /* sentinel */ 181 189 }; 182 190 … … 184 192 initpwd(void) 185 193 { 186 187 188 189 190 191 192 PyStructSequence_InitType(&StructPwdType, 193 194 195 196 197 198 199 200 } 194 PyObject *m; 195 m = Py_InitModule3("pwd", pwd_methods, pwd__doc__); 196 if (m == NULL) 197 return; 198 199 if (!initialized) 200 PyStructSequence_InitType(&StructPwdType, 201 &struct_pwd_type_desc); 202 Py_INCREF((PyObject *) &StructPwdType); 203 PyModule_AddObject(m, "struct_passwd", (PyObject *) &StructPwdType); 204 /* And for b/w compatibility (this was defined by mistake): */ 205 Py_INCREF((PyObject *) &StructPwdType); 206 PyModule_AddObject(m, "struct_pwent", (PyObject *) &StructPwdType); 207 initialized = 1; 208 }
Note:
See TracChangeset
for help on using the changeset viewer.