Changeset 388 for python/vendor/current/Modules/spwdmodule.c
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Modules/spwdmodule.c
r2 r388 28 28 29 29 static PyStructSequence_Field struct_spwd_type_fields[] = { 30 31 32 33 {"sp_min", "min #days between changes"}, 34 {"sp_max", "max #days between changes"}, 35 {"sp_warn", "#days before pw expires to warn user about it"}, 36 37 38 39 30 {"sp_nam", "login name"}, 31 {"sp_pwd", "encrypted password"}, 32 {"sp_lstchg", "date of last change"}, 33 {"sp_min", "min #days between changes"}, 34 {"sp_max", "max #days between changes"}, 35 {"sp_warn", "#days before pw expires to warn user about it"}, 36 {"sp_inact", "#days after pw expires until account is blocked"}, 37 {"sp_expire", "#days since 1970-01-01 until account is disabled"}, 38 {"sp_flag", "reserved"}, 39 {0} 40 40 }; 41 41 … … 47 47 48 48 static PyStructSequence_Desc struct_spwd_type_desc = { 49 50 51 52 49 "spwd.struct_spwd", 50 struct_spwd__doc__, 51 struct_spwd_type_fields, 52 9, 53 53 }; 54 54 … … 61 61 { 62 62 if (val) 63 63 PyStructSequence_SET_ITEM(v, i, PyString_FromString(val)); 64 64 else { 65 66 65 PyStructSequence_SET_ITEM(v, i, Py_None); 66 Py_INCREF(Py_None); 67 67 } 68 68 } … … 70 70 static PyObject *mkspent(struct spwd *p) 71 71 { 72 73 74 75 72 int setIndex = 0; 73 PyObject *v = PyStructSequence_New(&StructSpwdType); 74 if (v == NULL) 75 return NULL; 76 76 77 77 #define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val)) 78 78 #define SETS(i,val) sets(v, i, val) 79 79 80 81 82 83 84 85 86 87 88 80 SETS(setIndex++, p->sp_namp); 81 SETS(setIndex++, p->sp_pwdp); 82 SETI(setIndex++, p->sp_lstchg); 83 SETI(setIndex++, p->sp_min); 84 SETI(setIndex++, p->sp_max); 85 SETI(setIndex++, p->sp_warn); 86 SETI(setIndex++, p->sp_inact); 87 SETI(setIndex++, p->sp_expire); 88 SETI(setIndex++, p->sp_flag); 89 89 90 90 #undef SETS 91 91 #undef SETI 92 92 93 94 95 96 93 if (PyErr_Occurred()) { 94 Py_DECREF(v); 95 return NULL; 96 } 97 97 98 98 return v; 99 99 } 100 100 … … 112 112 static PyObject* spwd_getspnam(PyObject *self, PyObject *args) 113 113 { 114 115 116 117 118 119 120 121 122 114 char *name; 115 struct spwd *p; 116 if (!PyArg_ParseTuple(args, "s:getspnam", &name)) 117 return NULL; 118 if ((p = getspnam(name)) == NULL) { 119 PyErr_SetString(PyExc_KeyError, "getspnam(): name not found"); 120 return NULL; 121 } 122 return mkspent(p); 123 123 } 124 124 … … 136 136 spwd_getspall(PyObject *self, PyObject *args) 137 137 { 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 138 PyObject *d; 139 struct spwd *p; 140 if ((d = PyList_New(0)) == NULL) 141 return NULL; 142 setspent(); 143 while ((p = getspent()) != NULL) { 144 PyObject *v = mkspent(p); 145 if (v == NULL || PyList_Append(d, v) != 0) { 146 Py_XDECREF(v); 147 Py_DECREF(d); 148 endspent(); 149 return NULL; 150 } 151 Py_DECREF(v); 152 } 153 endspent(); 154 return d; 155 155 } 156 156 … … 158 158 159 159 static PyMethodDef spwd_methods[] = { 160 #ifdef HAVE_GETSPNAM 161 {"getspnam",spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__},160 #ifdef HAVE_GETSPNAM 161 {"getspnam", spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__}, 162 162 #endif 163 163 #ifdef HAVE_GETSPENT 164 {"getspall",spwd_getspall, METH_NOARGS, spwd_getspall__doc__},164 {"getspall", spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, 165 165 #endif 166 {NULL, NULL}/* sentinel */166 {NULL, NULL} /* sentinel */ 167 167 }; 168 168 … … 171 171 initspwd(void) 172 172 { 173 174 175 176 177 178 PyStructSequence_InitType(&StructSpwdType, 179 180 181 182 173 PyObject *m; 174 m=Py_InitModule3("spwd", spwd_methods, spwd__doc__); 175 if (m == NULL) 176 return; 177 if (!initialized) 178 PyStructSequence_InitType(&StructSpwdType, 179 &struct_spwd_type_desc); 180 Py_INCREF((PyObject *) &StructSpwdType); 181 PyModule_AddObject(m, "struct_spwd", (PyObject *) &StructSpwdType); 182 initialized = 1; 183 183 }
Note:
See TracChangeset
for help on using the changeset viewer.