Mercurial > cpython-lru_cache-weakref
annotate Modules/nismodule.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 | 2c29b8982643 |
| rev | line source |
|---|---|
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 Written by: |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 Fred Gansevles <Fred.Gansevles@cs.utwente.nl> |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 Vakgroep Spa, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 Faculteit der Informatica, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 Universiteit Twente, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 Enschede, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 the Netherlands. |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 ******************************************************************/ |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 /* NIS module implementation */ |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
| 4674 | 13 #include "Python.h" |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 #include <sys/time.h> |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 #include <sys/types.h> |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 #include <rpc/rpc.h> |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 #include <rpcsvc/yp_prot.h> |
|
3975
b76fe67eed44
Rearrange include headers (needed on some platforms).
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
19 #include <rpcsvc/ypclnt.h> |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 |
|
4619
c3ca006554d4
Added ``extern int get_default_domain();'' for SGI, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents:
3975
diff
changeset
|
21 #ifdef __sgi |
|
c3ca006554d4
Added ``extern int get_default_domain();'' for SGI, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents:
3975
diff
changeset
|
22 /* This is missing from rpcsvc/ypclnt.h */ |
|
c3ca006554d4
Added ``extern int get_default_domain();'' for SGI, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents:
3975
diff
changeset
|
23 extern int yp_get_default_domain(); |
|
c3ca006554d4
Added ``extern int get_default_domain();'' for SGI, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents:
3975
diff
changeset
|
24 #endif |
|
c3ca006554d4
Added ``extern int get_default_domain();'' for SGI, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents:
3975
diff
changeset
|
25 |
| 4674 | 26 static PyObject *NisError; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
27 |
| 4674 | 28 static PyObject * |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
29 nis_error (err) |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
30 int err; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
31 { |
| 4674 | 32 PyErr_SetString(NisError, yperr_string(err)); |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
33 return NULL; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
34 } |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
35 |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 static struct nis_map { |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 char *alias; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 char *map; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 } aliases [] = { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
40 {"passwd", "passwd.byname"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
41 {"group", "group.byname"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
42 {"networks", "networks.byaddr"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
43 {"hosts", "hosts.byname"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
44 {"protocols", "protocols.bynumber"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
45 {"services", "services.byname"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
46 {"aliases", "mail.aliases"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
47 {"ethers", "ethers.byname"}, |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
48 {0L, 0L} |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 static char * |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 nis_mapname (map) |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
53 char *map; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
55 int i; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 for (i=0; aliases[i].alias != 0L; i++) |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 if (!strcmp (aliases[i].alias, map)) |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 map = aliases[i].map; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 return map; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 |
| 4674 | 63 typedef int (*foreachfunc) Py_PROTO((int, char *, int, char *, int, char *)); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
64 |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 static int |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
66 nis_foreach (instatus, inkey, inkeylen, inval, invallen, indata) |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
67 int instatus; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
68 char *inkey; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
69 int inkeylen; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
70 char *inval; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
71 int invallen; |
| 4674 | 72 PyObject *indata; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 { |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 if (instatus == YP_TRUE) { |
| 4674 | 75 PyObject *key = PyString_FromStringAndSize(inkey, inkeylen); |
| 76 PyObject *val = PyString_FromStringAndSize(inval, invallen); | |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
77 int err; |
|
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
78 if (key == NULL || val == NULL) { |
|
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
79 /* XXX error -- don't know how to handle */ |
| 4674 | 80 PyErr_Clear(); |
| 81 Py_XDECREF(key); | |
| 82 Py_XDECREF(val); | |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
83 return 1; |
|
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
84 } |
| 4674 | 85 err = PyDict_SetItem(indata, key, val); |
| 86 Py_DECREF(key); | |
| 87 Py_DECREF(val); | |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
88 if (err != 0) { |
| 4674 | 89 PyErr_Clear(); |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
90 return 1; |
|
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
91 } |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 return 0; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 return 1; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
| 4674 | 97 static PyObject * |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 nis_match (self, args) |
| 4674 | 99 PyObject *self; |
| 100 PyObject *args; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
102 char *match; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
103 char *domain; |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
104 int keylen, len; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
105 char *key, *map; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
106 int err; |
| 4674 | 107 PyObject *res; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 |
| 4674 | 109 if (!PyArg_Parse(args, "(s#s)", &key, &keylen, &map)) |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 return NULL; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
111 if ((err = yp_get_default_domain(&domain)) != 0) |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
112 return nis_error(err); |
| 4674 | 113 Py_BEGIN_ALLOW_THREADS |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
114 map = nis_mapname (map); |
|
1393
7d6a2d950f13
* nismodule.c: database keys and values can contain null bytes. be more
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
115 err = yp_match (domain, map, key, keylen, &match, &len); |
| 4674 | 116 Py_END_ALLOW_THREADS |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
117 if (err != 0) |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
118 return nis_error(err); |
| 4674 | 119 res = PyString_FromStringAndSize (match, len); |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
120 free (match); |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
121 return res; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 |
| 4674 | 124 static PyObject * |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 nis_cat (self, args) |
| 4674 | 126 PyObject *self; |
| 127 PyObject *args; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
129 char *domain; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
130 char *map; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
131 struct ypall_callback cb; |
| 4674 | 132 PyObject *cat; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
133 int err; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 |
| 4674 | 135 if (!PyArg_Parse(args, "s", &map)) |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 return NULL; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
137 if ((err = yp_get_default_domain(&domain)) != 0) |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
138 return nis_error(err); |
| 4674 | 139 cat = PyDict_New (); |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 if (cat == NULL) |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 return NULL; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
142 cb.foreach = (foreachfunc)nis_foreach; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 cb.data = (char *)cat; |
| 4674 | 144 Py_BEGIN_ALLOW_THREADS |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
145 map = nis_mapname (map); |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
146 err = yp_all (domain, map, &cb); |
| 4674 | 147 Py_END_ALLOW_THREADS |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
148 if (err != 0) { |
| 4674 | 149 Py_DECREF(cat); |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
150 return nis_error(err); |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
151 } |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 return cat; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
155 /* These should be u_long on Sun h/w but not on 64-bit h/w. |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
156 This is not portable to machines with 16-bit ints and no prototypes */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
157 #ifndef YPPROC_MAPLIST |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
158 #define YPPROC_MAPLIST 11 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
159 #endif |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
160 #ifndef YPPROG |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
161 #define YPPROG 100004 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
162 #endif |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
163 #ifndef YPVERS |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
164 #define YPVERS 2 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1393
diff
changeset
|
165 #endif |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 typedef char *domainname; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 typedef char *mapname; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 enum nisstat { |
| 4674 | 171 NIS_TRUE = 1, |
| 172 NIS_NOMORE = 2, | |
| 173 NIS_FALSE = 0, | |
| 174 NIS_NOMAP = -1, | |
| 175 NIS_NODOM = -2, | |
| 176 NIS_NOKEY = -3, | |
| 177 NIS_BADOP = -4, | |
| 178 NIS_BADDB = -5, | |
| 179 NIS_YPERR = -6, | |
| 180 NIS_BADARGS = -7, | |
| 181 NIS_VERS = -8 | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 typedef enum nisstat nisstat; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 struct nismaplist { |
| 4674 | 186 mapname map; |
| 187 struct nismaplist *next; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 typedef struct nismaplist nismaplist; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 struct nisresp_maplist { |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 nisstat stat; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 nismaplist *maps; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 typedef struct nisresp_maplist nisresp_maplist; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 static struct timeval TIMEOUT = { 25, 0 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 bool_t |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 nis_xdr_domainname(xdrs, objp) |
| 4674 | 202 XDR *xdrs; |
| 203 domainname *objp; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 { |
| 4674 | 205 if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) { |
| 206 return (FALSE); | |
| 207 } | |
| 208 return (TRUE); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 bool_t |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 nis_xdr_mapname(xdrs, objp) |
| 4674 | 214 XDR *xdrs; |
| 215 mapname *objp; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
216 { |
| 4674 | 217 if (!xdr_string(xdrs, objp, YPMAXMAP)) { |
| 218 return (FALSE); | |
| 219 } | |
| 220 return (TRUE); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 bool_t |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 nis_xdr_ypmaplist(xdrs, objp) |
| 4674 | 226 XDR *xdrs; |
| 227 nismaplist *objp; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 { |
| 4674 | 229 if (!nis_xdr_mapname(xdrs, &objp->map)) { |
| 230 return (FALSE); | |
| 231 } | |
| 232 if (!xdr_pointer(xdrs, (char **)&objp->next, | |
| 233 sizeof(nismaplist), nis_xdr_ypmaplist)) | |
| 234 { | |
| 235 return (FALSE); | |
| 236 } | |
| 237 return (TRUE); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 bool_t |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 nis_xdr_ypstat(xdrs, objp) |
| 4674 | 243 XDR *xdrs; |
| 244 nisstat *objp; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 { |
| 4674 | 246 if (!xdr_enum(xdrs, (enum_t *)objp)) { |
| 247 return (FALSE); | |
| 248 } | |
| 249 return (TRUE); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
251 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
253 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 bool_t |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 nis_xdr_ypresp_maplist(xdrs, objp) |
| 4674 | 256 XDR *xdrs; |
| 257 nisresp_maplist *objp; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 { |
| 4674 | 259 if (!nis_xdr_ypstat(xdrs, &objp->stat)) { |
| 260 return (FALSE); | |
| 261 } | |
| 262 if (!xdr_pointer(xdrs, (char **)&objp->maps, | |
| 263 sizeof(nismaplist), nis_xdr_ypmaplist)) | |
| 264 { | |
| 265 return (FALSE); | |
| 266 } | |
| 267 return (TRUE); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 nisresp_maplist * |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
273 nisproc_maplist_2(argp, clnt) |
| 4674 | 274 domainname *argp; |
| 275 CLIENT *clnt; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 { |
| 4674 | 277 static nisresp_maplist res; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 |
| 4674 | 279 memset(&res, 0, sizeof(res)); |
| 280 if (clnt_call(clnt, YPPROC_MAPLIST, nis_xdr_domainname, (caddr_t)argp, | |
| 281 nis_xdr_ypresp_maplist, (caddr_t)&res, TIMEOUT) | |
| 282 != RPC_SUCCESS) { | |
| 283 return (NULL); | |
| 284 } | |
| 285 return (&res); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 static |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 nismaplist * |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 nis_maplist () |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
292 nisresp_maplist *list; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
293 char *dom; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
294 CLIENT *cl, *clnt_create(); |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
295 char *server = NULL; |
| 4674 | 296 int mapi = 0; |
| 4676 | 297 int err; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 |
| 4676 | 299 if ((err = yp_get_default_domain (&dom)) != 0) { |
| 300 nis_error(err); | |
| 301 return NULL; | |
| 302 } | |
|
4675
0c01a23c7dcd
nis_maplist(): Use check of yp_get_default_domain() return value
Barry Warsaw <barry@python.org>
parents:
4674
diff
changeset
|
303 |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
304 while (!server && aliases[mapi].map != 0L) { |
| 4674 | 305 yp_master (dom, aliases[mapi].map, &server); |
| 306 mapi++; | |
| 307 } | |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
308 if (!server) { |
| 4674 | 309 PyErr_SetString(NisError, "No NIS master found for any map"); |
| 310 return NULL; | |
| 311 } | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 cl = clnt_create(server, YPPROG, YPVERS, "tcp"); |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
313 if (cl == NULL) { |
| 4674 | 314 PyErr_SetString(NisError, clnt_spcreateerror(server)); |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
315 goto finally; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
316 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 list = nisproc_maplist_2 (&dom, cl); |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
318 clnt_destroy(cl); |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 if (list == NULL) |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
320 goto finally; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 if (list->stat != NIS_TRUE) |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
322 goto finally; |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
323 |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
324 PyMem_DEL(server); |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 return list->maps; |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
326 |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
327 finally: |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
328 PyMem_DEL(server); |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
329 return NULL; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
331 |
| 4674 | 332 static PyObject * |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 nis_maps (self, args) |
| 4674 | 334 PyObject *self; |
| 335 PyObject *args; | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
336 { |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
337 nismaplist *maps; |
| 4674 | 338 PyObject *list; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
339 |
|
4675
0c01a23c7dcd
nis_maplist(): Use check of yp_get_default_domain() return value
Barry Warsaw <barry@python.org>
parents:
4674
diff
changeset
|
340 if (!PyArg_NoArgs(args)) |
|
0c01a23c7dcd
nis_maplist(): Use check of yp_get_default_domain() return value
Barry Warsaw <barry@python.org>
parents:
4674
diff
changeset
|
341 return NULL; |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
342 if ((maps = nis_maplist ()) == NULL) |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 return NULL; |
| 4674 | 344 if ((list = PyList_New(0)) == NULL) |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 return NULL; |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
346 for (maps = maps->next; maps; maps = maps->next) { |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
347 PyObject *str = PyString_FromString(maps->map); |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
348 if (!str || PyList_Append(list, str) < 0) |
| 4674 | 349 { |
| 350 Py_DECREF(list); | |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
351 list = NULL; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
352 break; |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
353 } |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4676
diff
changeset
|
354 Py_DECREF(str); |
|
940
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
355 } |
|
844482b6467a
Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents:
939
diff
changeset
|
356 /* XXX Shouldn't we free the list of maps now? */ |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 return list; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
358 } |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 |
| 4674 | 360 static PyMethodDef nis_methods[] = { |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 {"match", nis_match}, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
362 {"cat", nis_cat}, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 {"maps", nis_maps}, |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 {NULL, NULL} /* Sentinel */ |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 }; |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
366 |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 void |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 initnis () |
|
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 { |
| 4674 | 370 PyObject *m, *d; |
| 371 m = Py_InitModule("nis", nis_methods); | |
| 372 d = PyModule_GetDict(m); | |
| 373 NisError = PyString_FromString("nis.error"); | |
| 374 if (NisError == NULL || | |
| 375 PyDict_SetItemString(d, "error", NisError) != 0) | |
| 376 Py_FatalError("Cannot define nis.error"); | |
|
939
7243a906937c
NIS interface by Fred Gansevles <Fred.Gansevles@cs.utwente.nl>.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
377 } |
