nis_xdr.c revision 132:e3f7eaf7dde4
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/* 24 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28#pragma ident "%Z%%M% %I% %E% SMI" 29 30/* 31 * Originally generated using rpcgen. 32 */ 33 34#include <rpc/rpc.h> 35#include <rpcsvc/nis.h> 36 37bool_t 38xdr_nis_attr(XDR *xdrs, nis_attr *objp) 39{ 40 if (!xdr_string(xdrs, &objp->zattr_ndx, ~0)) 41 return (FALSE); 42 return (xdr_bytes(xdrs, (char **)&objp->zattr_val.zattr_val_val, 43 (uint_t *)&objp->zattr_val.zattr_val_len, ~0)); 44} 45 46bool_t 47xdr_nis_name(XDR *xdrs, nis_name *objp) 48{ 49 return (xdr_string(xdrs, objp, ~0)); 50} 51 52bool_t 53xdr_zotypes(XDR *xdrs, zotypes *objp) 54{ 55 return (xdr_enum(xdrs, (enum_t *)objp)); 56} 57 58bool_t 59xdr_nstype(XDR *xdrs, nstype *objp) 60{ 61 return (xdr_enum(xdrs, (enum_t *)objp)); 62} 63 64bool_t 65xdr_oar_mask(XDR *xdrs, oar_mask *objp) 66{ 67 if (!xdr_u_int(xdrs, &objp->oa_rights)) 68 return (FALSE); 69 return (xdr_zotypes(xdrs, &objp->oa_otype)); 70} 71 72bool_t 73xdr_endpoint(XDR *xdrs, endpoint *objp) 74{ 75 if (!xdr_string(xdrs, &objp->uaddr, ~0)) 76 return (FALSE); 77 if (!xdr_string(xdrs, &objp->family, ~0)) 78 return (FALSE); 79 return (xdr_string(xdrs, &objp->proto, ~0)); 80} 81 82bool_t 83xdr_nis_server(XDR *xdrs, nis_server *objp) 84{ 85 if (!xdr_nis_name(xdrs, &objp->name)) 86 return (FALSE); 87 if (!xdr_array(xdrs, (char **)&objp->ep.ep_val, 88 (uint_t *)&objp->ep.ep_len, ~0, 89 sizeof (endpoint), (xdrproc_t)xdr_endpoint)) 90 return (FALSE); 91 if (!xdr_u_int(xdrs, &objp->key_type)) 92 return (FALSE); 93 return (xdr_netobj(xdrs, &objp->pkey)); 94} 95 96bool_t 97xdr_directory_obj(XDR *xdrs, directory_obj *objp) 98{ 99 if (!xdr_nis_name(xdrs, &objp->do_name)) 100 return (FALSE); 101 if (!xdr_nstype(xdrs, &objp->do_type)) 102 return (FALSE); 103 if (!xdr_array(xdrs, (char **)&objp->do_servers.do_servers_val, 104 (uint_t *)&objp->do_servers.do_servers_len, ~0, 105 sizeof (nis_server), (xdrproc_t)xdr_nis_server)) 106 return (FALSE); 107 if (!xdr_uint32_t(xdrs, &objp->do_ttl)) 108 return (FALSE); 109 return (xdr_array(xdrs, (char **)&objp->do_armask.do_armask_val, 110 (uint_t *)&objp->do_armask.do_armask_len, ~0, 111 sizeof (oar_mask), (xdrproc_t)xdr_oar_mask)); 112} 113 114bool_t 115xdr_entry_col(XDR *xdrs, entry_col *objp) 116{ 117 if (!xdr_u_int(xdrs, &objp->ec_flags)) 118 return (FALSE); 119 return (xdr_bytes(xdrs, (char **)&objp->ec_value.ec_value_val, 120 (uint_t *)&objp->ec_value.ec_value_len, ~0)); 121} 122 123bool_t 124xdr_entry_obj(XDR *xdrs, entry_obj *objp) 125{ 126 if (!xdr_string(xdrs, &objp->en_type, ~0)) 127 return (FALSE); 128 return (xdr_array(xdrs, (char **)&objp->en_cols.en_cols_val, 129 (uint_t *)&objp->en_cols.en_cols_len, ~0, 130 sizeof (entry_col), (xdrproc_t)xdr_entry_col)); 131} 132 133bool_t 134xdr_group_obj(XDR *xdrs, group_obj *objp) 135{ 136 if (!xdr_u_int(xdrs, &objp->gr_flags)) 137 return (FALSE); 138 return (xdr_array(xdrs, (char **)&objp->gr_members.gr_members_val, 139 (uint_t *)&objp->gr_members.gr_members_len, ~0, 140 sizeof (nis_name), (xdrproc_t)xdr_nis_name)); 141} 142 143bool_t 144xdr_link_obj(XDR *xdrs, link_obj *objp) 145{ 146 if (!xdr_zotypes(xdrs, &objp->li_rtype)) 147 return (FALSE); 148 if (!xdr_array(xdrs, (char **)&objp->li_attrs.li_attrs_val, 149 (uint_t *)&objp->li_attrs.li_attrs_len, ~0, 150 sizeof (nis_attr), (xdrproc_t)xdr_nis_attr)) 151 return (FALSE); 152 return (xdr_nis_name(xdrs, &objp->li_name)); 153} 154 155bool_t 156xdr_table_col(XDR *xdrs, table_col *objp) 157{ 158 if (!xdr_string(xdrs, &objp->tc_name, 64)) 159 return (FALSE); 160 if (!xdr_u_int(xdrs, &objp->tc_flags)) 161 return (FALSE); 162 return (xdr_u_int(xdrs, &objp->tc_rights)); 163} 164 165bool_t 166xdr_table_obj(XDR *xdrs, table_obj *objp) 167{ 168 if (!xdr_string(xdrs, &objp->ta_type, 64)) 169 return (FALSE); 170 if (!xdr_int(xdrs, &objp->ta_maxcol)) 171 return (FALSE); 172 if (!xdr_u_char(xdrs, &objp->ta_sep)) 173 return (FALSE); 174 if (!xdr_array(xdrs, (char **)&objp->ta_cols.ta_cols_val, 175 (uint_t *)&objp->ta_cols.ta_cols_len, ~0, 176 sizeof (table_col), (xdrproc_t)xdr_table_col)) 177 return (FALSE); 178 return (xdr_string(xdrs, &objp->ta_path, ~0)); 179} 180 181bool_t 182xdr_objdata(XDR *xdrs, objdata *objp) 183{ 184 if (!xdr_zotypes(xdrs, &objp->zo_type)) 185 return (FALSE); 186 187 switch (objp->zo_type) { 188 case NIS_DIRECTORY_OBJ: 189 return (xdr_directory_obj(xdrs, &objp->objdata_u.di_data)); 190 case NIS_GROUP_OBJ: 191 return (xdr_group_obj(xdrs, &objp->objdata_u.gr_data)); 192 case NIS_TABLE_OBJ: 193 return (xdr_table_obj(xdrs, &objp->objdata_u.ta_data)); 194 case NIS_ENTRY_OBJ: 195 return (xdr_entry_obj(xdrs, &objp->objdata_u.en_data)); 196 case NIS_LINK_OBJ: 197 return (xdr_link_obj(xdrs, &objp->objdata_u.li_data)); 198 case NIS_PRIVATE_OBJ: 199 return (xdr_bytes(xdrs, 200 (char **)&objp->objdata_u.po_data.po_data_val, 201 (uint_t *)&objp->objdata_u.po_data.po_data_len, ~0)); 202 case NIS_NO_OBJ: 203 return (TRUE); 204 case NIS_BOGUS_OBJ: 205 return (TRUE); 206 } 207 return (TRUE); 208} 209 210bool_t 211xdr_nis_oid(XDR *xdrs, nis_oid *objp) 212{ 213 if (!xdr_uint32_t(xdrs, &objp->ctime)) 214 return (FALSE); 215 return (xdr_uint32_t(xdrs, &objp->mtime)); 216} 217 218bool_t 219xdr_nis_object(XDR *xdrs, nis_object *objp) 220{ 221 if (!xdr_nis_oid(xdrs, &objp->zo_oid)) 222 return (FALSE); 223 if (!xdr_nis_name(xdrs, &objp->zo_name)) 224 return (FALSE); 225 if (!xdr_nis_name(xdrs, &objp->zo_owner)) 226 return (FALSE); 227 if (!xdr_nis_name(xdrs, &objp->zo_group)) 228 return (FALSE); 229 if (!xdr_nis_name(xdrs, &objp->zo_domain)) 230 return (FALSE); 231 if (!xdr_u_int(xdrs, &objp->zo_access)) 232 return (FALSE); 233 if (!xdr_uint32_t(xdrs, &objp->zo_ttl)) 234 return (FALSE); 235 return (xdr_objdata(xdrs, &objp->zo_data)); 236} 237 238bool_t 239xdr_nis_error(XDR *xdrs, nis_error *objp) 240{ 241 return (xdr_enum(xdrs, (enum_t *)objp)); 242} 243 244bool_t 245xdr_nis_result(XDR *xdrs, nis_result *objp) 246{ 247 if (!xdr_nis_error(xdrs, &objp->status)) 248 return (FALSE); 249 if (!xdr_array(xdrs, (char **)&objp->objects.objects_val, 250 (uint_t *)&objp->objects.objects_len, ~0, 251 sizeof (nis_object), (xdrproc_t)xdr_nis_object)) 252 return (FALSE); 253 if (!xdr_netobj(xdrs, &objp->cookie)) 254 return (FALSE); 255 if (!xdr_uint32_t(xdrs, &objp->zticks)) 256 return (FALSE); 257 if (!xdr_uint32_t(xdrs, &objp->dticks)) 258 return (FALSE); 259 if (!xdr_uint32_t(xdrs, &objp->aticks)) 260 return (FALSE); 261 return (xdr_uint32_t(xdrs, &objp->cticks)); 262} 263 264bool_t 265xdr_ns_request(XDR *xdrs, ns_request *objp) 266{ 267 if (!xdr_nis_name(xdrs, &objp->ns_name)) 268 return (FALSE); 269 return (xdr_array(xdrs, (char **)&objp->ns_object.ns_object_val, 270 (uint_t *)&objp->ns_object.ns_object_len, 1, 271 sizeof (nis_object), (xdrproc_t)xdr_nis_object)); 272} 273 274bool_t 275xdr_ib_request(XDR *xdrs, ib_request *objp) 276{ 277 if (!xdr_nis_name(xdrs, &objp->ibr_name)) 278 return (FALSE); 279 if (!xdr_array(xdrs, (char **)&objp->ibr_srch.ibr_srch_val, 280 (uint_t *)&objp->ibr_srch.ibr_srch_len, ~0, 281 sizeof (nis_attr), (xdrproc_t)xdr_nis_attr)) 282 return (FALSE); 283 if (!xdr_u_int(xdrs, &objp->ibr_flags)) 284 return (FALSE); 285 if (!xdr_array(xdrs, (char **)&objp->ibr_obj.ibr_obj_val, 286 (uint_t *)&objp->ibr_obj.ibr_obj_len, 1, 287 sizeof (nis_object), (xdrproc_t)xdr_nis_object)) 288 return (FALSE); 289 if (!xdr_array(xdrs, (char **)&objp->ibr_cbhost.ibr_cbhost_val, 290 (uint_t *)&objp->ibr_cbhost.ibr_cbhost_len, 1, 291 sizeof (nis_server), (xdrproc_t)xdr_nis_server)) 292 return (FALSE); 293 if (!xdr_u_int(xdrs, &objp->ibr_bufsize)) 294 return (FALSE); 295 return (xdr_netobj(xdrs, &objp->ibr_cookie)); 296} 297 298bool_t 299xdr_ping_args(XDR *xdrs, ping_args *objp) 300{ 301 if (!xdr_nis_name(xdrs, &objp->dir)) 302 return (FALSE); 303 return (xdr_uint32_t(xdrs, &objp->stamp)); 304} 305 306bool_t 307xdr_log_entry_t(XDR *xdrs, log_entry_t *objp) 308{ 309 return (xdr_enum(xdrs, (enum_t *)objp)); 310} 311 312bool_t 313xdr_log_entry(XDR *xdrs, log_entry *objp) 314{ 315 if (!xdr_uint32_t(xdrs, &objp->le_time)) 316 return (FALSE); 317 if (!xdr_log_entry_t(xdrs, &objp->le_type)) 318 return (FALSE); 319 if (!xdr_nis_name(xdrs, &objp->le_princp)) 320 return (FALSE); 321 if (!xdr_nis_name(xdrs, &objp->le_name)) 322 return (FALSE); 323 if (!xdr_array(xdrs, (char **)&objp->le_attrs.le_attrs_val, 324 (uint_t *)&objp->le_attrs.le_attrs_len, ~0, 325 sizeof (nis_attr), (xdrproc_t)xdr_nis_attr)) 326 return (FALSE); 327 return (xdr_nis_object(xdrs, &objp->le_object)); 328} 329 330bool_t 331xdr_log_result(XDR *xdrs, log_result *objp) 332{ 333 if (!xdr_nis_error(xdrs, &objp->lr_status)) 334 return (FALSE); 335 if (!xdr_netobj(xdrs, &objp->lr_cookie)) 336 return (FALSE); 337 return (xdr_array(xdrs, (char **)&objp->lr_entries.lr_entries_val, 338 (uint_t *)&objp->lr_entries.lr_entries_len, ~0, 339 sizeof (log_entry), (xdrproc_t)xdr_log_entry)); 340} 341 342bool_t 343xdr_cp_result(XDR *xdrs, cp_result *objp) 344{ 345 if (!xdr_nis_error(xdrs, &objp->cp_status)) 346 return (FALSE); 347 if (!xdr_uint32_t(xdrs, &objp->cp_zticks)) 348 return (FALSE); 349 return (xdr_uint32_t(xdrs, &objp->cp_dticks)); 350} 351 352bool_t 353xdr_nis_tag(XDR *xdrs, nis_tag *objp) 354{ 355 if (!xdr_u_int(xdrs, &objp->tag_type)) 356 return (FALSE); 357 return (xdr_string(xdrs, &objp->tag_val, ~0)); 358} 359 360bool_t 361xdr_nis_taglist(XDR *xdrs, nis_taglist *objp) 362{ 363 return (xdr_array(xdrs, (char **)&objp->tags.tags_val, 364 (uint_t *)&objp->tags.tags_len, ~0, 365 sizeof (nis_tag), (xdrproc_t)xdr_nis_tag)); 366} 367 368bool_t 369xdr_dump_args(XDR *xdrs, dump_args *objp) 370{ 371 if (!xdr_nis_name(xdrs, &objp->da_dir)) 372 return (FALSE); 373 if (!xdr_uint32_t(xdrs, &objp->da_time)) 374 return (FALSE); 375 return (xdr_array(xdrs, (char **)&objp->da_cbhost.da_cbhost_val, 376 (uint_t *)&objp->da_cbhost.da_cbhost_len, 1, 377 sizeof (nis_server), (xdrproc_t)xdr_nis_server)); 378} 379 380bool_t 381xdr_fd_args(XDR *xdrs, fd_args *objp) 382{ 383 if (!xdr_nis_name(xdrs, &objp->dir_name)) 384 return (FALSE); 385 return (xdr_nis_name(xdrs, &objp->requester)); 386} 387 388bool_t 389xdr_fd_result(XDR *xdrs, fd_result *objp) 390{ 391 if (!xdr_nis_error(xdrs, &objp->status)) 392 return (FALSE); 393 if (!xdr_nis_name(xdrs, &objp->source)) 394 return (FALSE); 395 if (!xdr_bytes(xdrs, (char **)&objp->dir_data.dir_data_val, 396 (uint_t *)&objp->dir_data.dir_data_len, ~0)) 397 return (FALSE); 398 return (xdr_bytes(xdrs, (char **)&objp->signature.signature_val, 399 (uint_t *)&objp->signature.signature_len, ~0)); 400} 401/* 402 * Structures used for server binding. 403 */ 404 405bool_t 406xdr_nis_bound_endpoint(XDR *xdrs, nis_bound_endpoint *objp) 407{ 408 rpc_inline_t *buf; 409 410 if (xdrs->x_op == XDR_ENCODE) { 411 if (!xdr_endpoint(xdrs, &objp->ep)) 412 return (FALSE); 413 buf = XDR_INLINE(xdrs, 5 * BYTES_PER_XDR_UNIT); 414 if (buf == NULL) { 415 if (!xdr_int(xdrs, &objp->generation)) 416 return (FALSE); 417 if (!xdr_int(xdrs, &objp->rank)) 418 return (FALSE); 419 if (!xdr_u_int(xdrs, &objp->flags)) 420 return (FALSE); 421 if (!xdr_int(xdrs, &objp->hostnum)) 422 return (FALSE); 423 if (!xdr_int(xdrs, &objp->epnum)) 424 return (FALSE); 425 426 } else { 427#if defined(_LP64) 428 IXDR_PUT_INT32(buf, objp->generation); 429 IXDR_PUT_INT32(buf, objp->rank); 430 IXDR_PUT_U_INT32(buf, objp->flags); 431 IXDR_PUT_INT32(buf, objp->hostnum); 432 IXDR_PUT_INT32(buf, objp->epnum); 433#else 434 IXDR_PUT_LONG(buf, objp->generation); 435 IXDR_PUT_LONG(buf, objp->rank); 436 IXDR_PUT_U_LONG(buf, objp->flags); 437 IXDR_PUT_LONG(buf, objp->hostnum); 438 IXDR_PUT_LONG(buf, objp->epnum); 439#endif 440 } 441 if (!xdr_nis_name(xdrs, &objp->uaddr)) 442 return (FALSE); 443 return (xdr_endpoint(xdrs, &objp->cbep)); 444 } 445 if (xdrs->x_op == XDR_DECODE) { 446 if (!xdr_endpoint(xdrs, &objp->ep)) 447 return (FALSE); 448 buf = XDR_INLINE(xdrs, 5 * BYTES_PER_XDR_UNIT); 449 if (buf == NULL) { 450 if (!xdr_int(xdrs, &objp->generation)) 451 return (FALSE); 452 if (!xdr_int(xdrs, &objp->rank)) 453 return (FALSE); 454 if (!xdr_u_int(xdrs, &objp->flags)) 455 return (FALSE); 456 if (!xdr_int(xdrs, &objp->hostnum)) 457 return (FALSE); 458 if (!xdr_int(xdrs, &objp->epnum)) 459 return (FALSE); 460 461 } else { 462#if defined(_LP64) 463 objp->generation = IXDR_GET_INT32(buf); 464 objp->rank = IXDR_GET_INT32(buf); 465 objp->flags = IXDR_GET_U_INT32(buf); 466 objp->hostnum = IXDR_GET_INT32(buf); 467 objp->epnum = IXDR_GET_INT32(buf); 468#else 469 objp->generation = IXDR_GET_LONG(buf); 470 objp->rank = IXDR_GET_LONG(buf); 471 objp->flags = IXDR_GET_U_LONG(buf); 472 objp->hostnum = IXDR_GET_LONG(buf); 473 objp->epnum = IXDR_GET_LONG(buf); 474#endif 475 } 476 if (!xdr_nis_name(xdrs, &objp->uaddr)) 477 return (FALSE); 478 return (xdr_endpoint(xdrs, &objp->cbep)); 479 } 480 481 if (!xdr_endpoint(xdrs, &objp->ep)) 482 return (FALSE); 483 if (!xdr_int(xdrs, &objp->generation)) 484 return (FALSE); 485 if (!xdr_int(xdrs, &objp->rank)) 486 return (FALSE); 487 if (!xdr_u_int(xdrs, &objp->flags)) 488 return (FALSE); 489 if (!xdr_int(xdrs, &objp->hostnum)) 490 return (FALSE); 491 if (!xdr_int(xdrs, &objp->epnum)) 492 return (FALSE); 493 if (!xdr_nis_name(xdrs, &objp->uaddr)) 494 return (FALSE); 495 return (xdr_endpoint(xdrs, &objp->cbep)); 496} 497 498bool_t 499xdr_nis_bound_directory(XDR *xdrs, nis_bound_directory *objp) 500{ 501 if (!xdr_int(xdrs, &objp->generation)) 502 return (FALSE); 503 if (!xdr_int(xdrs, &objp->min_rank)) 504 return (FALSE); 505 if (!xdr_int(xdrs, &objp->optimal_rank)) 506 return (FALSE); 507 if (!xdr_directory_obj(xdrs, &objp->dobj)) 508 return (FALSE); 509 return (xdr_array(xdrs, (char **)&objp->BEP.BEP_val, 510 (uint_t *)&objp->BEP.BEP_len, ~0, 511 sizeof (nis_bound_endpoint), 512 (xdrproc_t)xdr_nis_bound_endpoint)); 513} 514 515bool_t 516xdr_nis_active_endpoint(XDR *xdrs, nis_active_endpoint *objp) 517{ 518 if (!xdr_endpoint(xdrs, &objp->ep)) 519 return (FALSE); 520 if (!xdr_nis_name(xdrs, &objp->hostname)) 521 return (FALSE); 522 if (!xdr_int(xdrs, &objp->rank)) 523 return (FALSE); 524 if (!xdr_int(xdrs, &objp->uaddr_generation)) 525 return (FALSE); 526 if (!xdr_nis_name(xdrs, &objp->uaddr)) 527 return (FALSE); 528 if (!xdr_int(xdrs, &objp->cbep_generation)) 529 return (FALSE); 530 return (xdr_endpoint(xdrs, &objp->cbep)); 531} 532