xref: /openbsd-src/include/rpcsvc/yp_prot.h (revision 2811b70e6ccb05839923c4548fbcf79f1fbe1376)
1*2811b70eSjmc /*	$OpenBSD: yp_prot.h,v 1.12 2022/12/27 07:44:56 jmc Exp $	*/
2df930be7Sderaadt /*	$NetBSD: yp_prot.h,v 1.6 1995/07/14 21:10:58 christos Exp $	*/
3df930be7Sderaadt 
4df930be7Sderaadt /*
567fea825Sderaadt  * Copyright (c) 1992, 1993 Theo de Raadt <deraadt@openbsd.org>
6df930be7Sderaadt  * All rights reserved.
7df930be7Sderaadt  *
8df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
9df930be7Sderaadt  * modification, are permitted provided that the following conditions
10df930be7Sderaadt  * are met:
11df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
12df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
13df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
14df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
15df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
16df930be7Sderaadt  *
17df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18df930be7Sderaadt  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19df930be7Sderaadt  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20df930be7Sderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
21df930be7Sderaadt  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22df930be7Sderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23df930be7Sderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24df930be7Sderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25df930be7Sderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26df930be7Sderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27df930be7Sderaadt  * SUCH DAMAGE.
28df930be7Sderaadt  */
29df930be7Sderaadt 
30df930be7Sderaadt #ifndef _RPCSVC_YP_PROT_H_
31df930be7Sderaadt #define _RPCSVC_YP_PROT_H_
32df930be7Sderaadt 
33df930be7Sderaadt /*
34df930be7Sderaadt  * YPSERV PROTOCOL:
35df930be7Sderaadt  *
36df930be7Sderaadt  * ypserv supports the following procedures:
37df930be7Sderaadt  *
38df930be7Sderaadt  * YPPROC_NULL		takes (void), returns (void).
39df930be7Sderaadt  *			called to check if server is alive.
40df930be7Sderaadt  * YPPROC_DOMAIN	takes (char *), returns (bool_t).
41df930be7Sderaadt  *			true if ypserv serves the named domain.
42df930be7Sderaadt  * YPPROC_DOMAIN_NOACK	takes (char *), returns (bool_t).
43df930be7Sderaadt  *			true if ypserv serves the named domain.
44df930be7Sderaadt  *			used for broadcasts, does not ack if ypserv
45df930be7Sderaadt  *			doesn't handle named domain.
46df930be7Sderaadt  * YPPROC_MATCH		takes (struct ypreq_key), returns (struct ypresp_val)
47df930be7Sderaadt  *			does a lookup.
48df930be7Sderaadt  * YPPROC_FIRST		takes (struct ypreq_nokey) returns (ypresp_key_val).
49df930be7Sderaadt  *			gets the first key/datum from the map.
50df930be7Sderaadt  * YPPROC_NEXT		takes (struct ypreq_key) returns (ypresp_key_val).
51df930be7Sderaadt  *			gets the next key/datum from the map.
52df930be7Sderaadt  * YPPROC_XFR		takes (struct ypreq_xfr), returns (void).
53df930be7Sderaadt  *			tells ypserv to check if there is a new version of
54df930be7Sderaadt  *			the map.
55df930be7Sderaadt  * YPPROC_CLEAR		takes (void), returns (void).
5647e93860Sguenther  *			tells ypserv to flush its file cache, so that
57df930be7Sderaadt  *			newly transferred files will get read.
58df930be7Sderaadt  * YPPROC_ALL		takes (struct ypreq_nokey), returns (bool_t and
59df930be7Sderaadt  *			struct ypresp_key_val).
60df930be7Sderaadt  *			returns an array of data, with the bool_t being
61df930be7Sderaadt  *			false on the last datum. read the source, it's
62df930be7Sderaadt  *			convoluted.
63df930be7Sderaadt  * YPPROC_MASTER	takes (struct ypreq_nokey), returns (ypresp_master).
64df930be7Sderaadt  * YPPROC_ORDER		takes (struct ypreq_nokey), returns (ypresp_order).
65df930be7Sderaadt  * YPPROC_MAPLIST	takes (char *), returns (struct ypmaplist *).
66df930be7Sderaadt  */
67df930be7Sderaadt 
68df930be7Sderaadt #ifndef BOOL_DEFINED
69d1f942abSespie typedef unsigned int bool;
70df930be7Sderaadt #define BOOL_DEFINED
71df930be7Sderaadt #endif
72df930be7Sderaadt 
73df930be7Sderaadt 
74df930be7Sderaadt /* Program and version symbols, magic numbers */
75d1f942abSespie #define YPPROG		((unsigned long)100004)
76d1f942abSespie #define YPVERS		((unsigned long)2)
77d1f942abSespie #define YPVERS_ORIG	((unsigned long)1)
78d1f942abSespie #define YPMAXRECORD	((unsigned long)1024)
79d1f942abSespie #define YPMAXDOMAIN	((unsigned long)64)
80d1f942abSespie #define YPMAXMAP	((unsigned long)64)
81d1f942abSespie #define YPMAXPEER	((unsigned long)256)
82df930be7Sderaadt 
83df930be7Sderaadt /*
84df930be7Sderaadt  * I don't know if anything of sun's depends on this, or if they
85df930be7Sderaadt  * simply defined it so that their own code wouldn't try to send
86df930be7Sderaadt  * packets over the ethernet MTU. This YP code doesn't use it.
87df930be7Sderaadt  */
88df930be7Sderaadt #define YPMSGSZ		1600
89df930be7Sderaadt 
90df930be7Sderaadt #ifndef DATUM
91df930be7Sderaadt typedef struct {
92df930be7Sderaadt 	const char	*dptr;
93df930be7Sderaadt 	int		 dsize;
94df930be7Sderaadt } datum;
95df930be7Sderaadt #define DATUM
96df930be7Sderaadt #endif
97df930be7Sderaadt 
98df930be7Sderaadt struct ypmap_parms {
99df930be7Sderaadt 	const char *domain;
100df930be7Sderaadt 	const char *map;
101d1f942abSespie 	unsigned long ordernum;
102df930be7Sderaadt 	char *owner;
103df930be7Sderaadt };
104df930be7Sderaadt 
105df930be7Sderaadt struct ypreq_key {
106df930be7Sderaadt 	const char *domain;
107df930be7Sderaadt 	const char *map;
108df930be7Sderaadt 	datum keydat;
109df930be7Sderaadt };
110df930be7Sderaadt 
111df930be7Sderaadt struct ypreq_nokey {
112df930be7Sderaadt 	const char *domain;
113df930be7Sderaadt 	const char *map;
114df930be7Sderaadt };
115df930be7Sderaadt 
116df930be7Sderaadt struct ypreq_xfr {
117df930be7Sderaadt 	struct ypmap_parms map_parms;
118d1f942abSespie 	unsigned long transid;
119d1f942abSespie 	unsigned long proto;
120d1f942abSespie 	unsigned short port;
121df930be7Sderaadt };
122df930be7Sderaadt #define ypxfr_domain	map_parms.domain
123df930be7Sderaadt #define ypxfr_map	map_parms.map
124df930be7Sderaadt #define ypxfr_ordernum	map_parms.ordernum
125df930be7Sderaadt #define ypxfr_owner	map_parms.owner
126df930be7Sderaadt 
127df930be7Sderaadt struct ypresp_val {
128d1f942abSespie 	unsigned long status;
129df930be7Sderaadt 	datum valdat;
130df930be7Sderaadt };
131df930be7Sderaadt 
132df930be7Sderaadt struct ypresp_key_val {
133d1f942abSespie 	unsigned long status;
134df930be7Sderaadt 	datum keydat;
135df930be7Sderaadt 	datum valdat;
136df930be7Sderaadt };
137df930be7Sderaadt 
138df930be7Sderaadt struct ypresp_master {
139d1f942abSespie 	unsigned long status;
140df930be7Sderaadt 	char *master;
141df930be7Sderaadt };
142df930be7Sderaadt 
143df930be7Sderaadt struct ypresp_order {
144d1f942abSespie 	unsigned long status;
145d1f942abSespie 	unsigned long ordernum;
146df930be7Sderaadt };
147df930be7Sderaadt 
148df930be7Sderaadt struct ypresp_all {
149df930be7Sderaadt 	bool_t more;
150df930be7Sderaadt 	union {
151df930be7Sderaadt 		struct ypresp_key_val val;
152df930be7Sderaadt 	} ypresp_all_u;
153df930be7Sderaadt };
154df930be7Sderaadt 
155df930be7Sderaadt struct ypmaplist {
156df930be7Sderaadt 	char ypml_name[YPMAXMAP + 1];
157df930be7Sderaadt 	struct ypmaplist *ypml_next;
158df930be7Sderaadt };
159df930be7Sderaadt 
160df930be7Sderaadt struct ypresp_maplist {
161d1f942abSespie 	unsigned long status;
162df930be7Sderaadt 	struct ypmaplist *list;
163df930be7Sderaadt };
164df930be7Sderaadt 
165df930be7Sderaadt /* ypserv procedure numbers */
166d1f942abSespie #define YPPROC_NULL		((unsigned long)0)
167d1f942abSespie #define YPPROC_DOMAIN		((unsigned long)1)
168d1f942abSespie #define YPPROC_DOMAIN_NONACK	((unsigned long)2)
169d1f942abSespie #define YPPROC_MATCH		((unsigned long)3)
170d1f942abSespie #define YPPROC_FIRST		((unsigned long)4)
171d1f942abSespie #define YPPROC_NEXT		((unsigned long)5)
172d1f942abSespie #define YPPROC_XFR		((unsigned long)6)
173d1f942abSespie #define YPPROC_CLEAR		((unsigned long)7)
174d1f942abSespie #define YPPROC_ALL		((unsigned long)8)
175d1f942abSespie #define YPPROC_MASTER		((unsigned long)9)
176d1f942abSespie #define YPPROC_ORDER		((unsigned long)10)
177d1f942abSespie #define YPPROC_MAPLIST		((unsigned long)11)
178df930be7Sderaadt 
179df930be7Sderaadt /* ypserv procedure return status values */
180e371def8Sderaadt #define YP_TRUE		((unsigned long)1)	/* general purpose success code */
181e371def8Sderaadt #define YP_NOMORE	((unsigned long)2)	/* no more entries in map */
182e371def8Sderaadt #define YP_FALSE	((unsigned long)0)	/* general purpose failure code */
183e371def8Sderaadt #define YP_NOMAP	((unsigned long)-1)	/* no such map in domain */
184e371def8Sderaadt #define YP_NODOM	((unsigned long)-2)	/* domain not supported */
185e371def8Sderaadt #define YP_NOKEY	((unsigned long)-3)	/* no such key in map */
186e371def8Sderaadt #define YP_BADOP	((unsigned long)-4)	/* invalid operation */
187e371def8Sderaadt #define YP_BADDB	((unsigned long)-5)	/* server data base is bad */
188e371def8Sderaadt #define YP_YPERR	((unsigned long)-6)	/* YP server error */
189e371def8Sderaadt #define YP_BADARGS	((unsigned long)-7)	/* request arguments bad */
190e371def8Sderaadt #define YP_VERS		((unsigned long)-8)	/* YP server version mismatch */
191df930be7Sderaadt 
192df930be7Sderaadt /*
193df930be7Sderaadt  * YPBIND PROTOCOL:
194df930be7Sderaadt  *
195df930be7Sderaadt  * ypbind supports the following procedures:
196df930be7Sderaadt  *
197df930be7Sderaadt  * YPBINDPROC_NULL	takes (void), returns (void).
198df930be7Sderaadt  *			to check if ypbind is running.
199df930be7Sderaadt  * YPBINDPROC_DOMAIN	takes (char *), returns (struct ypbind_resp).
200df930be7Sderaadt  *			requests that ypbind start to serve the
201df930be7Sderaadt  *			named domain (if it doesn't already)
202df930be7Sderaadt  * YPBINDPROC_SETDOM	takes (struct ypbind_setdom), returns (void).
203df930be7Sderaadt  *			used by ypset.
204df930be7Sderaadt  */
205df930be7Sderaadt 
206d1f942abSespie #define YPBINDPROG		((unsigned long)100007)
207d1f942abSespie #define YPBINDVERS		((unsigned long)2)
208d1f942abSespie #define YPBINDVERS_ORIG		((unsigned long)1)
209df930be7Sderaadt 
210df930be7Sderaadt /* ypbind procedure numbers */
211d1f942abSespie #define YPBINDPROC_NULL		((unsigned long)0)
212d1f942abSespie #define YPBINDPROC_DOMAIN	((unsigned long)1)
213d1f942abSespie #define YPBINDPROC_SETDOM	((unsigned long)2)
214df930be7Sderaadt 
215df930be7Sderaadt /* error code in ypbind_resp.ypbind_status */
216df930be7Sderaadt enum ypbind_resptype {
217df930be7Sderaadt 	YPBIND_SUCC_VAL = 1,
218df930be7Sderaadt 	YPBIND_FAIL_VAL = 2
219df930be7Sderaadt };
220df930be7Sderaadt 
221df930be7Sderaadt /* network order, of course */
222df930be7Sderaadt struct ypbind_binding {
223df930be7Sderaadt 	struct in_addr	ypbind_binding_addr;
224d1f942abSespie 	unsigned short	ypbind_binding_port;
225df930be7Sderaadt };
226df930be7Sderaadt 
227df930be7Sderaadt struct ypbind_resp {
228df930be7Sderaadt 	enum ypbind_resptype	ypbind_status;
229df930be7Sderaadt 	union {
230d1f942abSespie 		unsigned long		ypbind_error;
231df930be7Sderaadt 		struct ypbind_binding	ypbind_bindinfo;
232df930be7Sderaadt 	} ypbind_respbody;
233df930be7Sderaadt };
234df930be7Sderaadt 
235df930be7Sderaadt /* error code in ypbind_resp.ypbind_respbody.ypbind_error */
236df930be7Sderaadt #define YPBIND_ERR_ERR		1	/* internal error */
237df930be7Sderaadt #define YPBIND_ERR_NOSERV	2	/* no bound server for passed domain */
238df930be7Sderaadt #define YPBIND_ERR_RESC		3	/* system resource allocation failure */
239df930be7Sderaadt 
240df930be7Sderaadt /*
241df930be7Sderaadt  * Request data structure for ypbind "Set domain" procedure.
242df930be7Sderaadt  */
243df930be7Sderaadt struct ypbind_setdom {
244df930be7Sderaadt 	char ypsetdom_domain[YPMAXDOMAIN + 1];
245df930be7Sderaadt 	struct ypbind_binding ypsetdom_binding;
246d1f942abSespie 	unsigned short ypsetdom_vers;
247df930be7Sderaadt };
248df930be7Sderaadt #define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
249df930be7Sderaadt #define ypsetdom_port ypsetdom_binding.ypbind_binding_port
250df930be7Sderaadt 
251df930be7Sderaadt /*
252df930be7Sderaadt  * YPPUSH PROTOCOL:
253df930be7Sderaadt  *
254df930be7Sderaadt  * Sun says:
255df930be7Sderaadt  * "Protocol between clients (ypxfr, only) and yppush
256df930be7Sderaadt  *  yppush speaks a protocol in the transient range, which
257df930be7Sderaadt  *  is supplied to ypxfr as a command-line parameter when it
258df930be7Sderaadt  *  is activated by ypserv."
259df930be7Sderaadt  *
26071775055Stodd  * This protocol is not implemented, naturally, because this YP
26171775055Stodd  * implementation only does the client side.
262df930be7Sderaadt  */
263d1f942abSespie #define YPPUSHVERS		((unsigned long)1)
264d1f942abSespie #define YPPUSHVERS_ORIG		((unsigned long)1)
265df930be7Sderaadt 
266df930be7Sderaadt /* yppush procedure numbers */
267d1f942abSespie #define YPPUSHPROC_NULL		((unsigned long)0)
268d1f942abSespie #define YPPUSHPROC_XFRRESP	((unsigned long)1)
269df930be7Sderaadt 
270df930be7Sderaadt struct yppushresp_xfr {
271d1f942abSespie 	unsigned long	transid;
272d1f942abSespie 	unsigned long	status;
273df930be7Sderaadt };
274df930be7Sderaadt 
275df930be7Sderaadt /* yppush status value in yppushresp_xfr.status */
276e371def8Sderaadt #define YPPUSH_SUCC	((unsigned long)1)	/* Success */
277e371def8Sderaadt #define YPPUSH_AGE	((unsigned long)2)	/* Master's version not newer */
278e371def8Sderaadt #define YPPUSH_NOMAP	((unsigned long)-1)	/* Can't find server for map */
279e371def8Sderaadt #define YPPUSH_NODOM	((unsigned long)-2)	/* Domain not supported */
280*2811b70eSjmc #define YPPUSH_RSRC	((unsigned long)-3)	/* Local resource alloc failure */
281e371def8Sderaadt #define YPPUSH_RPC	((unsigned long)-4)	/* RPC failure talking to server */
282e371def8Sderaadt #define YPPUSH_MADDR	((unsigned long)-5)	/* Can't get master address */
283e371def8Sderaadt #define YPPUSH_YPERR	((unsigned long)-6)	/* YP server/map db error */
284e371def8Sderaadt #define YPPUSH_BADARGS	((unsigned long)-7)	/* Request arguments bad */
285e371def8Sderaadt #define YPPUSH_DBM	((unsigned long)-8)	/* Local dbm operation failed */
286e371def8Sderaadt #define YPPUSH_FILE	((unsigned long)-9)	/* Local file I/O operation failed */
287e371def8Sderaadt #define YPPUSH_SKEW	((unsigned long)-10)	/* Map version skew during transfer */
288e371def8Sderaadt #define YPPUSH_CLEAR	((unsigned long)-11)	/* Can't send "Clear" req to local ypserv */
289e371def8Sderaadt #define YPPUSH_FORCE	((unsigned long)-12)	/* No local order number in map - use -f */
290e371def8Sderaadt #define YPPUSH_XFRERR	((unsigned long)-13)	/* ypxfr error */
291e371def8Sderaadt #define YPPUSH_REFUSED	((unsigned long)-14)	/* Transfer request refused by ypserv */
292df930be7Sderaadt 
293df930be7Sderaadt __BEGIN_DECLS
294c72b5b24Smillert bool_t xdr_domainname(XDR *, char *);
295c72b5b24Smillert bool_t xdr_peername(XDR *, char *);
296c72b5b24Smillert bool_t xdr_datum(XDR *, datum *);
297c72b5b24Smillert bool_t xdr_mapname(XDR *, char *);
298c72b5b24Smillert bool_t xdr_ypreq_key(XDR *, struct ypreq_key *);
299c72b5b24Smillert bool_t xdr_ypreq_nokey(XDR *, struct ypreq_nokey *);
300c72b5b24Smillert bool_t xdr_yp_inaddr(XDR *, struct in_addr *);
301c72b5b24Smillert bool_t xdr_ypbind_binding(XDR *, struct ypbind_binding *);
302c72b5b24Smillert bool_t xdr_ypbind_resptype(XDR *, enum ypbind_resptype *);
303c72b5b24Smillert bool_t xdr_ypstat(XDR *, enum ypbind_resptype *);
304c72b5b24Smillert bool_t xdr_ypbind_resp(XDR *, struct ypbind_resp *);
305c72b5b24Smillert bool_t xdr_ypresp_val(XDR *, struct ypresp_val *);
306c72b5b24Smillert bool_t xdr_ypbind_setdom(XDR *, struct ypbind_setdom *);
307c72b5b24Smillert bool_t xdr_ypresp_key_val(XDR *, struct ypresp_key_val *);
308c72b5b24Smillert bool_t xdr_ypresp_all(XDR *, struct ypresp_all *);
309c72b5b24Smillert bool_t xdr_ypresp_master(XDR *, struct ypresp_master *);
310c72b5b24Smillert bool_t xdr_ypmaplist_str(XDR *, char *);
311c72b5b24Smillert bool_t xdr_ypmaplist(XDR *, struct ypmaplist *);
312c72b5b24Smillert bool_t xdr_ypresp_maplist(XDR *, struct ypresp_maplist *);
313c72b5b24Smillert bool_t xdr_ypresp_order(XDR *, struct ypresp_order *);
314df930be7Sderaadt __END_DECLS
315df930be7Sderaadt 
316df930be7Sderaadt #endif /* _RPCSVC_YP_PROT_H_ */
317