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