xref: /freebsd/include/rpcsvc/yp.x (revision 1b56bb4ca7afcf0f76feac28ddb97f5b78923913)
1 /*
2  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3  * unrestricted use provided that this legend is included on all tape
4  * media and as a part of the software program in whole or part.  Users
5  * may copy or modify Sun RPC without charge, but are not authorized
6  * to license or distribute it to anyone else except as part of a product or
7  * program developed by the user.
8  *
9  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12  *
13  * Sun RPC is provided with no support and without any obligation on the
14  * part of Sun Microsystems, Inc. to assist in its use, correction,
15  * modification or enhancement.
16  *
17  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19  * OR ANY PART THEREOF.
20  *
21  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22  * or profits or other special, indirect and consequential damages, even if
23  * Sun has been advised of the possibility of such damages.
24  *
25  * Sun Microsystems, Inc.
26  * 2550 Garcia Avenue
27  * Mountain View, California  94043
28  */
29 
30 /*
31  * Protocol description file for the Yellow Pages Service
32  */
33 
34 #ifndef RPC_HDR
35 %#ifndef lint
36 %/*static char sccsid[] = "from: @(#)yp.x	2.1 88/08/01 4.0 RPCSRC";*/
37 %static char rcsid[] = "$Id: yp.x,v 1.3 1995/12/07 03:50:27 wpaul Exp wpaul $";
38 %#endif /* not lint */
39 #endif
40 
41 const YPMAXRECORD = 1024;
42 const YPMAXDOMAIN = 64;
43 const YPMAXMAP = 64;
44 const YPMAXPEER = 64;
45 
46 
47 enum ypstat {
48 	YP_TRUE		=  1,
49 	YP_NOMORE	=  2,
50 	YP_FALSE	=  0,
51 	YP_NOMAP	= -1,
52 	YP_NODOM	= -2,
53 	YP_NOKEY	= -3,
54 	YP_BADOP	= -4,
55 	YP_BADDB	= -5,
56 	YP_YPERR	= -6,
57 	YP_BADARGS	= -7,
58 	YP_VERS		= -8
59 };
60 
61 
62 enum ypxfrstat {
63 	YPXFR_SUCC	=  1,
64 	YPXFR_AGE	=  2,
65 	YPXFR_NOMAP	= -1,
66 	YPXFR_NODOM	= -2,
67 	YPXFR_RSRC	= -3,
68 	YPXFR_RPC	= -4,
69 	YPXFR_MADDR	= -5,
70 	YPXFR_YPERR	= -6,
71 	YPXFR_BADARGS	= -7,
72 	YPXFR_DBM	= -8,
73 	YPXFR_FILE	= -9,
74 	YPXFR_SKEW	= -10,
75 	YPXFR_CLEAR	= -11,
76 	YPXFR_FORCE	= -12,
77 	YPXFR_XFRERR	= -13,
78 	YPXFR_REFUSED	= -14
79 };
80 
81 
82 typedef string domainname<YPMAXDOMAIN>;
83 typedef string mapname<YPMAXMAP>;
84 typedef string peername<YPMAXPEER>;
85 typedef opaque keydat<YPMAXRECORD>;
86 typedef opaque valdat<YPMAXRECORD>;
87 
88 
89 struct ypmap_parms {
90 	domainname domain;
91 	mapname map;
92 	unsigned int ordernum;
93 	peername peer;
94 };
95 
96 struct ypreq_key {
97 	domainname domain;
98 	mapname map;
99 	keydat key;
100 };
101 
102 struct ypreq_nokey {
103 	domainname domain;
104 	mapname map;
105 };
106 
107 struct ypreq_xfr {
108 	ypmap_parms map_parms;
109 	unsigned int transid;
110 	unsigned int prog;
111 	unsigned int port;
112 };
113 
114 
115 struct ypresp_val {
116 	ypstat stat;
117 	valdat val;
118 };
119 
120 struct ypresp_key_val {
121 	ypstat stat;
122 #ifdef STUPID_SUN_BUG /* These are backwards */
123 	keydat key;
124 	valdat val;
125 #else
126 	valdat val;
127 	keydat key;
128 #endif
129 };
130 
131 
132 struct ypresp_master {
133 	ypstat stat;
134 	peername peer;
135 };
136 
137 struct ypresp_order {
138 	ypstat stat;
139 	unsigned int ordernum;
140 };
141 
142 union ypresp_all switch (bool more) {
143 case TRUE:
144 	ypresp_key_val val;
145 case FALSE:
146 	void;
147 };
148 
149 struct ypresp_xfr {
150 	unsigned int transid;
151 	ypxfrstat xfrstat;
152 };
153 
154 struct ypmaplist {
155 	mapname map;
156 	ypmaplist *next;
157 };
158 
159 struct ypresp_maplist {
160 	ypstat stat;
161 	ypmaplist *maps;
162 };
163 
164 enum yppush_status {
165 	YPPUSH_SUCC	=  1,	/* Success */
166 	YPPUSH_AGE 	=  2,	/* Master's version not newer */
167 	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
168 	YPPUSH_NODOM	= -2,	/* Domain not supported */
169 	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
170 	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
171 	YPPUSH_MADDR 	= -5,	/* Can't get master address */
172 	YPPUSH_YPERR	= -6,	/* YP server/map db error */
173 	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
174 	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
175 	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
176 	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
177 	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
178 	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
179 	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
180 	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
181 };
182 
183 struct yppushresp_xfr {
184 	unsigned transid;
185 	yppush_status status;
186 };
187 
188 /*
189  * Response structure and overall result status codes.  Success and failure
190  * represent two separate response message types.
191  */
192 
193 enum ypbind_resptype {
194 	YPBIND_SUCC_VAL = 1,
195 	YPBIND_FAIL_VAL = 2
196 };
197 
198 struct ypbind_binding {
199     opaque ypbind_binding_addr[4]; /* In network order */
200     opaque ypbind_binding_port[2]; /* In network order */
201 };
202 
203 union ypbind_resp switch (ypbind_resptype ypbind_status) {
204 case YPBIND_FAIL_VAL:
205         unsigned ypbind_error;
206 case YPBIND_SUCC_VAL:
207         ypbind_binding ypbind_bindinfo;
208 };
209 
210 /* Detailed failure reason codes for response field ypbind_error*/
211 
212 const YPBIND_ERR_ERR    = 1;	/* Internal error */
213 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
214 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
215 
216 
217 /*
218  * Request data structure for ypbind "Set domain" procedure.
219  */
220 struct ypbind_setdom {
221 	domainname ypsetdom_domain;
222 	ypbind_binding ypsetdom_binding;
223 	unsigned ypsetdom_vers;
224 };
225 
226 
227 /*
228  * NIS v1 support for backwards compatibility
229  */
230 enum ypreqtype {
231 	YPREQ_KEY = 1,
232 	YPREQ_NOKEY = 2,
233 	YPREQ_MAP_PARMS = 3
234 };
235 
236 enum ypresptype {
237 	YPRESP_VAL = 1,
238 	YPRESP_KEY_VAL = 2,
239 	YPRESP_MAP_PARMS = 3
240 };
241 
242 union yprequest switch (ypreqtype yp_reqtype) {
243 case YPREQ_KEY:
244 	ypreq_key yp_req_keytype;
245 case YPREQ_NOKEY:
246 	ypreq_nokey yp_req_nokeytype;
247 case YPREQ_MAP_PARMS:
248 	ypmap_parms yp_req_map_parmstype;
249 };
250 
251 union ypresponse switch (ypresptype yp_resptype) {
252 case YPRESP_VAL:
253 	ypresp_val yp_resp_valtype;
254 case YPRESP_KEY_VAL:
255 	ypresp_key_val yp_resp_key_valtype;
256 case YPRESP_MAP_PARMS:
257 	ypmap_parms yp_resp_map_parmstype;
258 };
259 
260 #if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
261 /*
262  * YP access protocol
263  */
264 program YPPROG {
265 /*
266  * NIS v1 support for backwards compatibility
267  */
268 	version YPOLDVERS {
269 		void
270 		YPOLDPROC_NULL(void) = 0;
271 
272 		bool
273 		YPOLDPROC_DOMAIN(domainname) = 1;
274 
275 		bool
276 		YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
277 
278 		ypresponse
279 		YPOLDPROC_MATCH(yprequest) = 3;
280 
281 		ypresponse
282 		YPOLDPROC_FIRST(yprequest) = 4;
283 
284 		ypresponse
285 		YPOLDPROC_NEXT(yprequest) = 5;
286 
287 		ypresponse
288 		YPOLDPROC_POLL(yprequest) = 6;
289 
290 		ypresponse
291 		YPOLDPROC_PUSH(yprequest) = 7;
292 
293 		ypresponse
294 		YPOLDPROC_PULL(yprequest) = 8;
295 
296 		ypresponse
297 		YPOLDPROC_GET(yprequest) = 9;
298 	} = 1;
299 
300 	version YPVERS {
301 		void
302 		YPPROC_NULL(void) = 0;
303 
304 		bool
305 		YPPROC_DOMAIN(domainname) = 1;
306 
307 		bool
308 		YPPROC_DOMAIN_NONACK(domainname) = 2;
309 
310 		ypresp_val
311 		YPPROC_MATCH(ypreq_key) = 3;
312 
313 		ypresp_key_val
314 #ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
315 		YPPROC_FIRST(ypreq_key) = 4;
316 #else
317 		YPPROC_FIRST(ypreq_nokey) = 4;
318 #endif
319 		ypresp_key_val
320 		YPPROC_NEXT(ypreq_key) = 5;
321 
322 		ypresp_xfr
323 		YPPROC_XFR(ypreq_xfr) = 6;
324 
325 		void
326 		YPPROC_CLEAR(void) = 7;
327 
328 		ypresp_all
329 		YPPROC_ALL(ypreq_nokey) = 8;
330 
331 		ypresp_master
332 		YPPROC_MASTER(ypreq_nokey) = 9;
333 
334 		ypresp_order
335 		YPPROC_ORDER(ypreq_nokey) = 10;
336 
337 		ypresp_maplist
338 		YPPROC_MAPLIST(domainname) = 11;
339 	} = 2;
340 } = 100004;
341 #endif
342 #if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
343 /*
344  * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
345  */
346 program YPPUSH_XFRRESPPROG {
347 	version YPPUSH_XFRRESPVERS {
348 		void
349 		YPPUSHPROC_NULL(void) = 0;
350 #ifdef STUPID_SUN_BUG /* argument and return value are backwards */
351 		yppushresp_xfr
352 		YPPUSHPROC_XFRRESP(void) = 1;
353 #else
354 		void
355 		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
356 #endif
357 	} = 1;
358 } = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
359 #endif
360 #if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
361 /*
362  * YP binding protocol
363  */
364 program YPBINDPROG {
365 	version YPBINDVERS {
366 		void
367 		YPBINDPROC_NULL(void) = 0;
368 
369 		ypbind_resp
370 		YPBINDPROC_DOMAIN(domainname) = 1;
371 
372 		void
373 		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
374 	} = 2;
375 } = 100007;
376 
377 #endif
378