annotate Modules/pwdmodule.c @ 70817:dd775b1561ba

Fix markup.
author Georg Brandl <georg@python.org>
date Tue, 14 Jun 2011 21:09:55 +0200
parents 3c9232a684ae
children 3893ab574c55 b322655a4a88 dea15868963f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
4 #include "Python.h"
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #include <sys/types.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 #include <pwd.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
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: 37879
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
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
60 static PyObject *
13505
0edeb4efe6db ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
61 mkpwent(struct passwd *p)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
77 SETI(setIndex++, p->pw_uid);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
78 SETI(setIndex++, 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
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
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
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
107 unsigned int uid;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
108 struct passwd *p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
109 if (!PyArg_ParseTuple(args, "I:getpwuid", &uid))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
110 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
111 if ((p = getpwuid(uid)) == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
112 PyErr_Format(PyExc_KeyError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
113 "getpwuid(): uid not found: %d", uid);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
114 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
115 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
116 return mkpwent(p);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
119 PyDoc_STRVAR(pwd_getpwnam__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
120 "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
121 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
122 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
123 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
124
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
125 static PyObject *
13505
0edeb4efe6db ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
126 pwd_getpwnam(PyObject *self, PyObject *args)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
128 char *name;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
129 struct passwd *p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
130 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
131
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
132 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
133 return NULL;
61597
b5ba7ea4246b Issue #8715: Create PyUnicode_EncodeFSDefault() function: Encode a Unicode
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
134 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
135 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
136 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
137 goto out;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
138 if ((p = getpwnam(name)) == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
139 PyErr_Format(PyExc_KeyError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
140 "getpwnam(): name not found: %s", name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
141 goto out;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
142 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
143 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
144 out:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
145 Py_DECREF(bytes);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
146 return retval;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 4917
diff changeset
149 #ifdef HAVE_GETPWENT
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
150 PyDoc_STRVAR(pwd_getpwall__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
151 "getpwall() -> list_of_entries\n\
7530
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
152 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
153 in arbitrary order.\n\
64077
4085cc560e9e Merged revisions 84106 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61467
diff changeset
154 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
155
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
156 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
157 pwd_getpwall(PyObject *self)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
159 PyObject *d;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
160 struct passwd *p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
161 if ((d = PyList_New(0)) == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
162 return NULL;
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 22099
diff changeset
163 #if defined(PYOS_OS2) && defined(PYCC_GCC)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
164 if ((p = getpwuid(0)) != NULL) {
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 22099
diff changeset
165 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
166 setpwent();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
167 while ((p = getpwent()) != NULL) {
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 22099
diff changeset
168 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
169 PyObject *v = mkpwent(p);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
170 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
171 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
172 Py_DECREF(d);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
173 endpwent();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
174 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
175 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
176 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
177 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
178 endpwent();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
179 return d;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 }
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 4917
diff changeset
181 #endif
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
183 static PyMethodDef pwd_methods[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
184 {"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
185 {"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
186 #ifdef HAVE_GETPWENT
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
187 {"getpwall", (PyCFunction)pwd_getpwall,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
188 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
189 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
190 {NULL, NULL} /* sentinel */
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 };
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
193 static struct PyModuleDef pwdmodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
194 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
195 "pwd",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
196 pwd__doc__,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
197 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
198 pwd_methods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
199 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
200 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
201 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
202 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
203 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
204
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
205
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
206 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
207 PyInit_pwd(void)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
209 PyObject *m;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
210 m = PyModule_Create(&pwdmodule);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
211 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
212 return NULL;
23024
4e58a38e3c06 initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents: 22709
diff changeset
213
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
214 if (!initialized) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
215 PyStructSequence_InitType(&StructPwdType,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
216 &struct_pwd_type_desc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
217 initialized = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
218 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
219 Py_INCREF((PyObject *) &StructPwdType);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54425
diff changeset
220 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
221 return m;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 }