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 const YPMAXRECORD = 1024;
39 const YPMAXDOMAIN = 64;
40 const YPMAXMAP = 64;
41 const YPMAXPEER = 64;
42 
43 
44 enum ypstat {
45 	YP_TRUE		=  1,
46 	YP_NOMORE	=  2,
47 	YP_FALSE	=  0,
48 	YP_NOMAP	= -1,
49 	YP_NODOM	= -2,
50 	YP_NOKEY	= -3,
51 	YP_BADOP	= -4,
52 	YP_BADDB	= -5,
53 	YP_YPERR	= -6,
54 	YP_BADARGS	= -7,
55 	YP_VERS		= -8
56 };
57 
58 
59 enum ypxfrstat {
60 	YPXFR_SUCC	=  1,
61 	YPXFR_AGE	=  2,
62 	YPXFR_NOMAP	= -1,
63 	YPXFR_NODOM	= -2,
64 	YPXFR_RSRC	= -3,
65 	YPXFR_RPC	= -4,
66 	YPXFR_MADDR	= -5,
67 	YPXFR_YPERR	= -6,
68 	YPXFR_BADARGS	= -7,
69 	YPXFR_DBM	= -8,
70 	YPXFR_FILE	= -9,
71 	YPXFR_SKEW	= -10,
72 	YPXFR_CLEAR	= -11,
73 	YPXFR_FORCE	= -12,
74 	YPXFR_XFRERR	= -13,
75 	YPXFR_REFUSED	= -14
76 };
77 
78 
79 typedef string domainname<YPMAXDOMAIN>;
80 typedef string mapname<YPMAXMAP>;
81 typedef string peername<YPMAXPEER>;
82 typedef opaque keydat<YPMAXRECORD>;
83 typedef opaque valdat<YPMAXRECORD>;
84 
85 
86 struct ypmap_parms {
87 	domainname domain;
88 	mapname map;
89 	unsigned int ordernum;
90 	peername peer;
91 };
92 
93 struct ypreq_key {
94 	domainname domain;
95 	mapname map;
96 	keydat key;
97 };
98 
99 struct ypreq_nokey {
100 	domainname domain;
101 	mapname map;
102 };
103 
104 struct ypreq_xfr {
105 	ypmap_parms map_parms;
106 	unsigned int transid;
107 	unsigned int prog;
108 	unsigned int port;
109 };
110 
111 
112 struct ypresp_val {
113 	ypstat stat;
114 	valdat val;
115 };
116 
117 struct ypresp_key_val {
118 	ypstat stat;
119 #ifdef STUPID_SUN_BUG
120 	/* This is the form as distributed by Sun.  But even the Sun NIS
121 	   servers expect the values in the other order.  So their
122 	   implementation somehow must change the order internally.  We
123 	   don't want to follow this bad example since the user should be
124 	   able to use rpcgen on this file.  */
125 	keydat key;
126 	valdat val;
127 #else
128 	valdat val;
129 	keydat key;
130 #endif
131 };
132 
133 
134 struct ypresp_master {
135 	ypstat stat;
136 	peername peer;
137 };
138 
139 struct ypresp_order {
140 	ypstat stat;
141 	unsigned int ordernum;
142 };
143 
144 union ypresp_all switch (bool more) {
145 case TRUE:
146 	ypresp_key_val val;
147 case FALSE:
148 	void;
149 };
150 
151 struct ypresp_xfr {
152 	unsigned int transid;
153 	ypxfrstat xfrstat;
154 };
155 
156 struct ypmaplist {
157 	mapname map;
158 	ypmaplist *next;
159 };
160 
161 struct ypresp_maplist {
162 	ypstat stat;
163 	ypmaplist *maps;
164 };
165 
166 enum yppush_status {
167 	YPPUSH_SUCC	=  1,	/* Success */
168 	YPPUSH_AGE	=  2,	/* Master's version not newer */
169 	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
170 	YPPUSH_NODOM	= -2,	/* Domain not supported */
171 	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
172 	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
173 	YPPUSH_MADDR	= -5,	/* Can't get master address */
174 	YPPUSH_YPERR	= -6,	/* YP server/map db error */
175 	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
176 	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
177 	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
178 	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
179 	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
180 	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
181 	YPPUSH_XFRERR	= -13,	/* ypxfr error */
182 	YPPUSH_REFUSED	= -14	/* Transfer request refused by ypserv */
183 };
184 
185 struct yppushresp_xfr {
186 	unsigned transid;
187 	yppush_status status;
188 };
189 
190 /*
191  * Response structure and overall result status codes.  Success and failure
192  * represent two separate response message types.
193  */
194 
195 enum ypbind_resptype {
196 	YPBIND_SUCC_VAL = 1,
197 	YPBIND_FAIL_VAL = 2
198 };
199 
200 struct ypbind_binding {
201     opaque ypbind_binding_addr[4]; /* In network order */
202     opaque ypbind_binding_port[2]; /* In network order */
203 };
204 
205 union ypbind_resp switch (ypbind_resptype ypbind_status) {
206 case YPBIND_FAIL_VAL:
207 	unsigned ypbind_error;
208 case YPBIND_SUCC_VAL:
209 	ypbind_binding ypbind_bindinfo;
210 };
211 
212 /* Detailed failure reason codes for response field ypbind_error*/
213 
214 const YPBIND_ERR_ERR    = 1;	/* Internal error */
215 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
216 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
217 
218 
219 /*
220  * Request data structure for ypbind "Set domain" procedure.
221  */
222 struct ypbind_setdom {
223 	domainname ypsetdom_domain;
224 	ypbind_binding ypsetdom_binding;
225 	unsigned ypsetdom_vers;
226 };
227 
228 
229 /*
230  * YP access protocol
231  */
232 program YPPROG {
233 	version YPVERS {
234 		void
235 		YPPROC_NULL(void) = 0;
236 
237 		bool
238 		YPPROC_DOMAIN(domainname) = 1;
239 
240 		bool
241 		YPPROC_DOMAIN_NONACK(domainname) = 2;
242 
243 		ypresp_val
244 		YPPROC_MATCH(ypreq_key) = 3;
245 
246 		ypresp_key_val
247 		YPPROC_FIRST(ypreq_key) = 4;
248 
249 		ypresp_key_val
250 		YPPROC_NEXT(ypreq_key) = 5;
251 
252 		ypresp_xfr
253 		YPPROC_XFR(ypreq_xfr) = 6;
254 
255 		void
256 		YPPROC_CLEAR(void) = 7;
257 
258 		ypresp_all
259 		YPPROC_ALL(ypreq_nokey) = 8;
260 
261 		ypresp_master
262 		YPPROC_MASTER(ypreq_nokey) = 9;
263 
264 		ypresp_order
265 		YPPROC_ORDER(ypreq_nokey) = 10;
266 
267 		ypresp_maplist
268 		YPPROC_MAPLIST(domainname) = 11;
269 	} = 2;
270 } = 100004;
271 
272 
273 /*
274  * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
275  */
276 program YPPUSH_XFRRESPPROG {
277 	version YPPUSH_XFRRESPVERS {
278 		void
279 		YPPUSHPROC_NULL(void) = 0;
280 
281 #ifdef STUPID_SUN_BUG
282 		/* This is the form as distributed by Sun.  But even
283 		   the Sun NIS servers expect the values in the other
284 		   order.  So their implementation somehow must change
285 		   the order internally.  We don't want to follow this
286 		   bad example since the user should be able to use
287 		   rpcgen on this file.  */
288 		yppushresp_xfr
289 		YPPUSHPROC_XFRRESP(void) = 1;
290 #else
291 		void
292 		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
293 #endif
294 	} = 1;
295 } = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
296 
297 /*
298  * YP binding protocol
299  */
300 program YPBINDPROG {
301 	version YPBINDVERS {
302 		void
303 		YPBINDPROC_NULL(void) = 0;
304 
305 		ypbind_resp
306 		YPBINDPROC_DOMAIN(domainname) = 1;
307 
308 		void
309 		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
310 	} = 2;
311 } = 100007;
312