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