yp.x revision 1.3
1/* $OpenBSD: yp.x,v 1.3 2003/02/13 05:54:39 maja Exp $ */ 2 3/* 4 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 5 * unrestricted use provided that this legend is included on all tape 6 * media and as a part of the software program in whole or part. Users 7 * may copy or modify Sun RPC without charge, but are not authorized 8 * to license or distribute it to anyone else except as part of a product or 9 * program developed by the user. 10 * 11 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 12 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 13 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 14 * 15 * Sun RPC is provided with no support and without any obligation on the 16 * part of Sun Microsystems, Inc. to assist in its use, correction, 17 * modification or enhancement. 18 * 19 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 20 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 21 * OR ANY PART THEREOF. 22 * 23 * In no event will Sun Microsystems, Inc. be liable for any lost revenue 24 * or profits or other special, indirect and consequential damages, even if 25 * Sun has been advised of the possibility of such damages. 26 * 27 * Sun Microsystems, Inc. 28 * 2550 Garcia Avenue 29 * Mountain View, California 94043 30 */ 31 32/* 33 * Protocol description file for the Yellow Pages Service 34 */ 35 36#ifndef RPC_HDR 37%#ifndef lint 38%/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/ 39%static char rcsid[] = "$OpenBSD: yp.x,v 1.3 2003/02/13 05:54:39 maja Exp $"; 40%#endif /* not lint */ 41#endif 42 43const YPMAXRECORD = 1024; 44const YPMAXDOMAIN = 64; 45const YPMAXMAP = 64; 46const YPMAXPEER = 64; 47 48 49enum ypstat { 50 YP_TRUE = 1, 51 YP_NOMORE = 2, 52 YP_FALSE = 0, 53 YP_NOMAP = -1, 54 YP_NODOM = -2, 55 YP_NOKEY = -3, 56 YP_BADOP = -4, 57 YP_BADDB = -5, 58 YP_YPERR = -6, 59 YP_BADARGS = -7, 60 YP_VERS = -8 61}; 62 63 64enum ypxfrstat { 65 YPXFR_SUCC = 1, 66 YPXFR_AGE = 2, 67 YPXFR_NOMAP = -1, 68 YPXFR_NODOM = -2, 69 YPXFR_RSRC = -3, 70 YPXFR_RPC = -4, 71 YPXFR_MADDR = -5, 72 YPXFR_YPERR = -6, 73 YPXFR_BADARGS = -7, 74 YPXFR_DBM = -8, 75 YPXFR_FILE = -9, 76 YPXFR_SKEW = -10, 77 YPXFR_CLEAR = -11, 78 YPXFR_FORCE = -12, 79 YPXFR_XFRERR = -13, 80 YPXFR_REFUSED = -14 81}; 82 83 84typedef string domainname<YPMAXDOMAIN>; 85typedef string mapname<YPMAXMAP>; 86typedef string peername<YPMAXPEER>; 87typedef opaque keydat<YPMAXRECORD>; 88typedef opaque valdat<YPMAXRECORD>; 89 90 91struct ypmap_parms { 92 domainname domain; 93 mapname map; 94 unsigned int ordernum; 95 peername peer; 96}; 97 98struct ypreq_key { 99 domainname domain; 100 mapname map; 101 keydat key; 102}; 103 104struct ypreq_nokey { 105 domainname domain; 106 mapname map; 107}; 108 109struct ypreq_xfr { 110 ypmap_parms map_parms; 111 unsigned int transid; 112 unsigned int prog; 113 unsigned int port; 114}; 115 116 117struct ypresp_val { 118 ypstat stat; 119 valdat val; 120}; 121 122struct ypresp_key_val { 123 ypstat stat; 124#ifdef STUPID_SUN_BUG /* These are backwards */ 125 keydat key; 126 valdat val; 127#else 128 valdat val; 129 keydat key; 130#endif 131}; 132 133 134struct ypresp_master { 135 ypstat stat; 136 peername peer; 137}; 138 139struct ypresp_order { 140 ypstat stat; 141 unsigned int ordernum; 142}; 143 144union ypresp_all switch (bool more) { 145case TRUE: 146 ypresp_key_val val; 147case FALSE: 148 void; 149}; 150 151struct ypresp_xfr { 152 unsigned int transid; 153 ypxfrstat xfrstat; 154}; 155 156struct ypmaplist { 157 mapname map; 158 ypmaplist *next; 159}; 160 161struct ypresp_maplist { 162 ypstat stat; 163 ypmaplist *maps; 164}; 165 166enum 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 185struct 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 195enum ypbind_resptype { 196 YPBIND_SUCC_VAL = 1, 197 YPBIND_FAIL_VAL = 2 198}; 199 200struct ypbind_binding { 201 opaque ypbind_binding_addr[4]; /* In network order */ 202 opaque ypbind_binding_port[2]; /* In network order */ 203}; 204 205union ypbind_resp switch (ypbind_resptype ypbind_status) { 206case YPBIND_FAIL_VAL: 207 unsigned ypbind_error; 208case YPBIND_SUCC_VAL: 209 ypbind_binding ypbind_bindinfo; 210}; 211 212/* Detailed failure reason codes for response field ypbind_error*/ 213 214const YPBIND_ERR_ERR = 1; /* Internal error */ 215const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ 216const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ 217 218 219/* 220 * Request data structure for ypbind "Set domain" procedure. 221 */ 222struct ypbind_setdom { 223 domainname ypsetdom_domain; 224 ypbind_binding ypsetdom_binding; 225 unsigned ypsetdom_vers; 226}; 227 228 229/* 230 * YP access protocol 231 */ 232program 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#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */ 248 YPPROC_FIRST(ypreq_key) = 4; 249#else 250 YPPROC_FIRST(ypreq_nokey) = 4; 251#endif 252 253 ypresp_key_val 254 YPPROC_NEXT(ypreq_key) = 5; 255 256 ypresp_xfr 257 YPPROC_XFR(ypreq_xfr) = 6; 258 259 void 260 YPPROC_CLEAR(void) = 7; 261 262 ypresp_all 263 YPPROC_ALL(ypreq_nokey) = 8; 264 265 ypresp_master 266 YPPROC_MASTER(ypreq_nokey) = 9; 267 268 ypresp_order 269 YPPROC_ORDER(ypreq_nokey) = 10; 270 271 ypresp_maplist 272 YPPROC_MAPLIST(domainname) = 11; 273 } = 2; 274} = 100004; 275 276 277/* 278 * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR 279 */ 280program YPPUSH_XFRRESPPROG { 281 version YPPUSH_XFRRESPVERS { 282 void 283 YPPUSHPROC_NULL(void) = 0; 284 285 yppushresp_xfr 286 YPPUSHPROC_XFRRESP(void) = 1; 287 } = 1; 288} = 0x40000000; /* transient: could be anything up to 0x5fffffff */ 289 290 291/* 292 * YP binding protocol 293 */ 294program YPBINDPROG { 295 version YPBINDVERS { 296 void 297 YPBINDPROC_NULL(void) = 0; 298 299 ypbind_resp 300 YPBINDPROC_DOMAIN(domainname) = 1; 301 302 void 303 YPBINDPROC_SETDOM(ypbind_setdom) = 2; 304 } = 2; 305} = 100007; 306 307 308