1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 0 stevel * Common Development and Distribution License, Version 1.0 only 6 0 stevel * (the "License"). You may not use this file except in compliance 7 0 stevel * with the License. 8 0 stevel * 9 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 0 stevel * or http://www.opensolaris.org/os/licensing. 11 0 stevel * See the License for the specific language governing permissions 12 0 stevel * and limitations under the License. 13 0 stevel * 14 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 15 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 0 stevel * If applicable, add the following below this CDDL HEADER, with the 17 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 18 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 19 0 stevel * 20 0 stevel * CDDL HEADER END 21 0 stevel */ 22 0 stevel /* 23 0 stevel * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 0 stevel * Use is subject to license terms. 25 0 stevel */ 26 0 stevel 27 0 stevel /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ 28 0 stevel /* All Rights Reserved */ 29 0 stevel 30 0 stevel /* 31 0 stevel * Portions of this source code were derived from Berkeley 4.3 BSD 32 0 stevel * under license from the Regents of the University of California. 33 0 stevel */ 34 0 stevel 35 0 stevel #ifndef _RPCSVC_YP_PROT_H 36 0 stevel #define _RPCSVC_YP_PROT_H 37 0 stevel 38 0 stevel #pragma ident "%Z%%M% %I% %E% SMI" 39 0 stevel 40 0 stevel #include <rpc/rpc.h> 41 0 stevel #include <rpcsvc/ypclnt.h> 42 0 stevel #include <ndbm.h> 43 0 stevel 44 0 stevel #ifdef __cplusplus 45 0 stevel extern "C" { 46 0 stevel #endif 47 0 stevel 48 0 stevel /* 49 0 stevel * This file contains symbols and structures defining the rpc protocol 50 0 stevel * between the YP clients and the YP servers. The servers are the YP 51 0 stevel * database servers, and the YP. 52 0 stevel */ 53 0 stevel 54 0 stevel /* 55 0 stevel * The following procedures are supported by the protocol: 56 0 stevel * 57 0 stevel * YPPROC_NULL() returns () takes nothing, returns nothing. This indicates 58 0 stevel * that the yp server is alive. 59 0 stevel * 60 0 stevel * YPPROC_DOMAIN (char *) returns (bool_t) TRUE. Indicates that the 61 0 stevel * responding yp server does serve the named domain; FALSE indicates no 62 0 stevel * support. 63 0 stevel * 64 0 stevel * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the yp server does serve 65 0 stevel * the named domain, otherwise does not return. Used in the broadcast case. 66 0 stevel * 67 0 stevel * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val). Returns the 68 0 stevel * right-hand value for a passed left-hand key, within a named map and 69 0 stevel * domain. 70 0 stevel * 71 0 stevel * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val). 72 0 stevel * Returns the first key-value pair from a named domain and map. 73 0 stevel * 74 0 stevel * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val). Returns 75 0 stevel * the key-value pair following a passed key-value pair within a named 76 0 stevel * domain and map. 77 0 stevel * 78 0 stevel * YPPROC_XFR (struct ypreq_xfr) returns nothing. Indicates to a server that 79 0 stevel * a map should be updated. 80 0 stevel * 81 0 stevel * YPPROC_NEWXFR (struct ypreq_newxfr) returns nothing. Indicates to a server 82 0 stevel * that a map should be updated. Uses protocol independent request struct. 83 0 stevel * 84 0 stevel * YPPROC_CLEAR takes nothing, returns nothing. Instructs a yp server to 85 0 stevel * close the current map, so that old versions of the disk file don't get 86 0 stevel * held open. 87 0 stevel * 88 0 stevel * YPPROC_ALL (struct ypreq_nokey), returns 89 0 stevel * union switch (bool more) { 90 0 stevel * TRUE: (struct ypresp_key_val); 91 0 stevel * FALSE: (struct) {}; 92 0 stevel * } 93 0 stevel * 94 0 stevel * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master) 95 0 stevel * 96 0 stevel * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order) 97 0 stevel * 98 0 stevel * YPPROC_MAPLIST (char *), returns (struct ypmaplist *) 99 0 stevel */ 100 0 stevel 101 0 stevel /* 'bool' is a built-in type for g++ */ 102 0 stevel #if !(defined(__cplusplus) && defined(_BOOL)) && !defined(__GNUG__) 103 0 stevel #ifndef BOOL_DEFINED 104 0 stevel typedef unsigned int bool; 105 0 stevel #define BOOL_DEFINED 106 0 stevel #endif 107 0 stevel #endif 108 0 stevel 109 0 stevel /* Program and version symbols, magic numbers */ 110 0 stevel 111 0 stevel #define YPPROG ((rpcprog_t)100004) 112 0 stevel #define YPVERS ((rpcvers_t)2) 113 0 stevel #define YPVERS_ORIG ((rpcvers_t)1) 114 0 stevel #define YPMAXRECORD ((uint_t)1024) 115 0 stevel #define YPMAXDOMAIN ((uint_t)256) 116 0 stevel #define YPMAXMAP ((uint_t)64) 117 0 stevel #define YPMAXPEER ((uint_t)256) 118 0 stevel 119 0 stevel /* byte size of a large yp packet */ 120 0 stevel #define YPMSGSZ 1600 121 0 stevel 122 0 stevel struct ypmap_parms { 123 0 stevel char *domain; /* Null string means not available */ 124 0 stevel char *map; /* Null string means not available */ 125 0 stevel unsigned int ordernum; /* 0 means not available */ 126 0 stevel char *owner; /* Null string means not available */ 127 0 stevel }; 128 0 stevel 129 0 stevel /* 130 0 stevel * Request parameter structures 131 0 stevel */ 132 0 stevel 133 0 stevel struct ypreq_key { 134 0 stevel char *domain; 135 0 stevel char *map; 136 0 stevel datum keydat; 137 0 stevel }; 138 0 stevel 139 0 stevel struct ypreq_nokey { 140 0 stevel char *domain; 141 0 stevel char *map; 142 0 stevel }; 143 0 stevel 144 0 stevel struct ypreq_xfr { 145 0 stevel struct ypmap_parms map_parms; 146 0 stevel unsigned int transid; 147 0 stevel unsigned int proto; 148 0 stevel unsigned short port; 149 0 stevel }; 150 0 stevel 151 0 stevel struct ypreq_newxfr { 152 0 stevel struct ypmap_parms map_parms; 153 0 stevel unsigned int transid; 154 0 stevel unsigned int proto; 155 0 stevel char *name; 156 0 stevel }; 157 0 stevel 158 0 stevel #define ypxfr_domain map_parms.domain 159 0 stevel #define ypxfr_map map_parms.map 160 0 stevel #define ypxfr_ordernum map_parms.ordernum 161 0 stevel #define ypxfr_owner map_parms.owner 162 0 stevel 163 0 stevel /* 164 0 stevel * Response parameter structures 165 0 stevel */ 166 0 stevel 167 0 stevel struct ypresp_val { 168 0 stevel unsigned int status; 169 0 stevel datum valdat; 170 0 stevel }; 171 0 stevel 172 0 stevel struct ypresp_key_val { 173 0 stevel unsigned int status; 174 0 stevel datum valdat; 175 0 stevel datum keydat; 176 0 stevel }; 177 0 stevel 178 0 stevel struct ypresp_master { 179 0 stevel unsigned int status; 180 0 stevel char *master; 181 0 stevel }; 182 0 stevel 183 0 stevel struct ypresp_order { 184 0 stevel unsigned int status; 185 0 stevel unsigned int ordernum; 186 0 stevel }; 187 0 stevel 188 0 stevel struct ypmaplist { 189 0 stevel char ypml_name[YPMAXMAP + 1]; 190 0 stevel struct ypmaplist *ypml_next; 191 0 stevel }; 192 0 stevel 193 0 stevel struct ypresp_maplist { 194 0 stevel unsigned int status; 195 0 stevel struct ypmaplist *list; 196 0 stevel }; 197 0 stevel 198 0 stevel /* 199 0 stevel * Procedure symbols. YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK 200 0 stevel * must keep the same values (0, 1, and 2) that they had in the first version 201 0 stevel * of the protocol. 202 0 stevel */ 203 0 stevel 204 0 stevel #define YPPROC_NULL ((rpcproc_t)0) 205 0 stevel #define YPPROC_DOMAIN ((rpcproc_t)1) 206 0 stevel #define YPPROC_DOMAIN_NONACK ((rpcproc_t)2) 207 0 stevel #define YPPROC_MATCH ((rpcproc_t)3) 208 0 stevel #define YPPROC_FIRST ((rpcproc_t)4) 209 0 stevel #define YPPROC_NEXT ((rpcproc_t)5) 210 0 stevel #define YPPROC_XFR ((rpcproc_t)6) 211 0 stevel #define YPPROC_NEWXFR ((rpcproc_t)12) 212 0 stevel #define YPPROC_CLEAR ((rpcproc_t)7) 213 0 stevel #define YPPROC_ALL ((rpcproc_t)8) 214 0 stevel #define YPPROC_MASTER ((rpcproc_t)9) 215 0 stevel #define YPPROC_ORDER ((rpcproc_t)10) 216 0 stevel #define YPPROC_MAPLIST ((rpcproc_t)11) 217 0 stevel 218 0 stevel /* Return status values */ 219 0 stevel 220 0 stevel #define YP_TRUE (1) /* General purpose success code */ 221 0 stevel #define YP_NOMORE (2) /* No more entries in map */ 222 0 stevel #define YP_FALSE (0) /* General purpose failure code */ 223 0 stevel #define YP_NOMAP (-1) /* No such map in domain */ 224 0 stevel #define YP_NODOM (-2) /* Domain not supported */ 225 0 stevel #define YP_NOKEY (-3) /* No such key in map */ 226 0 stevel #define YP_BADOP (-4) /* Invalid operation */ 227 0 stevel #define YP_BADDB (-5) /* Server data base is bad */ 228 0 stevel #define YP_YPERR (-6) /* YP server error */ 229 0 stevel #define YP_BADARGS (-7) /* Request arguments bad */ 230 0 stevel #define YP_VERS (-8) /* YP server vers. mismatch - server */ 231 0 stevel /* can't supply requested service. */ 232 0 stevel 233 0 stevel enum ypreqtype {YPREQ_KEY = 1, YPREQ_NOKEY = 2, YPREQ_MAP_PARMS = 3}; 234 0 stevel struct yprequest { 235 0 stevel enum ypreqtype yp_reqtype; 236 0 stevel union { 237 0 stevel struct ypreq_key yp_req_keytype; 238 0 stevel struct ypreq_nokey yp_req_nokeytype; 239 0 stevel struct ypmap_parms yp_req_map_parmstype; 240 0 stevel }yp_reqbody; 241 0 stevel }; 242 0 stevel 243 0 stevel #define YPMATCH_REQTYPE YPREQ_KEY 244 0 stevel #define ypmatch_req_domain yp_reqbody.yp_req_keytype.domain 245 0 stevel #define ypmatch_req_map yp_reqbody.yp_req_keytype.map 246 0 stevel #define ypmatch_req_keydat yp_reqbody.yp_req_keytype.keydat 247 0 stevel #define ypmatch_req_keyptr yp_reqbody.yp_req_keytype.keydat.dptr 248 0 stevel #define ypmatch_req_keysize yp_reqbody.yp_req_keytype.keydat.dsize 249 0 stevel 250 0 stevel #define YPFIRST_REQTYPE YPREQ_NOKEY 251 0 stevel #define ypfirst_req_domain yp_reqbody.yp_req_nokeytype.domain 252 0 stevel #define ypfirst_req_map yp_reqbody.yp_req_nokeytype.map 253 0 stevel 254 0 stevel #define YPNEXT_REQTYPE YPREQ_KEY 255 0 stevel #define ypnext_req_domain yp_reqbody.yp_req_keytype.domain 256 0 stevel #define ypnext_req_map yp_reqbody.yp_req_keytype.map 257 0 stevel #define ypnext_req_keydat yp_reqbody.yp_req_keytype.keydat 258 0 stevel #define ypnext_req_keyptr yp_reqbody.yp_req_keytype.keydat.dptr 259 0 stevel #define ypnext_req_keysize yp_reqbody.yp_req_keytype.keydat.dsize 260 0 stevel 261 0 stevel #define YPPUSH_REQTYPE YPREQ_NOKEY 262 0 stevel #define yppush_req_domain yp_reqbody.yp_req_nokeytype.domain 263 0 stevel #define yppush_req_map yp_reqbody.yp_req_nokeytype.map 264 0 stevel 265 0 stevel #define YPPULL_REQTYPE YPREQ_NOKEY 266 0 stevel #define yppull_req_domain yp_reqbody.yp_req_nokeytype.domain 267 0 stevel #define yppull_req_map yp_reqbody.yp_req_nokeytype.map 268 0 stevel 269 0 stevel #define YPPOLL_REQTYPE YPREQ_NOKEY 270 0 stevel #define yppoll_req_domain yp_reqbody.yp_req_nokeytype.domain 271 0 stevel #define yppoll_req_map yp_reqbody.yp_req_nokeytype.map 272 0 stevel 273 0 stevel #define YPGET_REQTYPE YPREQ_MAP_PARMS 274 0 stevel #define ypget_req_domain yp_reqbody.yp_req_map_parmstype.domain 275 0 stevel #define ypget_req_map yp_reqbody.yp_req_map_parmstype.map 276 0 stevel #define ypget_req_ordernum yp_reqbody.yp_req_map_parmstype.ordernum 277 0 stevel #define ypget_req_owner yp_reqbody.yp_req_map_parmstype.owner 278 0 stevel 279 0 stevel enum ypresptype {YPRESP_VAL = 1, YPRESP_KEY_VAL = 2, YPRESP_MAP_PARMS = 3}; 280 0 stevel struct ypresponse { 281 0 stevel enum ypresptype yp_resptype; 282 0 stevel union { 283 0 stevel struct ypresp_val yp_resp_valtype; 284 0 stevel struct ypresp_key_val yp_resp_key_valtype; 285 0 stevel struct ypmap_parms yp_resp_map_parmstype; 286 0 stevel } yp_respbody; 287 0 stevel }; 288 0 stevel 289 0 stevel #define YPMATCH_RESPTYPE YPRESP_VAL 290 0 stevel #define ypmatch_resp_status yp_respbody.yp_resp_valtype.status 291 0 stevel #define ypmatch_resp_valdat yp_respbody.yp_resp_valtype.valdat 292 0 stevel #define ypmatch_resp_valptr yp_respbody.yp_resp_valtype.valdat.dptr 293 0 stevel #define ypmatch_resp_valsize yp_respbody.yp_resp_valtype.valdat.dsize 294 0 stevel 295 0 stevel #define YPFIRST_RESPTYPE YPRESP_KEY_VAL 296 0 stevel #define ypfirst_resp_status yp_respbody.yp_resp_key_valtype.status 297 0 stevel #define ypfirst_resp_keydat yp_respbody.yp_resp_key_valtype.keydat 298 0 stevel #define ypfirst_resp_keyptr yp_respbody.yp_resp_key_valtype.keydat.dptr 299 0 stevel #define ypfirst_resp_keysize yp_respbody.yp_resp_key_valtype.keydat.dsize 300 0 stevel #define ypfirst_resp_valdat yp_respbody.yp_resp_key_valtype.valdat 301 0 stevel #define ypfirst_resp_valptr yp_respbody.yp_resp_key_valtype.valdat.dptr 302 0 stevel #define ypfirst_resp_valsize yp_respbody.yp_resp_key_valtype.valdat.dsize 303 0 stevel 304 0 stevel #define YPNEXT_RESPTYPE YPRESP_KEY_VAL 305 0 stevel #define ypnext_resp_status yp_respbody.yp_resp_key_valtype.status 306 0 stevel #define ypnext_resp_keydat yp_respbody.yp_resp_key_valtype.keydat 307 0 stevel #define ypnext_resp_keyptr yp_respbody.yp_resp_key_valtype.keydat.dptr 308 0 stevel #define ypnext_resp_keysize yp_respbody.yp_resp_key_valtype.keydat.dsize 309 0 stevel #define ypnext_resp_valdat yp_respbody.yp_resp_key_valtype.valdat 310 0 stevel #define ypnext_resp_valptr yp_respbody.yp_resp_key_valtype.valdat.dptr 311 0 stevel #define ypnext_resp_valsize yp_respbody.yp_resp_key_valtype.valdat.dsize 312 0 stevel 313 0 stevel #define YPPOLL_RESPTYPE YPRESP_MAP_PARMS 314 0 stevel #define yppoll_resp_domain yp_respbody.yp_resp_map_parmstype.domain 315 0 stevel #define yppoll_resp_map yp_respbody.yp_resp_map_parmstype.map 316 0 stevel #define yppoll_resp_ordernum yp_respbody.yp_resp_map_parmstype.ordernum 317 0 stevel #define yppoll_resp_owner yp_respbody.yp_resp_map_parmstype.owner 318 0 stevel 319 0 stevel 320 0 stevel extern bool _xdr_yprequest(); 321 0 stevel extern bool _xdr_ypresponse(); 322 0 stevel /* 323 0 stevel * Protocol between clients (ypxfr, only) and yppush 324 0 stevel * yppush speaks a protocol in the transient range, which 325 0 stevel * is supplied to ypxfr as a command-line parameter when it 326 0 stevel * is activated by ypserv. 327 0 stevel */ 328 0 stevel #define YPPUSHVERS ((rpcvers_t)1) 329 0 stevel #define YPPUSHVERS_ORIG ((rpcvers_t)1) 330 0 stevel 331 0 stevel /* Procedure symbols */ 332 0 stevel 333 0 stevel #define YPPUSHPROC_NULL ((rpcproc_t)0) 334 0 stevel #define YPPUSHPROC_XFRRESP ((rpcproc_t)1) 335 0 stevel 336 0 stevel struct yppushresp_xfr { 337 0 stevel unsigned int transid; 338 0 stevel unsigned int status; 339 0 stevel }; 340 0 stevel 341 0 stevel /* Status values for yppushresp_xfr.status */ 342 0 stevel 343 0 stevel #define YPPUSH_SUCC (1) /* Success */ 344 0 stevel #define YPPUSH_AGE (2) /* Master's version not newer */ 345 0 stevel #define YPPUSH_NOMAP (-1) /* Can't find server for map */ 346 0 stevel #define YPPUSH_NODOM (-2) /* Domain not supported */ 347 0 stevel #define YPPUSH_RSRC (-3) /* Local resouce alloc failure */ 348 0 stevel #define YPPUSH_RPC (-4) /* RPC failure talking to server */ 349 0 stevel #define YPPUSH_MADDR (-5) /* Can't get master address */ 350 0 stevel #define YPPUSH_YPERR (-6) /* YP server/map db error */ 351 0 stevel #define YPPUSH_BADARGS (-7) /* Request arguments bad */ 352 0 stevel #define YPPUSH_DBM (-8) /* Local dbm operation failed */ 353 0 stevel #define YPPUSH_FILE (-9) /* Local file I/O operation failed */ 354 0 stevel #define YPPUSH_SKEW (-10) /* Map version skew during transfer */ 355 0 stevel #define YPPUSH_CLEAR (-11) /* Can't send "Clear" req to local */ 356 0 stevel /* ypserv */ 357 0 stevel #define YPPUSH_FORCE (-12) /* No local order number in map - */ 358 0 stevel /* use -f flag. */ 359 0 stevel #define YPPUSH_XFRERR (-13) /* ypxfr error */ 360 0 stevel #define YPPUSH_REFUSED (-14) /* Transfer request refused by ypserv */ 361 0 stevel #define YPPUSH_NOALIAS (-15) /* Alias not found for map or domain */ 362 0 stevel 363 0 stevel #ifdef __STDC__ 364 0 stevel extern bool xdr_datum(XDR *, datum *); 365 0 stevel extern bool xdr_ypdomain_wrap_string(XDR *, char **); 366 0 stevel extern bool xdr_ypmap_wrap_string(XDR *, char **); 367 0 stevel extern bool xdr_ypreq_key(XDR *, struct ypreq_key *); 368 0 stevel extern bool xdr_ypreq_nokey(XDR *, struct ypreq_nokey *); 369 0 stevel extern bool xdr_ypreq_xfr(XDR *, struct ypreq_xfr *); 370 0 stevel extern bool xdr_ypreq_newxfr(XDR *, struct ypreq_newxfr *); 371 0 stevel extern bool xdr_ypresp_val(XDR *, struct ypresp_val *); 372 0 stevel extern bool xdr_ypresp_key_val(XDR *, struct ypresp_key_val *); 373 0 stevel extern bool xdr_ypmap_parms(XDR *, struct ypmap_parms *); 374 0 stevel extern bool xdr_ypowner_wrap_string(XDR *, char **); 375 0 stevel extern bool xdr_yppushresp_xfr(XDR *, struct yppushresp_xfr *); 376 0 stevel extern bool xdr_ypresp_order(XDR *, struct ypresp_order *); 377 0 stevel extern bool xdr_ypresp_master(XDR *, struct ypresp_master *); 378 0 stevel extern bool xdr_ypall(XDR *, struct ypall_callback *); 379 0 stevel extern bool xdr_ypresp_maplist(XDR *, struct ypresp_maplist *); 380 0 stevel 381 0 stevel #else 382 0 stevel 383 0 stevel extern bool xdr_datum(); 384 0 stevel extern bool xdr_ypdomain_wrap_string(); 385 0 stevel extern bool xdr_ypmap_wrap_string(); 386 0 stevel extern bool xdr_ypreq_key(); 387 0 stevel extern bool xdr_ypreq_nokey(); 388 0 stevel extern bool xdr_ypreq_xfr(); 389 0 stevel extern bool xdr_ypreq_newxfr(); 390 0 stevel extern bool xdr_ypresp_val(); 391 0 stevel extern bool xdr_ypresp_key_val(); 392 0 stevel extern bool xdr_yp_inaddr(); 393 0 stevel extern bool xdr_ypmap_parms(); 394 0 stevel extern bool xdr_ypowner_wrap_string(); 395 0 stevel extern bool xdr_yppushresp_xfr(); 396 0 stevel extern bool xdr_ypresp_order(); 397 0 stevel extern bool xdr_ypresp_master(); 398 0 stevel extern bool xdr_ypall(); 399 0 stevel extern bool xdr_ypresp_maplist(); 400 0 stevel #endif /* __STDC__ */ 401 0 stevel 402 0 stevel #ifdef __cplusplus 403 0 stevel } 404 0 stevel #endif 405 0 stevel 406 0 stevel #endif /* _RPCSVC_YP_PROT_H */ 407