xref: /freebsd/include/rpcsvc/yp.x (revision ca6a6373bdaed010d6cbfb27f7249ae96009409d)
1 /* @(#)yp.x	2.1 88/08/01 4.0 RPCSRC */
2 
3 /*-
4  * Copyright (c) 2010, Oracle America, Inc.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  *     * Redistributions of source code must retain the above copyright
11  *       notice, this list of conditions and the following disclaimer.
12  *     * Redistributions in binary form must reproduce the above
13  *       copyright notice, this list of conditions and the following
14  *       disclaimer in the documentation and/or other materials
15  *       provided with the distribution.
16  *     * Neither the name of the "Oracle America, Inc." nor the names of its
17  *       contributors may be used to endorse or promote products derived
18  *       from this software without specific prior written permission.
19  *
20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 /*
35  * Protocol description file for the Yellow Pages Service
36  */
37 
38 #ifndef RPC_HDR
39 %#include <sys/cdefs.h>
40 #endif
41 
42 const YPMAXRECORD = 16777216;
43 const YPMAXDOMAIN = 64;
44 const YPMAXMAP = 64;
45 const YPMAXPEER = 64;
46 
47 
48 enum ypstat {
49 	YP_TRUE		=  1,
50 	YP_NOMORE	=  2,
51 	YP_FALSE	=  0,
52 	YP_NOMAP	= -1,
53 	YP_NODOM	= -2,
54 	YP_NOKEY	= -3,
55 	YP_BADOP	= -4,
56 	YP_BADDB	= -5,
57 	YP_YPERR	= -6,
58 	YP_BADARGS	= -7,
59 	YP_VERS		= -8
60 };
61 
62 
63 enum ypxfrstat {
64 	YPXFR_SUCC	=  1,
65 	YPXFR_AGE	=  2,
66 	YPXFR_NOMAP	= -1,
67 	YPXFR_NODOM	= -2,
68 	YPXFR_RSRC	= -3,
69 	YPXFR_RPC	= -4,
70 	YPXFR_MADDR	= -5,
71 	YPXFR_YPERR	= -6,
72 	YPXFR_BADARGS	= -7,
73 	YPXFR_DBM	= -8,
74 	YPXFR_FILE	= -9,
75 	YPXFR_SKEW	= -10,
76 	YPXFR_CLEAR	= -11,
77 	YPXFR_FORCE	= -12,
78 	YPXFR_XFRERR	= -13,
79 	YPXFR_REFUSED	= -14
80 };
81 
82 
83 typedef string domainname<YPMAXDOMAIN>;
84 typedef string mapname<YPMAXMAP>;
85 typedef string peername<YPMAXPEER>;
86 typedef opaque keydat<YPMAXRECORD>;
87 typedef opaque valdat<YPMAXRECORD>;
88 
89 
90 struct ypmap_parms {
91 	domainname domain;
92 	mapname map;
93 	unsigned int ordernum;
94 	peername peer;
95 };
96 
97 struct ypreq_key {
98 	domainname domain;
99 	mapname map;
100 	keydat key;
101 };
102 
103 struct ypreq_nokey {
104 	domainname domain;
105 	mapname map;
106 };
107 
108 struct ypreq_xfr {
109 	ypmap_parms map_parms;
110 	unsigned int transid;
111 	unsigned int prog;
112 	unsigned int port;
113 };
114 
115 
116 struct ypresp_val {
117 	ypstat stat;
118 	valdat val;
119 };
120 
121 struct ypresp_key_val {
122 	ypstat stat;
123 #ifdef STUPID_SUN_BUG /* These are backwards */
124 	keydat key;
125 	valdat val;
126 #else
127 	valdat val;
128 	keydat key;
129 #endif
130 };
131 
132 
133 struct ypresp_master {
134 	ypstat stat;
135 	peername peer;
136 };
137 
138 struct ypresp_order {
139 	ypstat stat;
140 	unsigned int ordernum;
141 };
142 
143 union ypresp_all switch (bool more) {
144 case TRUE:
145 	ypresp_key_val val;
146 case FALSE:
147 	void;
148 };
149 
150 struct ypresp_xfr {
151 	unsigned int transid;
152 	ypxfrstat xfrstat;
153 };
154 
155 struct ypmaplist {
156 	mapname map;
157 	ypmaplist *next;
158 };
159 
160 struct ypresp_maplist {
161 	ypstat stat;
162 	ypmaplist *maps;
163 };
164 
165 enum yppush_status {
166 	YPPUSH_SUCC	=  1,	/* Success */
167 	YPPUSH_AGE 	=  2,	/* Master's version not newer */
168 	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
169 	YPPUSH_NODOM	= -2,	/* Domain not supported */
170 	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
171 	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
172 	YPPUSH_MADDR 	= -5,	/* Can't get master address */
173 	YPPUSH_YPERR	= -6,	/* YP server/map db error */
174 	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
175 	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
176 	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
177 	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
178 	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
179 	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
180 	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
181 	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
182 };
183 
184 struct yppushresp_xfr {
185 	unsigned transid;
186 	yppush_status status;
187 };
188 
189 /*
190  * Response structure and overall result status codes.  Success and failure
191  * represent two separate response message types.
192  */
193 
194 enum ypbind_resptype {
195 	YPBIND_SUCC_VAL = 1,
196 	YPBIND_FAIL_VAL = 2
197 };
198 
199 struct ypbind_binding {
200     opaque ypbind_binding_addr[4]; /* In network order */
201     opaque ypbind_binding_port[2]; /* In network order */
202 };
203 
204 union ypbind_resp switch (ypbind_resptype ypbind_status) {
205 case YPBIND_FAIL_VAL:
206         unsigned ypbind_error;
207 case YPBIND_SUCC_VAL:
208         ypbind_binding ypbind_bindinfo;
209 };
210 
211 /* Detailed failure reason codes for response field ypbind_error*/
212 
213 const YPBIND_ERR_ERR    = 1;	/* Internal error */
214 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
215 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
216 
217 
218 /*
219  * Request data structure for ypbind "Set domain" procedure.
220  */
221 struct ypbind_setdom {
222 	domainname ypsetdom_domain;
223 	ypbind_binding ypsetdom_binding;
224 	unsigned ypsetdom_vers;
225 };
226 
227 
228 /*
229  * NIS v1 support for backwards compatibility
230  */
231 enum ypreqtype {
232 	YPREQ_KEY = 1,
233 	YPREQ_NOKEY = 2,
234 	YPREQ_MAP_PARMS = 3
235 };
236 
237 enum ypresptype {
238 	YPRESP_VAL = 1,
239 	YPRESP_KEY_VAL = 2,
240 	YPRESP_MAP_PARMS = 3
241 };
242 
243 union yprequest switch (ypreqtype yp_reqtype) {
244 case YPREQ_KEY:
245 	ypreq_key yp_req_keytype;
246 case YPREQ_NOKEY:
247 	ypreq_nokey yp_req_nokeytype;
248 case YPREQ_MAP_PARMS:
249 	ypmap_parms yp_req_map_parmstype;
250 };
251 
252 union ypresponse switch (ypresptype yp_resptype) {
253 case YPRESP_VAL:
254 	ypresp_val yp_resp_valtype;
255 case YPRESP_KEY_VAL:
256 	ypresp_key_val yp_resp_key_valtype;
257 case YPRESP_MAP_PARMS:
258 	ypmap_parms yp_resp_map_parmstype;
259 };
260 
261 #if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
262 /*
263  * YP access protocol
264  */
265 program YPPROG {
266 /*
267  * NIS v1 support for backwards compatibility
268  */
269 	version YPOLDVERS {
270 		void
271 		YPOLDPROC_NULL(void) = 0;
272 
273 		bool
274 		YPOLDPROC_DOMAIN(domainname) = 1;
275 
276 		bool
277 		YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
278 
279 		ypresponse
280 		YPOLDPROC_MATCH(yprequest) = 3;
281 
282 		ypresponse
283 		YPOLDPROC_FIRST(yprequest) = 4;
284 
285 		ypresponse
286 		YPOLDPROC_NEXT(yprequest) = 5;
287 
288 		ypresponse
289 		YPOLDPROC_POLL(yprequest) = 6;
290 
291 		ypresponse
292 		YPOLDPROC_PUSH(yprequest) = 7;
293 
294 		ypresponse
295 		YPOLDPROC_PULL(yprequest) = 8;
296 
297 		ypresponse
298 		YPOLDPROC_GET(yprequest) = 9;
299 	} = 1;
300 
301 	version YPVERS {
302 		void
303 		YPPROC_NULL(void) = 0;
304 
305 		bool
306 		YPPROC_DOMAIN(domainname) = 1;
307 
308 		bool
309 		YPPROC_DOMAIN_NONACK(domainname) = 2;
310 
311 		ypresp_val
312 		YPPROC_MATCH(ypreq_key) = 3;
313 
314 		ypresp_key_val
315 #ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
316 		YPPROC_FIRST(ypreq_key) = 4;
317 #else
318 		YPPROC_FIRST(ypreq_nokey) = 4;
319 #endif
320 		ypresp_key_val
321 		YPPROC_NEXT(ypreq_key) = 5;
322 
323 		ypresp_xfr
324 		YPPROC_XFR(ypreq_xfr) = 6;
325 
326 		void
327 		YPPROC_CLEAR(void) = 7;
328 
329 		ypresp_all
330 		YPPROC_ALL(ypreq_nokey) = 8;
331 
332 		ypresp_master
333 		YPPROC_MASTER(ypreq_nokey) = 9;
334 
335 		ypresp_order
336 		YPPROC_ORDER(ypreq_nokey) = 10;
337 
338 		ypresp_maplist
339 		YPPROC_MAPLIST(domainname) = 11;
340 	} = 2;
341 } = 100004;
342 #endif
343 #if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
344 /*
345  * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
346  */
347 program YPPUSH_XFRRESPPROG {
348 	version YPPUSH_XFRRESPVERS {
349 		void
350 		YPPUSHPROC_NULL(void) = 0;
351 #ifdef STUPID_SUN_BUG /* argument and return value are backwards */
352 		yppushresp_xfr
353 		YPPUSHPROC_XFRRESP(void) = 1;
354 #else
355 		void
356 		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
357 #endif
358 	} = 1;
359 } = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
360 #endif
361 #if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
362 /*
363  * YP binding protocol
364  */
365 program YPBINDPROG {
366 	version YPBINDVERS {
367 		void
368 		YPBINDPROC_NULL(void) = 0;
369 
370 		ypbind_resp
371 		YPBINDPROC_DOMAIN(domainname) = 1;
372 
373 		void
374 		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
375 	} = 2;
376 } = 100007;
377 
378 #endif
379