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