17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*36e852a1SRaja Andra * Common Development and Distribution License (the "License"). 6*36e852a1SRaja Andra * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 227c478bd9Sstevel@tonic-gate * RPC Language Protocol description file for NIS Plus 237c478bd9Sstevel@tonic-gate * 24*36e852a1SRaja Andra * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 257c478bd9Sstevel@tonic-gate * Use is subject to license terms. 267c478bd9Sstevel@tonic-gate * 277c478bd9Sstevel@tonic-gate * 287c478bd9Sstevel@tonic-gate * From 4.1 : @(#)nis.x 1.61 Copyright 1989 Sun Microsystems 297c478bd9Sstevel@tonic-gate */ 307c478bd9Sstevel@tonic-gate 317c478bd9Sstevel@tonic-gate /* This gets stuffed into the source files. */ 327c478bd9Sstevel@tonic-gate #if RPC_HDR 337c478bd9Sstevel@tonic-gate %#include <rpc/xdr.h> 347c478bd9Sstevel@tonic-gate #endif 357c478bd9Sstevel@tonic-gate #if defined(RPC_XDR) || defined(RPC_CLNT) || defined(RPC_SVC) 367c478bd9Sstevel@tonic-gate %#ifndef xdr_uint32_t 377c478bd9Sstevel@tonic-gate %#define xdr_uint32_t xdr_u_int 387c478bd9Sstevel@tonic-gate %#endif 397c478bd9Sstevel@tonic-gate %#ifndef xdr_uint_t 407c478bd9Sstevel@tonic-gate %#define xdr_uint_t xdr_u_int 417c478bd9Sstevel@tonic-gate %#endif 427c478bd9Sstevel@tonic-gate #endif 437c478bd9Sstevel@tonic-gate #if RPC_SVC 447c478bd9Sstevel@tonic-gate %#include "nis_svc.h" 457c478bd9Sstevel@tonic-gate #endif 467c478bd9Sstevel@tonic-gate 477c478bd9Sstevel@tonic-gate /* Include the RPC Language description of NIS objects */ 487c478bd9Sstevel@tonic-gate #include "nis_object.x" 497c478bd9Sstevel@tonic-gate 507c478bd9Sstevel@tonic-gate 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate /* 547c478bd9Sstevel@tonic-gate * These are the type of entries that are stored in the transaction log, 557c478bd9Sstevel@tonic-gate * note that modifications will appear as two entries, for names, they have 567c478bd9Sstevel@tonic-gate * a "OLD" entry followed by a "NEW" entry. For entries in tables, there 577c478bd9Sstevel@tonic-gate * is a remove followed by an add. It is done this way so that we can read 587c478bd9Sstevel@tonic-gate * the log backwards to back out transactions and forwards to propogate 597c478bd9Sstevel@tonic-gate * updated. 607c478bd9Sstevel@tonic-gate */ 617c478bd9Sstevel@tonic-gate enum log_entry_t { 627c478bd9Sstevel@tonic-gate LOG_NOP = 0, 637c478bd9Sstevel@tonic-gate ADD_NAME = 1, /* Name Added to name space */ 647c478bd9Sstevel@tonic-gate REM_NAME = 2, /* Name removed from name space */ 657c478bd9Sstevel@tonic-gate MOD_NAME_OLD = 3, /* Name was modified in the name space */ 667c478bd9Sstevel@tonic-gate MOD_NAME_NEW = 4, /* Name was modified in the name space */ 677c478bd9Sstevel@tonic-gate ADD_IBASE = 5, /* Entry added to information base */ 687c478bd9Sstevel@tonic-gate REM_IBASE = 6, /* Entry removed from information base */ 697c478bd9Sstevel@tonic-gate MOD_IBASE = 7, /* Entry was modified in information base */ 707c478bd9Sstevel@tonic-gate UPD_STAMP = 8 /* Update timestamp (used as fenceposts) */ 717c478bd9Sstevel@tonic-gate }; 727c478bd9Sstevel@tonic-gate 737c478bd9Sstevel@tonic-gate /* 747c478bd9Sstevel@tonic-gate * This result is returned from the name service when it is requested to 757c478bd9Sstevel@tonic-gate * dump logged entries from its transaction log. Information base updates 767c478bd9Sstevel@tonic-gate * will have the name of the information base in the le_name field and 777c478bd9Sstevel@tonic-gate * a canonical set of attribute/value pairs to fully specify the entry's 787c478bd9Sstevel@tonic-gate * 'name'. 797c478bd9Sstevel@tonic-gate */ 807c478bd9Sstevel@tonic-gate struct log_entry { 817c478bd9Sstevel@tonic-gate uint32_t le_time; /* Time in seconds */ 827c478bd9Sstevel@tonic-gate log_entry_t le_type; /* Type of log entry */ 837c478bd9Sstevel@tonic-gate nis_name le_princp; /* Principal making the change */ 847c478bd9Sstevel@tonic-gate nis_name le_name; /* Name of table/dir involved */ 857c478bd9Sstevel@tonic-gate nis_attr le_attrs<>; /* List of AV pairs. */ 867c478bd9Sstevel@tonic-gate nis_object le_object; /* Actual object value */ 877c478bd9Sstevel@tonic-gate }; 887c478bd9Sstevel@tonic-gate 897c478bd9Sstevel@tonic-gate 907c478bd9Sstevel@tonic-gate /* 917c478bd9Sstevel@tonic-gate * This structure defines a generic NIS tag list. The taglist contains 927c478bd9Sstevel@tonic-gate * zero or tags, each of which is a type and a value. (u_int). 937c478bd9Sstevel@tonic-gate * These are used to report statistics (see tag definitions below) 947c478bd9Sstevel@tonic-gate * and to set or reset state variables. 957c478bd9Sstevel@tonic-gate */ 967c478bd9Sstevel@tonic-gate struct nis_tag { 977c478bd9Sstevel@tonic-gate u_int tag_type; /* Statistic tag (may vary) */ 987c478bd9Sstevel@tonic-gate string tag_val<>; /* Statistic value may also vary */ 997c478bd9Sstevel@tonic-gate }; 1007c478bd9Sstevel@tonic-gate 1017c478bd9Sstevel@tonic-gate 1027c478bd9Sstevel@tonic-gate %/* 1037c478bd9Sstevel@tonic-gate % * Structures used for server binding. 1047c478bd9Sstevel@tonic-gate % */ 1057c478bd9Sstevel@tonic-gate struct nis_bound_endpoint { 1067c478bd9Sstevel@tonic-gate endpoint ep; 1077c478bd9Sstevel@tonic-gate int generation; 1087c478bd9Sstevel@tonic-gate int rank; 1097c478bd9Sstevel@tonic-gate u_int flags; 1107c478bd9Sstevel@tonic-gate int hostnum; 1117c478bd9Sstevel@tonic-gate int epnum; 1127c478bd9Sstevel@tonic-gate nis_name uaddr; 1137c478bd9Sstevel@tonic-gate endpoint cbep; 1147c478bd9Sstevel@tonic-gate }; 1157c478bd9Sstevel@tonic-gate typedef struct nis_bound_endpoint nis_bound_endpoint; 1167c478bd9Sstevel@tonic-gate 1177c478bd9Sstevel@tonic-gate struct nis_bound_directory { 1187c478bd9Sstevel@tonic-gate int generation; 1197c478bd9Sstevel@tonic-gate int min_rank; /* minimum rank of bound endpoints */ 1207c478bd9Sstevel@tonic-gate int optimal_rank; /* best possible rank of all endpoints */ 1217c478bd9Sstevel@tonic-gate directory_obj dobj; 1227c478bd9Sstevel@tonic-gate nis_bound_endpoint BEP<>; 1237c478bd9Sstevel@tonic-gate }; 1247c478bd9Sstevel@tonic-gate typedef struct nis_bound_directory nis_bound_directory; 1257c478bd9Sstevel@tonic-gate %#define bep_len BEP.BEP_len 1267c478bd9Sstevel@tonic-gate %#define bep_val BEP.BEP_val 1277c478bd9Sstevel@tonic-gate 1287c478bd9Sstevel@tonic-gate struct nis_active_endpoint { 1297c478bd9Sstevel@tonic-gate endpoint ep; 1307c478bd9Sstevel@tonic-gate nis_name hostname; 1317c478bd9Sstevel@tonic-gate int rank; 1327c478bd9Sstevel@tonic-gate int uaddr_generation; 1337c478bd9Sstevel@tonic-gate nis_name uaddr; 1347c478bd9Sstevel@tonic-gate int cbep_generation; 1357c478bd9Sstevel@tonic-gate endpoint cbep; 1367c478bd9Sstevel@tonic-gate }; 1377c478bd9Sstevel@tonic-gate typedef struct nis_active_endpoint nis_active_endpoint; 1387c478bd9Sstevel@tonic-gate 1397c478bd9Sstevel@tonic-gate %/* defines for nis_bound_endpoint.flags */ 1407c478bd9Sstevel@tonic-gate %#define NIS_BOUND 0x1 1417c478bd9Sstevel@tonic-gate %#define NIS_TRANSIENT_ERRORS 0x2 1427c478bd9Sstevel@tonic-gate 1437c478bd9Sstevel@tonic-gate 1447c478bd9Sstevel@tonic-gate 1457c478bd9Sstevel@tonic-gate /* 1467c478bd9Sstevel@tonic-gate * What's going on here? Well, it's like this. When the service 1477c478bd9Sstevel@tonic-gate * is being compiled it wants to have the service definition specific 1487c478bd9Sstevel@tonic-gate * info included, and when the client is being compiled it wants that 1497c478bd9Sstevel@tonic-gate * info. This includes the appropriate file which was generated by 1507c478bd9Sstevel@tonic-gate * make in the protocols directory (probably /usr/include/rpcsvc). 1517c478bd9Sstevel@tonic-gate */ 1527c478bd9Sstevel@tonic-gate #ifdef RPC_SVC 1537c478bd9Sstevel@tonic-gate %#include "nis_svc.h" 1547c478bd9Sstevel@tonic-gate #endif 1557c478bd9Sstevel@tonic-gate #ifdef RPC_CLNT 1567c478bd9Sstevel@tonic-gate %#include "nis_clnt.h" 1577c478bd9Sstevel@tonic-gate #endif 1587c478bd9Sstevel@tonic-gate 1597c478bd9Sstevel@tonic-gate 1607c478bd9Sstevel@tonic-gate /* 1617c478bd9Sstevel@tonic-gate * Included below are the defines that become part of nis.h, 1627c478bd9Sstevel@tonic-gate * they are technically not part of the protocol, but do define 1637c478bd9Sstevel@tonic-gate * key aspects of the implementation and are therefore useful 1647c478bd9Sstevel@tonic-gate * in building a conforming server or client. 1657c478bd9Sstevel@tonic-gate */ 1667c478bd9Sstevel@tonic-gate #if RPC_HDR 1677c478bd9Sstevel@tonic-gate %/* 1687c478bd9Sstevel@tonic-gate % * Generic "hash" datastructures, used by all types of hashed data. 1697c478bd9Sstevel@tonic-gate % */ 1707c478bd9Sstevel@tonic-gate %struct nis_hash_data { 1717c478bd9Sstevel@tonic-gate % nis_name name; /* NIS name of hashed item */ 1727c478bd9Sstevel@tonic-gate % int keychain; /* It's hash key (for pop) */ 1737c478bd9Sstevel@tonic-gate % struct nis_hash_data *next; /* Hash collision pointer */ 1747c478bd9Sstevel@tonic-gate % struct nis_hash_data *prv_item; /* A serial, doubly linked list */ 1757c478bd9Sstevel@tonic-gate % struct nis_hash_data *nxt_item; /* of items in the hash table */ 1767c478bd9Sstevel@tonic-gate %}; 1777c478bd9Sstevel@tonic-gate %typedef struct nis_hash_data NIS_HASH_ITEM; 1787c478bd9Sstevel@tonic-gate % 1797c478bd9Sstevel@tonic-gate %struct nis_hash_table { 1807c478bd9Sstevel@tonic-gate % NIS_HASH_ITEM *keys[64]; /* A hash table of items */ 1817c478bd9Sstevel@tonic-gate % NIS_HASH_ITEM *first; /* The first "item" in serial list */ 1827c478bd9Sstevel@tonic-gate %}; 1837c478bd9Sstevel@tonic-gate %typedef struct nis_hash_table NIS_HASH_TABLE; 1847c478bd9Sstevel@tonic-gate % 1857c478bd9Sstevel@tonic-gate %/* Structure for storing dynamically allocated static data */ 1867c478bd9Sstevel@tonic-gate %struct nis_sdata { 1877c478bd9Sstevel@tonic-gate % void *buf; /* Memory allocation pointer */ 1887c478bd9Sstevel@tonic-gate % u_int size; /* Buffer size */ 1897c478bd9Sstevel@tonic-gate %}; 1907c478bd9Sstevel@tonic-gate % 1917c478bd9Sstevel@tonic-gate %/* Generic client creating flags */ 1927c478bd9Sstevel@tonic-gate %#define ZMH_VC 1 1937c478bd9Sstevel@tonic-gate %#define ZMH_DG 2 1947c478bd9Sstevel@tonic-gate %#define ZMH_AUTH 4 1957c478bd9Sstevel@tonic-gate %#define ZMH_NOFALLBACK 8 1967c478bd9Sstevel@tonic-gate % 1977c478bd9Sstevel@tonic-gate %/* Testing Access rights for objects */ 1987c478bd9Sstevel@tonic-gate % 1997c478bd9Sstevel@tonic-gate %#define NIS_READ_ACC 1 2007c478bd9Sstevel@tonic-gate %#define NIS_MODIFY_ACC 2 2017c478bd9Sstevel@tonic-gate %#define NIS_CREATE_ACC 4 2027c478bd9Sstevel@tonic-gate %#define NIS_DESTROY_ACC 8 2037c478bd9Sstevel@tonic-gate %/* Test macros. a == access rights, m == desired rights. */ 2047c478bd9Sstevel@tonic-gate %#define NIS_WORLD(a, m) (((a) & (m)) != 0) 2057c478bd9Sstevel@tonic-gate %#define NIS_GROUP(a, m) (((a) & ((m) << 8)) != 0) 2067c478bd9Sstevel@tonic-gate %#define NIS_OWNER(a, m) (((a) & ((m) << 16)) != 0) 2077c478bd9Sstevel@tonic-gate %#define NIS_NOBODY(a, m) (((a) & ((m) << 24)) != 0) 2087c478bd9Sstevel@tonic-gate %/* 2097c478bd9Sstevel@tonic-gate % * EOL Alert - The following non-prefixed test macros are 2107c478bd9Sstevel@tonic-gate % * here for backward compatability, and will be not be present 2117c478bd9Sstevel@tonic-gate % * in future releases - use the NIS_*() macros above. 2127c478bd9Sstevel@tonic-gate % */ 2137c478bd9Sstevel@tonic-gate %#define WORLD(a, m) (((a) & (m)) != 0) 2147c478bd9Sstevel@tonic-gate %#define GROUP(a, m) (((a) & ((m) << 8)) != 0) 2157c478bd9Sstevel@tonic-gate %#define OWNER(a, m) (((a) & ((m) << 16)) != 0) 2167c478bd9Sstevel@tonic-gate %#define NOBODY(a, m) (((a) & ((m) << 24)) != 0) 2177c478bd9Sstevel@tonic-gate % 2187c478bd9Sstevel@tonic-gate %#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype) 2197c478bd9Sstevel@tonic-gate %#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights) 2207c478bd9Sstevel@tonic-gate %#define WORLD_DEFAULT (NIS_READ_ACC) 2217c478bd9Sstevel@tonic-gate %#define GROUP_DEFAULT (NIS_READ_ACC << 8) 2227c478bd9Sstevel@tonic-gate %#define OWNER_DEFAULT ((NIS_READ_ACC +\ 2237c478bd9Sstevel@tonic-gate % NIS_MODIFY_ACC +\ 2247c478bd9Sstevel@tonic-gate % NIS_CREATE_ACC +\ 2257c478bd9Sstevel@tonic-gate % NIS_DESTROY_ACC) << 16) 2267c478bd9Sstevel@tonic-gate %#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT) 2277c478bd9Sstevel@tonic-gate % 2287c478bd9Sstevel@tonic-gate %/* Result manipulation defines ... */ 2297c478bd9Sstevel@tonic-gate %#define NIS_RES_NUMOBJ(x) ((x)->objects.objects_len) 2307c478bd9Sstevel@tonic-gate %#define NIS_RES_OBJECT(x) ((x)->objects.objects_val) 2317c478bd9Sstevel@tonic-gate %#define NIS_RES_COOKIE(x) ((x)->cookie) 2327c478bd9Sstevel@tonic-gate %#define NIS_RES_STATUS(x) ((x)->status) 2337c478bd9Sstevel@tonic-gate % 2347c478bd9Sstevel@tonic-gate %/* These defines make getting at the variant part of the object easier. */ 2357c478bd9Sstevel@tonic-gate %#define TA_data zo_data.objdata_u.ta_data 2367c478bd9Sstevel@tonic-gate %#define EN_data zo_data.objdata_u.en_data 2377c478bd9Sstevel@tonic-gate %#define DI_data zo_data.objdata_u.di_data 2387c478bd9Sstevel@tonic-gate %#define LI_data zo_data.objdata_u.li_data 2397c478bd9Sstevel@tonic-gate %#define GR_data zo_data.objdata_u.gr_data 2407c478bd9Sstevel@tonic-gate % 2417c478bd9Sstevel@tonic-gate %#define __type_of(o) ((o)->zo_data.zo_type) 2427c478bd9Sstevel@tonic-gate % 2437c478bd9Sstevel@tonic-gate %/* Declarations for the internal subroutines in nislib.c */ 2447c478bd9Sstevel@tonic-gate %enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME}; 2457c478bd9Sstevel@tonic-gate %typedef enum name_pos name_pos; 2467c478bd9Sstevel@tonic-gate % 2477c478bd9Sstevel@tonic-gate %/* 2487c478bd9Sstevel@tonic-gate % * Defines for getting at column data in entry objects. Because RPCGEN 2497c478bd9Sstevel@tonic-gate % * generates some rather wordy structures, we create some defines that 2507c478bd9Sstevel@tonic-gate % * collapse the needed keystrokes to access a particular value using 2517c478bd9Sstevel@tonic-gate % * these definitions they take an nis_object *, and an int and return 2527c478bd9Sstevel@tonic-gate % * a u_char * for Value, and an int for length. 2537c478bd9Sstevel@tonic-gate % */ 2547c478bd9Sstevel@tonic-gate %#define ENTRY_VAL(obj, col) \ 2557c478bd9Sstevel@tonic-gate % (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val 2567c478bd9Sstevel@tonic-gate %#define ENTRY_LEN(obj, col) \ 2577c478bd9Sstevel@tonic-gate % (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len 2587c478bd9Sstevel@tonic-gate % 2597c478bd9Sstevel@tonic-gate % 2607c478bd9Sstevel@tonic-gate % 2617c478bd9Sstevel@tonic-gate %#ifdef __cplusplus 2627c478bd9Sstevel@tonic-gate %} 2637c478bd9Sstevel@tonic-gate %#endif 2647c478bd9Sstevel@tonic-gate % 2657c478bd9Sstevel@tonic-gate %/* Prototypes, and extern declarations for the NIS library functions. */ 2667c478bd9Sstevel@tonic-gate %#include <rpcsvc/nislib.h> 2677c478bd9Sstevel@tonic-gate %#endif /* __NIS_RPCGEN_H */ 2687c478bd9Sstevel@tonic-gate %/* EDIT_START */ 2697c478bd9Sstevel@tonic-gate % 2707c478bd9Sstevel@tonic-gate %/* 2717c478bd9Sstevel@tonic-gate % * nis_3.h 2727c478bd9Sstevel@tonic-gate % * 2737c478bd9Sstevel@tonic-gate % * This file contains definitions that are only of interest to the actual 2747c478bd9Sstevel@tonic-gate % * service daemon and client stubs. Normal users of NIS will not include 2757c478bd9Sstevel@tonic-gate % * this file. 2767c478bd9Sstevel@tonic-gate % * 2777c478bd9Sstevel@tonic-gate % * NOTE : This include file is automatically created by a combination 2787c478bd9Sstevel@tonic-gate % * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead 2797c478bd9Sstevel@tonic-gate % * and then remake this file. 2807c478bd9Sstevel@tonic-gate % */ 2817c478bd9Sstevel@tonic-gate %#ifndef __nis_3_h 2827c478bd9Sstevel@tonic-gate %#define __nis_3_h 2837c478bd9Sstevel@tonic-gate %#ifdef __cplusplus 2847c478bd9Sstevel@tonic-gate %extern "C" { 2857c478bd9Sstevel@tonic-gate %#endif 2867c478bd9Sstevel@tonic-gate #endif 287