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 #ifndef RPC_HDR 39 %#include <sys/cdefs.h> 40 %__FBSDID("$FreeBSD$"); 41 #endif 42 43 const YPMAXRECORD = 16777216; 44 const YPMAXDOMAIN = 64; 45 const YPMAXMAP = 64; 46 const YPMAXPEER = 64; 47 48 49 enum 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 64 enum 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 84 typedef string domainname<YPMAXDOMAIN>; 85 typedef string mapname<YPMAXMAP>; 86 typedef string peername<YPMAXPEER>; 87 typedef opaque keydat<YPMAXRECORD>; 88 typedef opaque valdat<YPMAXRECORD>; 89 90 91 struct ypmap_parms { 92 domainname domain; 93 mapname map; 94 unsigned int ordernum; 95 peername peer; 96 }; 97 98 struct ypreq_key { 99 domainname domain; 100 mapname map; 101 keydat key; 102 }; 103 104 struct ypreq_nokey { 105 domainname domain; 106 mapname map; 107 }; 108 109 struct ypreq_xfr { 110 ypmap_parms map_parms; 111 unsigned int transid; 112 unsigned int prog; 113 unsigned int port; 114 }; 115 116 117 struct ypresp_val { 118 ypstat stat; 119 valdat val; 120 }; 121 122 struct 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 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 * NIS v1 support for backwards compatibility 231 */ 232 enum ypreqtype { 233 YPREQ_KEY = 1, 234 YPREQ_NOKEY = 2, 235 YPREQ_MAP_PARMS = 3 236 }; 237 238 enum ypresptype { 239 YPRESP_VAL = 1, 240 YPRESP_KEY_VAL = 2, 241 YPRESP_MAP_PARMS = 3 242 }; 243 244 union yprequest switch (ypreqtype yp_reqtype) { 245 case YPREQ_KEY: 246 ypreq_key yp_req_keytype; 247 case YPREQ_NOKEY: 248 ypreq_nokey yp_req_nokeytype; 249 case YPREQ_MAP_PARMS: 250 ypmap_parms yp_req_map_parmstype; 251 }; 252 253 union ypresponse switch (ypresptype yp_resptype) { 254 case YPRESP_VAL: 255 ypresp_val yp_resp_valtype; 256 case YPRESP_KEY_VAL: 257 ypresp_key_val yp_resp_key_valtype; 258 case YPRESP_MAP_PARMS: 259 ypmap_parms yp_resp_map_parmstype; 260 }; 261 262 #if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY) 263 /* 264 * YP access protocol 265 */ 266 program YPPROG { 267 /* 268 * NIS v1 support for backwards compatibility 269 */ 270 version YPOLDVERS { 271 void 272 YPOLDPROC_NULL(void) = 0; 273 274 bool 275 YPOLDPROC_DOMAIN(domainname) = 1; 276 277 bool 278 YPOLDPROC_DOMAIN_NONACK(domainname) = 2; 279 280 ypresponse 281 YPOLDPROC_MATCH(yprequest) = 3; 282 283 ypresponse 284 YPOLDPROC_FIRST(yprequest) = 4; 285 286 ypresponse 287 YPOLDPROC_NEXT(yprequest) = 5; 288 289 ypresponse 290 YPOLDPROC_POLL(yprequest) = 6; 291 292 ypresponse 293 YPOLDPROC_PUSH(yprequest) = 7; 294 295 ypresponse 296 YPOLDPROC_PULL(yprequest) = 8; 297 298 ypresponse 299 YPOLDPROC_GET(yprequest) = 9; 300 } = 1; 301 302 version YPVERS { 303 void 304 YPPROC_NULL(void) = 0; 305 306 bool 307 YPPROC_DOMAIN(domainname) = 1; 308 309 bool 310 YPPROC_DOMAIN_NONACK(domainname) = 2; 311 312 ypresp_val 313 YPPROC_MATCH(ypreq_key) = 3; 314 315 ypresp_key_val 316 #ifdef STUPID_SUN_BUG /* should be ypreq_nokey */ 317 YPPROC_FIRST(ypreq_key) = 4; 318 #else 319 YPPROC_FIRST(ypreq_nokey) = 4; 320 #endif 321 ypresp_key_val 322 YPPROC_NEXT(ypreq_key) = 5; 323 324 ypresp_xfr 325 YPPROC_XFR(ypreq_xfr) = 6; 326 327 void 328 YPPROC_CLEAR(void) = 7; 329 330 ypresp_all 331 YPPROC_ALL(ypreq_nokey) = 8; 332 333 ypresp_master 334 YPPROC_MASTER(ypreq_nokey) = 9; 335 336 ypresp_order 337 YPPROC_ORDER(ypreq_nokey) = 10; 338 339 ypresp_maplist 340 YPPROC_MAPLIST(domainname) = 11; 341 } = 2; 342 } = 100004; 343 #endif 344 #if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY) 345 /* 346 * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR 347 */ 348 program YPPUSH_XFRRESPPROG { 349 version YPPUSH_XFRRESPVERS { 350 void 351 YPPUSHPROC_NULL(void) = 0; 352 #ifdef STUPID_SUN_BUG /* argument and return value are backwards */ 353 yppushresp_xfr 354 YPPUSHPROC_XFRRESP(void) = 1; 355 #else 356 void 357 YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1; 358 #endif 359 } = 1; 360 } = 0x40000000; /* transient: could be anything up to 0x5fffffff */ 361 #endif 362 #if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY) 363 /* 364 * YP binding protocol 365 */ 366 program YPBINDPROG { 367 version YPBINDVERS { 368 void 369 YPBINDPROC_NULL(void) = 0; 370 371 ypbind_resp 372 YPBINDPROC_DOMAIN(domainname) = 1; 373 374 void 375 YPBINDPROC_SETDOM(ypbind_setdom) = 2; 376 } = 2; 377 } = 100007; 378 379 #endif 380