yplib.c revision 1.3 1 /* $NetBSD: yplib.c,v 1.3 1999/09/19 19:51:11 christos Exp $ */
2
3 /*
4 * Copyright (c) 1992, 1993 Theo de Raadt <deraadt (at) fsa.ca>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Theo de Raadt.
18 * 4. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
22 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34 /*
35 * This file provides "stubs" for all the YP library functions.
36 * It is not needed unless you pull in things that call YP, and
37 * if you use all the get* files here then the YP stuff should
38 * not get dragged in. But if it does, one can use this.
39 *
40 * This was copied from:
41 * lib/libc/yp/yplib.c
42 * (and then completely gutted! 8^)
43 */
44 #include <sys/cdefs.h>
45
46 #ifdef __weak_alias
47 #define yp_all _yp_all
48 #define yp_bind _yp_bind
49 #define yp_first _yp_first
50 #define yp_get_default_domain _yp_get_default_domain
51 #define yp_maplist _yp_maplist
52 #define yp_master _yp_master
53 #define yp_match _yp_match
54 #define yp_next _yp_next
55 #define yp_order _yp_order
56 #define yp_unbind _yp_unbind
57 #define yperr_string _yperr_string
58 #define ypprot_err _ypprot_err
59 #endif
60
61 #include <sys/types.h>
62
63 #include <errno.h>
64 #include <stdio.h>
65 #include <stdlib.h>
66 #include <string.h>
67 #include <unistd.h>
68
69 #include <rpc/rpc.h>
70 #include <rpc/xdr.h>
71 #include <rpcsvc/yp_prot.h>
72 #include <rpcsvc/ypclnt.h>
73
74 struct dom_binding *_ypbindlist;
75 char _yp_domain[256];
76
77 #define YPLIB_TIMEOUT 10
78 #define YPLIB_RPC_RETRIES 4
79
80 struct timeval _yplib_timeout = { YPLIB_TIMEOUT, 0 };
81 struct timeval _yplib_rpc_timeout = { YPLIB_TIMEOUT / YPLIB_RPC_RETRIES,
82 1000000 * (YPLIB_TIMEOUT % YPLIB_RPC_RETRIES) / YPLIB_RPC_RETRIES };
83 int _yplib_nerrs = 5;
84
85
86 #ifdef __weak_alias
87 __weak_alias(yp_all,_yp_all);
88 __weak_alias(yp_bind, _yp_bind);
89 __weak_alias(yp_first,_yp_first);
90 __weak_alias(yp_get_default_domain, _yp_get_default_domain);
91 __weak_alias(yp_maplist,_yp_maplist);
92 __weak_alias(yp_master,_yp_master);
93 __weak_alias(yp_match,_yp_match);
94 __weak_alias(yp_next,_yp_next);
95 __weak_alias(yp_order,_yp_order);
96 __weak_alias(yp_unbind, _yp_unbind);
97 __weak_alias(yperr_string,_yperr_string);
98 __weak_alias(ypprot_err,_ypprot_err);
99 #endif
100
101 void __yp_unbind __P((struct dom_binding *));
102 int _yp_invalid_domain __P((const char *));
103
104 int
105 _yp_dobind(dom, ypdb)
106 const char *dom;
107 struct dom_binding **ypdb;
108 {
109 return YPERR_YPBIND;
110 }
111
112 void
113 __yp_unbind(ypb)
114 struct dom_binding *ypb;
115 {
116 }
117
118 int
119 yp_bind(dom)
120 const char *dom;
121 {
122 return _yp_dobind(dom, NULL);
123 }
124
125 void
126 yp_unbind(dom)
127 const char *dom;
128 {
129 }
130
131 int
132 yp_get_default_domain(domp)
133 char **domp;
134 {
135 *domp = NULL;
136 if (_yp_domain[0] == '\0')
137 if (getdomainname(_yp_domain, sizeof(_yp_domain)))
138 return YPERR_NODOM;
139 *domp = _yp_domain;
140 return 0;
141 }
142
143 int
144 _yp_check(dom)
145 char **dom;
146 {
147 char *unused;
148
149 if (_yp_domain[0] == '\0')
150 if (yp_get_default_domain(&unused))
151 return 0;
152
153 if (dom)
154 *dom = _yp_domain;
155
156 if (yp_bind(_yp_domain) == 0)
157 return 1;
158 return 0;
159 }
160
161 int
162 _yp_invalid_domain(dom)
163 const char *dom;
164 {
165 if (dom == NULL || *dom == '\0')
166 return 1;
167
168 if (strlen(dom) > YPMAXDOMAIN)
169 return 1;
170
171 if (strchr(dom, '/') != NULL)
172 return 1;
173
174 return 0;
175 }
176
177 int
178 yp_match(indomain, inmap, inkey, inkeylen, outval, outvallen)
179 const char *indomain;
180 const char *inmap;
181 const char *inkey;
182 int inkeylen;
183 char **outval;
184 int *outvallen;
185 {
186 *outval = NULL;
187 *outvallen = 0;
188
189 return YPERR_DOMAIN;
190 }
191
192 int
193 yp_first(indomain, inmap, outkey, outkeylen, outval, outvallen)
194 const char *indomain;
195 const char *inmap;
196 char **outkey;
197 int *outkeylen;
198 char **outval;
199 int *outvallen;
200 {
201
202 *outkey = *outval = NULL;
203 *outkeylen = *outvallen = 0;
204
205 return YPERR_DOMAIN;
206 }
207
208 int
209 yp_next(indomain, inmap, inkey, inkeylen, outkey, outkeylen, outval, outvallen)
210 const char *indomain;
211 const char *inmap;
212 const char *inkey;
213 int inkeylen;
214 char **outkey;
215 int *outkeylen;
216 char **outval;
217 int *outvallen;
218 {
219 *outkey = *outval = NULL;
220 *outkeylen = *outvallen = 0;
221
222 return YPERR_DOMAIN;
223 }
224
225 int
226 yp_all(indomain, inmap, incallback)
227 const char *indomain;
228 const char *inmap;
229 struct ypall_callback *incallback;
230 {
231 return YPERR_DOMAIN;
232 }
233
234 int
235 yp_order(indomain, inmap, outorder)
236 const char *indomain;
237 const char *inmap;
238 int *outorder;
239 {
240 return YPERR_DOMAIN;
241 }
242
243 int
244 yp_master(indomain, inmap, outname)
245 const char *indomain;
246 const char *inmap;
247 char **outname;
248 {
249 return YPERR_DOMAIN;
250 }
251
252 int
253 yp_maplist(indomain, outmaplist)
254 const char *indomain;
255 struct ypmaplist **outmaplist;
256 {
257 return YPERR_DOMAIN;
258 }
259
260 char *
261 yperr_string(incode)
262 int incode;
263 {
264 static char err[80];
265
266 if (incode == 0)
267 return "Success";
268
269 sprintf(err, "YP FAKE error %d\n", incode);
270 return err;
271 }
272
273 int
274 ypprot_err(incode)
275 unsigned int incode;
276 {
277 switch (incode) {
278 case YP_TRUE: /* success */
279 return 0;
280 case YP_FALSE: /* failure */
281 return YPERR_YPBIND;
282 }
283 return YPERR_YPERR;
284 }
285
286