annotate Modules/pwdmodule.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 1bcd4972da7e
children 144db635b49d
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 /***********************************************************
2061
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
3 The Netherlands.
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
8 documentation for any purpose and without fee is hereby granted,
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
10 both that copyright notice and this permission notice appear in
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
15 permission.
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2297
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1351
diff changeset
32 /* UNIX password file access module */
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
34 #include "Python.h"
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #include <sys/types.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #include <pwd.h>
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
39 static PyObject *
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
40 mkpwent(p)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 struct passwd *p;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 {
4786
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
43 return Py_BuildValue(
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
44 "(ssllsss)",
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
45 p->pw_name,
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
46 p->pw_passwd,
2297
9717f6a8f5fa patches for NeXT weirdness
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
47 #if defined(NeXT) && defined(_POSIX_SOURCE) && defined(__LITTLE_ENDIAN__)
9717f6a8f5fa patches for NeXT weirdness
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
48 /* Correct a bug present on Intel machines in NextStep 3.2 and 3.3;
9717f6a8f5fa patches for NeXT weirdness
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
49 for later versions you may have to remove this */
4786
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
50 (long)p->pw_short_pad1, /* ugh-NeXT broke the padding */
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
51 (long)p->pw_short_pad2,
2297
9717f6a8f5fa patches for NeXT weirdness
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
52 #else
4786
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
53 (long)p->pw_uid,
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
54 (long)p->pw_gid,
2297
9717f6a8f5fa patches for NeXT weirdness
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
55 #endif
4786
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
56 p->pw_gecos,
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
57 p->pw_dir,
0948f39ee960 Minor formatting changes.
Barry Warsaw <barry@python.org>
parents: 4684
diff changeset
58 p->pw_shell);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
61 static PyObject *
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
62 pwd_getpwuid(self, args)
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
63 PyObject *self;
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
64 PyObject *args;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 {
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 int uid;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 struct passwd *p;
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
68 if (!PyArg_Parse(args, "i", &uid))
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 if ((p = getpwuid(uid)) == NULL) {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
71 PyErr_SetString(PyExc_KeyError, "getpwuid(): uid not found");
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 return mkpwent(p);
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
77 static PyObject *
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
78 pwd_getpwnam(self, args)
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
79 PyObject *self;
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
80 PyObject *args;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 513
diff changeset
82 char *name;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 struct passwd *p;
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
84 if (!PyArg_Parse(args, "s", &name))
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 513
diff changeset
86 if ((p = getpwnam(name)) == NULL) {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
87 PyErr_SetString(PyExc_KeyError, "getpwnam(): name not found");
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 return mkpwent(p);
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
93 static PyObject *
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
94 pwd_getpwall(self, args)
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
95 PyObject *self;
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
96 PyObject *args;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
98 PyObject *d;
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 struct passwd *p;
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
100 if (!PyArg_NoArgs(args))
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 return NULL;
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
102 if ((d = PyList_New(0)) == NULL)
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 setpwent();
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 while ((p = getpwent()) != NULL) {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
106 PyObject *v = mkpwent(p);
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
107 if (v == NULL || PyList_Append(d, v) != 0) {
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
108 Py_XDECREF(v);
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
109 Py_DECREF(d);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 return NULL;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 }
4917
1bcd4972da7e Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents: 4786
diff changeset
112 Py_DECREF(v);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 return d;
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 }
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
117 static PyMethodDef pwd_methods[] = {
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 {"getpwuid", pwd_getpwuid},
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 {"getpwnam", pwd_getpwnam},
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 {"getpwall", pwd_getpwall},
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 {NULL, NULL} /* sentinel */
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 };
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 void
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 initpwd()
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 {
4684
d800841b57a8 Renamed.
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
127 Py_InitModule("pwd", pwd_methods);
201
310f8c924073 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 }