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