annotate Modules/pwdmodule.c @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents b9c912e2c3c0
children ff9a54953c0b 48b9cc51742b
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"
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
5 #include "structseq.h"
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 #include <sys/types.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #include <pwd.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
10 static PyStructSequence_Field struct_pwd_type_fields[] = {
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
11 {"pw_name", "user name"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
12 {"pw_passwd", "password"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
13 {"pw_uid", "user id"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
14 {"pw_gid", "group id"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
15 {"pw_gecos", "real name"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
16 {"pw_dir", "home directory"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
17 {"pw_shell", "shell program"},
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
18 {0}
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
19 };
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
20
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
21 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
22 "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
23 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
24 (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
25 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
26
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
27 static PyStructSequence_Desc struct_pwd_type_desc = {
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
28 "pwd.struct_passwd",
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
29 struct_passwd__doc__,
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
30 struct_pwd_type_fields,
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
31 7,
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
32 };
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
33
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
34 PyDoc_STRVAR(pwd__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
35 "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
36 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
37 \n\
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
38 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
39 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
40 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
41 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
42 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
43
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
44
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
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
48 sets(PyObject *v, int i, char* val)
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
49 {
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
50 if (val)
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
51 PyStructSequence_SET_ITEM(v, i, PyString_FromString(val));
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
52 else {
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
53 PyStructSequence_SET_ITEM(v, i, Py_None);
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
54 Py_INCREF(Py_None);
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
55 }
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
56 }
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
57
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
58 static PyObject *
13505
0edeb4efe6db ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
59 mkpwent(struct passwd *p)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 {
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
61 int setIndex = 0;
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
62 PyObject *v = PyStructSequence_New(&StructPwdType);
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
63 if (v == NULL)
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
64 return NULL;
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
65
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
66 #define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
25303
df03fcc66104 Deal with NULL fields in mkpwent.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
67 #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
68
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
69 SETS(setIndex++, p->pw_name);
26550
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
70 #ifdef __VMS
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
71 SETS(setIndex++, "");
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
72 #else
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
73 SETS(setIndex++, p->pw_passwd);
26550
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
74 #endif
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
75 SETI(setIndex++, p->pw_uid);
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
76 SETI(setIndex++, p->pw_gid);
26550
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
77 #ifdef __VMS
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
78 SETS(setIndex++, "");
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
79 #else
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
80 SETS(setIndex++, p->pw_gecos);
26550
b9c912e2c3c0 Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 25303
diff changeset
81 #endif
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
82 SETS(setIndex++, p->pw_dir);
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
83 SETS(setIndex++, p->pw_shell);
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
84
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
85 #undef SETS
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
86 #undef SETI
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
87
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
88 if (PyErr_Occurred()) {
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
89 Py_XDECREF(v);
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
90 return NULL;
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
91 }
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
92
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
93 return v;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
96 PyDoc_STRVAR(pwd_getpwuid__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
97 "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
98 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
99 Return the password database entry for the given numeric user ID.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
100 See pwd.__doc__ for more on password database entries.");
7530
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
101
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
102 static PyObject *
13505
0edeb4efe6db ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
103 pwd_getpwuid(PyObject *self, PyObject *args)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 {
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 int uid;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 struct passwd *p;
22709
3aa4bf7ac31e Remove METH_OLDARGS:
Neal Norwitz <nnorwitz@gmail.com>
parents: 22664
diff changeset
107 if (!PyArg_ParseTuple(args, "i:getpwuid", &uid))
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 if ((p = getpwuid(uid)) == NULL) {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
110 PyErr_SetString(PyExc_KeyError, "getpwuid(): uid not found");
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 return mkpwent(p);
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
116 PyDoc_STRVAR(pwd_getpwnam__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
117 "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
118 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
119 Return the password database entry for the given user name.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
120 See pwd.__doc__ for more on password database entries.");
7530
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
121
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
122 static PyObject *
13505
0edeb4efe6db ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
123 pwd_getpwnam(PyObject *self, PyObject *args)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 513
diff changeset
125 char *name;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 struct passwd *p;
22709
3aa4bf7ac31e Remove METH_OLDARGS:
Neal Norwitz <nnorwitz@gmail.com>
parents: 22664
diff changeset
127 if (!PyArg_ParseTuple(args, "s:getpwnam", &name))
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 513
diff changeset
129 if ((p = getpwnam(name)) == NULL) {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
130 PyErr_SetString(PyExc_KeyError, "getpwnam(): name not found");
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 return mkpwent(p);
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 4917
diff changeset
136 #ifdef HAVE_GETPWENT
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
137 PyDoc_STRVAR(pwd_getpwall__doc__,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
138 "getpwall() -> list_of_entries\n\
7530
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
139 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
140 in arbitrary order.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23048
diff changeset
141 See pwd.__doc__ for more on password database entries.");
7530
891105dac9b4 Doc strings added by Mitch Chapman.
Guido van Rossum <guido@python.org>
parents: 6142
diff changeset
142
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
143 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
144 pwd_getpwall(PyObject *self)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
146 PyObject *d;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 struct passwd *p;
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
148 if ((d = PyList_New(0)) == NULL)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 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
150 #if defined(PYOS_OS2) && defined(PYCC_GCC)
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 22099
diff changeset
151 if ((p = getpwuid(0)) != NULL) {
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 22099
diff changeset
152 #else
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 setpwent();
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 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
155 #endif
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
156 PyObject *v = mkpwent(p);
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
157 if (v == NULL || PyList_Append(d, v) != 0) {
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
158 Py_XDECREF(v);
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
159 Py_DECREF(d);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 }
4917
1bcd4972da7e Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents: 4786
diff changeset
162 Py_DECREF(v);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 }
17025
971ff6b58edb Make sure we close the group and password databases when we are done with
Fred Drake <fdrake@acm.org>
parents: 14375
diff changeset
164 endpwent();
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 return d;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 }
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 4917
diff changeset
167 #endif
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
169 static PyMethodDef pwd_methods[] = {
22709
3aa4bf7ac31e Remove METH_OLDARGS:
Neal Norwitz <nnorwitz@gmail.com>
parents: 22664
diff changeset
170 {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__},
3aa4bf7ac31e Remove METH_OLDARGS:
Neal Norwitz <nnorwitz@gmail.com>
parents: 22664
diff changeset
171 {"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
172 #ifdef HAVE_GETPWENT
22664
f63f2bc8bdba Add missing typecast.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22561
diff changeset
173 {"getpwall", (PyCFunction)pwd_getpwall,
f63f2bc8bdba Add missing typecast.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22561
diff changeset
174 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
175 #endif
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 {NULL, NULL} /* sentinel */
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 };
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
179 PyMODINIT_FUNC
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13505
diff changeset
180 initpwd(void)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 {
23048
c1668a819242 Remove unused variable reported by Walter Dörwald
Neal Norwitz <nnorwitz@gmail.com>
parents: 23024
diff changeset
182 PyObject *m;
23024
4e58a38e3c06 initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents: 22709
diff changeset
183 m = Py_InitModule3("pwd", pwd_methods, pwd__doc__);
4e58a38e3c06 initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents: 22709
diff changeset
184
22099
d0acb3cb011d Patch #523268, #522027: return enhanced tuples.
Martin v. Löwis <martin@v.loewis.de>
parents: 21859
diff changeset
185 PyStructSequence_InitType(&StructPwdType, &struct_pwd_type_desc);
23024
4e58a38e3c06 initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents: 22709
diff changeset
186 Py_INCREF((PyObject *) &StructPwdType);
4e58a38e3c06 initpwd(): Clean up initialization, avoid PyModule_GetDict().
Fred Drake <fdrake@acm.org>
parents: 22709
diff changeset
187 PyModule_AddObject(m, "struct_pwent", (PyObject *) &StructPwdType);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 }