Mercurial > cpython-lru_cache-weakref
annotate Modules/pwdmodule.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | fc718c177ee6 |
| children |
| rev | line source |
|---|---|
| 201 | 1 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1351
diff
changeset
|
2 /* UNIX password file access module */ |
| 201 | 3 |
| 4684 | 4 #include "Python.h" |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
5 #include "posixmodule.h" |
| 201 | 6 |
| 7 #include <pwd.h> | |
| 8 | |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
9 static PyStructSequence_Field struct_pwd_type_fields[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
10 {"pw_name", "user name"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
11 {"pw_passwd", "password"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
12 {"pw_uid", "user id"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
13 {"pw_gid", "group id"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
14 {"pw_gecos", "real name"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
15 {"pw_dir", "home directory"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
16 {"pw_shell", "shell program"}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
17 {0} |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
18 }; |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
19 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
20 PyDoc_STRVAR(struct_passwd__doc__, |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
21 "pwd.struct_passwd: Results from getpw*() routines.\n\n\ |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
22 This object may be accessed either as a tuple of\n\ |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
23 (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
24 or via the object attributes as named in the above tuple."); |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
25 |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
26 static PyStructSequence_Desc struct_pwd_type_desc = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
27 "pwd.struct_passwd", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
28 struct_passwd__doc__, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
29 struct_pwd_type_fields, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
30 7, |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
31 }; |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
32 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
33 PyDoc_STRVAR(pwd__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
34 "This module provides access to the Unix password database.\n\ |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
35 It is available on all Unix versions.\n\ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
36 \n\ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
37 Password database entries are reported as 7-tuples containing the following\n\ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
38 items from the password database (see `<pwd.h>'), in order:\n\ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
39 pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell.\n\ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
40 The uid and gid items are integers, all others are strings. An\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
41 exception is raised if the entry asked for cannot be found."); |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
42 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
43 |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
44 static int initialized; |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
45 static PyTypeObject StructPwdType; |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
46 |
|
25303
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
47 static void |
|
42804
69b8e2976556
Use unicode for password modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
37772
diff
changeset
|
48 sets(PyObject *v, int i, const char* val) |
|
25303
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
49 { |
|
43698
d46a31f5c5df
Get the locale and pwd tests working on the Solaris box where there
Neal Norwitz <nnorwitz@gmail.com>
parents:
42804
diff
changeset
|
50 if (val) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61367
diff
changeset
|
51 PyObject *o = PyUnicode_DecodeFSDefault(val); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
52 PyStructSequence_SET_ITEM(v, i, o); |
|
43698
d46a31f5c5df
Get the locale and pwd tests working on the Solaris box where there
Neal Norwitz <nnorwitz@gmail.com>
parents:
42804
diff
changeset
|
53 } |
|
25303
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
54 else { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
55 PyStructSequence_SET_ITEM(v, i, Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
56 Py_INCREF(Py_None); |
|
25303
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
57 } |
|
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
58 } |
|
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
59 |
| 4684 | 60 static PyObject * |
|
13505
0edeb4efe6db
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
61 mkpwent(struct passwd *p) |
| 201 | 62 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
63 int setIndex = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
64 PyObject *v = PyStructSequence_New(&StructPwdType); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
65 if (v == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
66 return NULL; |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
67 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43698
diff
changeset
|
68 #define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyLong_FromLong((long) val)) |
|
25303
df03fcc66104
Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
69 #define SETS(i,val) sets(v, i, val) |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
70 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
71 SETS(setIndex++, p->pw_name); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
72 #ifdef __VMS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
73 SETS(setIndex++, ""); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
74 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
75 SETS(setIndex++, p->pw_passwd); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
76 #endif |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
77 PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid)); |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
78 PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid)); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
79 #ifdef __VMS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
80 SETS(setIndex++, ""); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
81 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
82 SETS(setIndex++, p->pw_gecos); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25303
diff
changeset
|
83 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
84 SETS(setIndex++, p->pw_dir); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
85 SETS(setIndex++, p->pw_shell); |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
86 |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
87 #undef SETS |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
88 #undef SETI |
|
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
89 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
90 if (PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
91 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
92 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
93 } |
|
22099
d0acb3cb011d
Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents:
21859
diff
changeset
|
94 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
95 return v; |
| 201 | 96 } |
| 97 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
98 PyDoc_STRVAR(pwd_getpwuid__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
99 "getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,\n\ |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
100 pw_gid,pw_gecos,pw_dir,pw_shell)\n\ |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
101 Return the password database entry for the given numeric user ID.\n\ |
|
64077
4085cc560e9e
Merged revisions 84106 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
61467
diff
changeset
|
102 See help(pwd) for more on password database entries."); |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
103 |
| 4684 | 104 static PyObject * |
|
13505
0edeb4efe6db
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
105 pwd_getpwuid(PyObject *self, PyObject *args) |
| 201 | 106 { |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
107 uid_t uid; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
108 struct passwd *p; |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
109 if (!PyArg_ParseTuple(args, "O&:getpwuid", _Py_Uid_Converter, &uid)) { |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
110 if (PyErr_ExceptionMatches(PyExc_OverflowError)) |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
111 PyErr_Format(PyExc_KeyError, |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
112 "getpwuid(): uid not found"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
113 return NULL; |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
114 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
115 if ((p = getpwuid(uid)) == NULL) { |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
116 PyObject *uid_obj = _PyLong_FromUid(uid); |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
117 if (uid_obj == NULL) |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
118 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
119 PyErr_Format(PyExc_KeyError, |
|
82172
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
120 "getpwuid(): uid not found: %S", uid_obj); |
|
3893ab574c55
Issue #4591: Uid and gid values larger than 2**31 are supported now.
Serhiy Storchaka <storchaka@gmail.com>
parents:
68257
diff
changeset
|
121 Py_DECREF(uid_obj); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
122 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
123 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
124 return mkpwent(p); |
| 201 | 125 } |
| 126 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
127 PyDoc_STRVAR(pwd_getpwnam__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
128 "getpwnam(name) -> (pw_name,pw_passwd,pw_uid,\n\ |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
129 pw_gid,pw_gecos,pw_dir,pw_shell)\n\ |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
130 Return the password database entry for the given user name.\n\ |
|
64077
4085cc560e9e
Merged revisions 84106 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
61467
diff
changeset
|
131 See help(pwd) for more on password database entries."); |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
132 |
| 4684 | 133 static PyObject * |
|
13505
0edeb4efe6db
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
134 pwd_getpwnam(PyObject *self, PyObject *args) |
| 201 | 135 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
136 char *name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
137 struct passwd *p; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
138 PyObject *arg, *bytes, *retval = NULL; |
|
54422
28d64192ab5a
Issue #4859: Implement PEP 383 for pwd, spwd, and grp.
Martin v. Löwis <martin@v.loewis.de>
parents:
53757
diff
changeset
|
139 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
140 if (!PyArg_ParseTuple(args, "U:getpwnam", &arg)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
141 return NULL; |
|
61597
b5ba7ea4246b
Issue #8715: Create PyUnicode_EncodeFSDefault() function: Encode a Unicode
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
142 if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
143 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
144 if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
145 goto out; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
146 if ((p = getpwnam(name)) == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
147 PyErr_Format(PyExc_KeyError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
148 "getpwnam(): name not found: %s", name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
149 goto out; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
150 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
151 retval = mkpwent(p); |
|
54422
28d64192ab5a
Issue #4859: Implement PEP 383 for pwd, spwd, and grp.
Martin v. Löwis <martin@v.loewis.de>
parents:
53757
diff
changeset
|
152 out: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
153 Py_DECREF(bytes); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
154 return retval; |
| 201 | 155 } |
| 156 | |
|
6142
144db635b49d
Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents:
4917
diff
changeset
|
157 #ifdef HAVE_GETPWENT |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
158 PyDoc_STRVAR(pwd_getpwall__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23048
diff
changeset
|
159 "getpwall() -> list_of_entries\n\ |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
160 Return a list of all available password database entries, \ |
|
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
161 in arbitrary order.\n\ |
|
64077
4085cc560e9e
Merged revisions 84106 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
61467
diff
changeset
|
162 See help(pwd) for more on password database entries."); |
|
7530
891105dac9b4
Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents:
6142
diff
changeset
|
163 |
| 4684 | 164 static PyObject * |
|
22561
043ad7adc896
Remove many uses of PyArg_NoArgs macro, change METH_OLDARGS to METH_NOARGS.
Neal Norwitz <nnorwitz@gmail.com>
parents:
22114
diff
changeset
|
165 pwd_getpwall(PyObject *self) |
| 201 | 166 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
167 PyObject *d; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
168 struct passwd *p; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
169 if ((d = PyList_New(0)) == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
170 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
171 setpwent(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
172 while ((p = getpwent()) != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
173 PyObject *v = mkpwent(p); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
174 if (v == NULL || PyList_Append(d, v) != 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
175 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
176 Py_DECREF(d); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
177 endpwent(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
178 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
179 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
180 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
181 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
182 endpwent(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
183 return d; |
| 201 | 184 } |
|
6142
144db635b49d
Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents:
4917
diff
changeset
|
185 #endif |
| 201 | 186 |
| 4684 | 187 static PyMethodDef pwd_methods[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
188 {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
189 {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, |
|
6142
144db635b49d
Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents:
4917
diff
changeset
|
190 #ifdef HAVE_GETPWENT |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
191 {"getpwall", (PyCFunction)pwd_getpwall, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
192 METH_NOARGS, pwd_getpwall__doc__}, |
|
6142
144db635b49d
Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents:
4917
diff
changeset
|
193 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
194 {NULL, NULL} /* sentinel */ |
| 201 | 195 }; |
| 196 | |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
197 static struct PyModuleDef pwdmodule = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
198 PyModuleDef_HEAD_INIT, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
199 "pwd", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
200 pwd__doc__, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
201 -1, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
202 pwd_methods, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
203 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
204 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
205 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
206 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
207 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
208 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
209 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
23832
diff
changeset
|
210 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
44099
diff
changeset
|
211 PyInit_pwd(void) |
| 201 | 212 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
213 PyObject *m; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
214 m = PyModule_Create(&pwdmodule); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
215 if (m == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
216 return NULL; |
|
23024
4e58a38e3c06
initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents:
22709
diff
changeset
|
217 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
218 if (!initialized) { |
|
84793
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
82175
diff
changeset
|
219 if (PyStructSequence_InitType2(&StructPwdType, |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
82175
diff
changeset
|
220 &struct_pwd_type_desc) < 0) |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
82175
diff
changeset
|
221 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
222 initialized = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
223 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
224 Py_INCREF((PyObject *) &StructPwdType); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
225 PyModule_AddObject(m, "struct_passwd", (PyObject *) &StructPwdType); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54425
diff
changeset
|
226 return m; |
| 201 | 227 } |
