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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
26 static PyObject *NisError;
940
844482b6467a Added error handling and free resources.
Guido van Rossum <guido@python.org>
parents: 939
diff changeset
27
4674
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
75 PyObject *key = PyString_FromStringAndSize(inkey, inkeylen);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
80 PyErr_Clear();
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
81 Py_XDECREF(key);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
85 err = PyDict_SetItem(indata, key, val);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
86 Py_DECREF(key);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
99 PyObject *self;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
126 PyObject *self;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
171 NIS_TRUE = 1,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
172 NIS_NOMORE = 2,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
173 NIS_FALSE = 0,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
174 NIS_NOMAP = -1,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
175 NIS_NODOM = -2,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
176 NIS_NOKEY = -3,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
177 NIS_BADOP = -4,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
178 NIS_BADDB = -5,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
179 NIS_YPERR = -6,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
180 NIS_BADARGS = -7,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
186 mapname map;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
202 XDR *xdrs;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
205 if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
206 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
207 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
214 XDR *xdrs;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
217 if (!xdr_string(xdrs, objp, YPMAXMAP)) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
218 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
219 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
226 XDR *xdrs;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
229 if (!nis_xdr_mapname(xdrs, &objp->map)) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
230 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
231 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
232 if (!xdr_pointer(xdrs, (char **)&objp->next,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
233 sizeof(nismaplist), nis_xdr_ypmaplist))
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
234 {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
235 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
236 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
243 XDR *xdrs;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
246 if (!xdr_enum(xdrs, (enum_t *)objp)) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
247 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
248 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
256 XDR *xdrs;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
259 if (!nis_xdr_ypstat(xdrs, &objp->stat)) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
260 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
261 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
262 if (!xdr_pointer(xdrs, (char **)&objp->maps,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
263 sizeof(nismaplist), nis_xdr_ypmaplist))
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
264 {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
265 return (FALSE);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
266 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
274 domainname *argp;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
279 memset(&res, 0, sizeof(res));
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
280 if (clnt_call(clnt, YPPROC_MAPLIST, nis_xdr_domainname, (caddr_t)argp,
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
281 nis_xdr_ypresp_maplist, (caddr_t)&res, TIMEOUT)
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
282 != RPC_SUCCESS) {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
283 return (NULL);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
284 }
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
296 int mapi = 0;
4676
193950bc9d8f cat and puste errors
Barry Warsaw <barry@python.org>
parents: 4675
diff changeset
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
193950bc9d8f cat and puste errors
Barry Warsaw <barry@python.org>
parents: 4675
diff changeset
299 if ((err = yp_get_default_domain (&dom)) != 0) {
193950bc9d8f cat and puste errors
Barry Warsaw <barry@python.org>
parents: 4675
diff changeset
300 nis_error(err);
193950bc9d8f cat and puste errors
Barry Warsaw <barry@python.org>
parents: 4675
diff changeset
301 return NULL;
193950bc9d8f cat and puste errors
Barry Warsaw <barry@python.org>
parents: 4675
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
305 yp_master (dom, aliases[mapi].map, &server);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
306 mapi++;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
309 PyErr_SetString(NisError, "No NIS master found for any map");
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
310 return NULL;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
334 PyObject *self;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
349 {
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
370 PyObject *m, *d;
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
371 m = Py_InitModule("nis", nis_methods);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
372 d = PyModule_GetDict(m);
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
373 NisError = PyString_FromString("nis.error");
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
374 if (NisError == NULL ||
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
375 PyDict_SetItemString(d, "error", NisError) != 0)
b43ff89fc50d Renamed, and bug fixed:
Barry Warsaw <barry@python.org>
parents: 4619
diff changeset
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 }