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 1997 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 /* 30 * This file contains symbols and structures defining the rpc protocol 31 * between the NIS clients and the NIS servers. The servers 32 * are the NIS database servers, and the NIS binders. 33 */ 34 35 /* 36 * The following procedures are supported by the protocol: 37 * 38 * YPPROC_NULL() returns () takes nothing, returns nothing. This indicates 39 * that the NIS server is alive. 40 * 41 * YPPROC_DOMAIN (char *) returns (bool_t) TRUE. Indicates that the 42 * responding NIS server does serve the named domain; FALSE indicates no 43 * support. 44 * 45 * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the NIS server does serve 46 * the named domain, otherwise does not return. Used in the broadcast case. 47 * 48 * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val). Returns the 49 * right-hand value for a passed left-hand key, within a named map and 50 * domain. 51 * 52 * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val). 53 * Returns the first key-value pair from a named domain and map. 54 * 55 * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val). Returns 56 * the key-value pair following a passed key-value pair within a named 57 * domain and map. 58 * 59 * YPPROC_XFR (struct ypreq_xfr) returns nothing. Indicates to a server that 60 * a map should be updated. 61 * 62 * YPPROC_CLEAR takes nothing, returns nothing. Instructs a NIS server to 63 * close the current map, so that old versions of the disk file don't get 64 * held open. 65 * 66 * YPPROC_ALL (struct ypreq_nokey), returns 67 * union switch (bool more) { 68 * TRUE: (struct ypresp_key_val); 69 * FALSE: (struct) {}; 70 * } 71 * 72 * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master) 73 * 74 * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order) 75 * 76 * YPPROC_MAPLIST (char *), returns (struct ypmaplist *) 77 */ 78 #ifndef BOOL_DEFINED 79 typedef unsigned int bool; 80 #define BOOL_DEFINED 81 #endif 82 83 extern bool xdr_datum(); 84 extern bool xdr_ypdomain_wrap_string(); 85 extern bool xdr_ypmap_wrap_string(); 86 extern bool xdr_ypreq_key(); 87 extern bool xdr_ypreq_nokey(); 88 extern bool xdr_ypreq_xfr(); 89 extern bool xdr_ypresp_val(); 90 extern bool xdr_ypresp_key_val(); 91 extern bool xdr_ypbind_resp(); 92 extern bool xdr_ypbind_setdom(); 93 extern bool xdr_yp_inaddr(); 94 extern bool xdr_ypmap_parms(); 95 extern bool xdr_ypowner_wrap_string(); 96 extern bool xdr_yppushresp_xfr(); 97 extern bool xdr_ypresp_order(); 98 extern bool xdr_ypresp_master(); 99 extern bool xdr_ypall(); 100 extern bool xdr_ypresp_maplist(); 101 102 /* Program and version symbols, magic numbers */ 103 104 #define YPPROG ((u_long)100004) 105 #define YPVERS ((u_long)2) 106 #define YPVERS_ORIG ((u_long)1) 107 #define YPMAXRECORD ((u_long)1024) 108 #define YPMAXDOMAIN ((u_long)256) 109 #define YPMAXMAP ((u_long)64) 110 #define YPMAXPEER ((u_long)256) 111 112 /* byte size of a large NIS packet */ 113 #define YPMSGSZ 1600 114 115 #ifndef DATUM 116 typedef struct { 117 char *dptr; 118 int dsize; 119 } datum; 120 #define DATUM 121 #endif 122 123 struct ypmap_parms { 124 char *domain; /* Null string means not available */ 125 char *map; /* Null string means not available */ 126 unsigned long int ordernum; /* 0 means not available */ 127 char *owner; /* Null string means not available */ 128 }; 129 130 /* 131 * Request parameter structures 132 */ 133 134 struct ypreq_key { 135 char *domain; 136 char *map; 137 datum keydat; 138 }; 139 140 struct ypreq_nokey { 141 char *domain; 142 char *map; 143 }; 144 145 struct ypreq_xfr { 146 struct ypmap_parms map_parms; 147 unsigned long transid; 148 unsigned long proto; 149 unsigned short port; 150 }; 151 #define ypxfr_domain map_parms.domain 152 #define ypxfr_map map_parms.map 153 #define ypxfr_ordernum map_parms.ordernum 154 #define ypxfr_owner map_parms.owner 155 156 /* 157 * Response parameter structures 158 */ 159 160 struct ypresp_val { 161 long unsigned status; 162 datum valdat; 163 }; 164 165 struct ypresp_key_val { 166 long unsigned status; 167 datum keydat; 168 datum valdat; 169 }; 170 171 struct ypresp_master { 172 long unsigned status; 173 char *master; 174 }; 175 176 struct ypresp_order { 177 long unsigned status; 178 unsigned long int ordernum; 179 }; 180 181 struct ypmaplist { 182 char ypml_name[YPMAXMAP + 1]; 183 struct ypmaplist *ypml_next; 184 }; 185 186 struct ypresp_maplist { 187 long unsigned status; 188 struct ypmaplist *list; 189 }; 190 191 /* 192 * Procedure symbols. YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK 193 * must keep the same values (0, 1, and 2) that they had in the first version 194 * of the protocol. 195 */ 196 197 #define YPPROC_NULL ((u_long)0) 198 #define YPPROC_DOMAIN ((u_long)1) 199 #define YPPROC_DOMAIN_NONACK ((u_long)2) 200 #define YPPROC_MATCH ((u_long)3) 201 #define YPPROC_FIRST ((u_long)4) 202 #define YPPROC_NEXT ((u_long)5) 203 #define YPPROC_XFR ((u_long)6) 204 #define YPPROC_CLEAR ((u_long)7) 205 #define YPPROC_ALL ((u_long)8) 206 #define YPPROC_MASTER ((u_long)9) 207 #define YPPROC_ORDER ((u_long)10) 208 #define YPPROC_MAPLIST ((u_long)11) 209 210 /* Return status values */ 211 212 #define YP_TRUE ((long)1) /* General purpose success code */ 213 #define YP_NOMORE ((long)2) /* No more entries in map */ 214 #define YP_FALSE ((long)0) /* General purpose failure code */ 215 #define YP_NOMAP ((long)-1) /* No such map in domain */ 216 #define YP_NODOM ((long)-2) /* Domain not supported */ 217 #define YP_NOKEY ((long)-3) /* No such key in map */ 218 #define YP_BADOP ((long)-4) /* Invalid operation */ 219 #define YP_BADDB ((long)-5) /* Server data base is bad */ 220 #define YP_YPERR ((long)-6) /* NIS server error */ 221 #define YP_BADARGS ((long)-7) /* Request arguments bad */ 222 #define YP_VERS ((long)-8) /* NIS server version mismatch - server 223 * can't supply requested service. */ 224 225 /* 226 * Domain binding data structure, used by ypclnt package and ypserv modules. 227 * Users of the ypclnt package (or of this protocol) don't HAVE to know about 228 * it, but it must be available to users because _yp_dobind is a public 229 * interface. 230 */ 231 232 struct dom_binding { 233 struct dom_binding *dom_pnext; 234 char dom_domain[YPMAXDOMAIN + 1]; 235 struct sockaddr_in dom_server_addr; 236 unsigned short int dom_server_port; 237 int dom_socket; 238 CLIENT *dom_client; 239 unsigned short int dom_local_port; 240 long int dom_vers; 241 }; 242 243 244 /* 245 * Protocol between clients and NIS binder servers 246 */ 247 248 /* 249 * The following procedures are supported by the protocol: 250 * 251 * YPBINDPROC_NULL() returns () 252 * takes nothing, returns nothing 253 * 254 * YPBINDPROC_DOMAIN takes (char *) returns (struct ypbind_resp) 255 * 256 * YPBINDPROC_SETDOM takes (struct ypbind_setdom) returns nothing 257 */ 258 259 /* Program and version symbols, magic numbers */ 260 261 #define YPBINDPROG ((u_long)100007) 262 #define YPBINDVERS ((u_long)2) 263 #define YPBINDVERS_ORIG ((u_long)1) 264 265 /* Procedure symbols */ 266 267 #define YPBINDPROC_NULL ((u_long)0) 268 #define YPBINDPROC_DOMAIN ((u_long)1) 269 #define YPBINDPROC_SETDOM ((u_long)2) 270 /* 271 * Response structure and overall result status codes. Success and failure 272 * represent two separate response message types. 273 */ 274 275 enum ypbind_resptype {YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2}; 276 277 struct ypbind_binding { 278 struct in_addr ypbind_binding_addr; /* In network order */ 279 unsigned short int ypbind_binding_port; /* In network order */ 280 }; 281 struct ypbind_resp { 282 enum ypbind_resptype ypbind_status; 283 union { 284 unsigned long ypbind_error; 285 struct ypbind_binding ypbind_bindinfo; 286 } ypbind_respbody; 287 }; 288 289 290 /* Detailed failure reason codes for response field ypbind_error*/ 291 292 #define YPBIND_ERR_ERR 1 /* Internal error */ 293 #define YPBIND_ERR_NOSERV 2 /* No bound server for passed domain */ 294 #define YPBIND_ERR_RESC 3 /* System resource allocation failure */ 295 296 /* 297 * Request data structure for ypbind "Set domain" procedure. 298 */ 299 struct ypbind_setdom { 300 char ypsetdom_domain[YPMAXDOMAIN + 1]; 301 struct ypbind_binding ypsetdom_binding; 302 unsigned short ypsetdom_vers; 303 }; 304 #define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr 305 #define ypsetdom_port ypsetdom_binding.ypbind_binding_port 306 307 /* 308 * Protocol between clients (ypxfr, only) and yppush 309 * yppush speaks a protocol in the transient range, which 310 * is supplied to ypxfr as a command-line parameter when it 311 * is activated by ypserv. 312 */ 313 #define YPPUSHVERS ((u_long) 1) 314 #define YPPUSHVERS_ORIG ((u_long)1) 315 316 /* Procedure symbols */ 317 318 #define YPPUSHPROC_NULL ((u_long)0) 319 #define YPPUSHPROC_XFRRESP ((u_long)1) 320 321 struct yppushresp_xfr { 322 unsigned long transid; 323 unsigned long status; 324 }; 325 326 /* Status values for yppushresp_xfr.status */ 327 328 #define YPPUSH_SUCC ((long)1) /* Success */ 329 #define YPPUSH_AGE ((long)2) /* Master's version not newer */ 330 #define YPPUSH_NOMAP ((long)-1) /* Can't find server for map */ 331 #define YPPUSH_NODOM ((long)-2) /* Domain not supported */ 332 #define YPPUSH_RSRC ((long)-3) /* Local resouce alloc failure */ 333 #define YPPUSH_RPC ((long)-4) /* RPC failure talking to server */ 334 #define YPPUSH_MADDR ((long)-5) /* Can't get master address */ 335 #define YPPUSH_YPERR ((long)-6) /* NIS server/map db error */ 336 #define YPPUSH_BADARGS ((long)-7) /* Request arguments bad */ 337 #define YPPUSH_DBM ((long)-8) /* Local dbm operation failed */ 338 #define YPPUSH_FILE ((long)-9) /* Local file I/O operation failed */ 339 #define YPPUSH_SKEW ((long)-10) /* Map version skew during transfer */ 340 #define YPPUSH_CLEAR ((long)-11) /* Can't send "Clear" req to local 341 * ypserv */ 342 #define YPPUSH_FORCE ((long)-12) /* No local order number in map - 343 * use -f flag. */ 344 #define YPPUSH_XFRERR ((long)-13) /* ypxfr error */ 345 #define YPPUSH_REFUSED ((long)-14) /* Transfer request refused by ypserv */ 346 347 348