June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
001: %/* 002: % * Copyright (c) 2010, Oracle America, Inc. 003: % * 004: % * Redistribution and use in source and binary forms, with or without 005: % * modification, are permitted provided that the following conditions are 006: % * met: 007: % * 008: % * * Redistributions of source code must retain the above copyright 009: % * notice, this list of conditions and the following disclaimer. 010: % * * Redistributions in binary form must reproduce the above 011: % * copyright notice, this list of conditions and the following 012: % * disclaimer in the documentation and/or other materials 013: % * provided with the distribution. 014: % * * Neither the name of the "Oracle America, Inc." nor the names of its 015: % * contributors may be used to endorse or promote products derived 016: % * from this software without specific prior written permission. 017: % * 018: % * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 019: % * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 020: % * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 021: % * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 022: % * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 023: % * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 024: % * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 025: % * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 026: % * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 027: % * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 028: % * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 029: % * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030: % */ 031: 032: #ifdef RPC_HDR 033: %/* 034: % * nis.h 035: % * 036: % * This file is the main include file for NIS clients. It contains 037: % * both the client library function defines and the various data 038: % * structures used by the NIS service. It includes the file nis_tags.h 039: % * which defines the tag values. This allows the tags to change without 040: % * having to change the nis.x file. 041: % * 042: % * NOTE : DO NOT EDIT THIS FILE! It is automatically generated when 043: % * rpcgen is run on the nis.x file. Note that there is a 044: % * simple sed script to remove some unneeded lines. (See the 045: % * Makefile target nis.h) 046: % * 047: % */ 048: %#include <rpcsvc/nis_tags.h> 049: #endif 050: 051: /* This gets stuffed into the source files. */ 052: #if RPC_HDR 053: %#include <rpc/xdr.h> 054: #endif 055: 056: /* Include the RPC Language description of NIS objects */ 057: #include "nis_object.x" 058: 059: /* Errors that can be returned by the service */ 060: enum nis_error { 061: NIS_SUCCESS = 0, /* A-ok, let's rock n roll */ 062: NIS_S_SUCCESS = 1, /* Name found (maybe) */ 063: NIS_NOTFOUND = 2, /* Name definitely not found */ 064: NIS_S_NOTFOUND = 3, /* Name maybe not found */ 065: NIS_CACHEEXPIRED = 4, /* Name exists but cache out of date */ 066: NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */ 067: NIS_UNKNOWNOBJ = 6, /* Object type is bogus */ 068: NIS_TRYAGAIN = 7, /* I'm busy, call back */ 069: NIS_SYSTEMERROR = 8, /* Generic system error */ 070: NIS_CHAINBROKEN = 9, /* First/Next warning */ 071: NIS_PERMISSION = 10, /* Not enough permission to access */ 072: NIS_NOTOWNER = 11, /* You don't own it, sorry */ 073: NIS_NOT_ME = 12, /* I don't serve this name */ 074: NIS_NOMEMORY = 13, /* Outta VM! Help! */ 075: NIS_NAMEEXISTS = 14, /* Can't create over another name */ 076: NIS_NOTMASTER = 15, /* I'm justa secondaray, don't ask me */ 077: NIS_INVALIDOBJ = 16, /* Object is broken somehow */ 078: NIS_BADNAME = 17, /* Unparsable name */ 079: NIS_NOCALLBACK = 18, /* Couldn't talk to call back proc */ 080: NIS_CBRESULTS = 19, /* Results being called back to you */ 081: NIS_NOSUCHNAME = 20, /* Name unknown */ 082: NIS_NOTUNIQUE = 21, /* Value is not uniques (entry) */ 083: NIS_IBMODERROR = 22, /* Inf. Base. Modify error. */ 084: NIS_NOSUCHTABLE = 23, /* Name for table was wrong */ 085: NIS_TYPEMISMATCH = 24, /* Entry and table type mismatch */ 086: NIS_LINKNAMEERROR = 25, /* Link points to bogus name */ 087: NIS_PARTIAL = 26, /* Partial success, found table */ 088: NIS_TOOMANYATTRS = 27, /* Too many attributes */ 089: NIS_RPCERROR = 28, /* RPC error encountered */ 090: NIS_BADATTRIBUTE = 29, /* Bad or invalid attribute */ 091: NIS_NOTSEARCHABLE = 30, /* Non-searchable object searched */ 092: NIS_CBERROR = 31, /* Error during callback (svc crash) */ 093: NIS_FOREIGNNS = 32, /* Foreign Namespace */ 094: NIS_BADOBJECT = 33, /* Malformed object structure */ 095: NIS_NOTSAMEOBJ = 34, /* Object swapped during deletion */ 096: NIS_MODFAIL = 35, /* Failure during a Modify. */ 097: NIS_BADREQUEST = 36, /* Illegal query for table */ 098: NIS_NOTEMPTY = 37, /* Attempt to remove a non-empty tbl */ 099: NIS_COLDSTART_ERR = 38, /* Error accesing the cold start file */ 100: NIS_RESYNC = 39, /* Transaction log too far out of date */ 101: NIS_FAIL = 40, /* NIS operation failed. */ 102: NIS_UNAVAIL = 41, /* NIS+ service is unavailable (client) */ 103: NIS_RES2BIG = 42, /* NIS+ result too big for datagram */ 104: NIS_SRVAUTH = 43, /* NIS+ server wasn't authenticated. */ 105: NIS_CLNTAUTH = 44, /* NIS+ Client wasn't authenticated. */ 106: NIS_NOFILESPACE = 45, /* NIS+ server ran out of disk space */ 107: NIS_NOPROC = 46, /* NIS+ server couldn't create new proc */ 108: NIS_DUMPLATER = 47 /* NIS+ server already has dump child */ 109: }; 110: 111: 112: /* 113: * Structure definitions for the parameters and results of the actual 114: * NIS RPC calls. 115: * 116: * This is the standard result (in the protocol) of most of the nis 117: * requests. 118: */ 119: 120: struct nis_result { 121: nis_error status; /* Status of the response */ 122: nis_object objects<>; /* objects found */ 123: netobj cookie; /* Cookie Data */ 124: uint32_t zticks; /* server ticks */ 125: uint32_t dticks; /* DBM ticks. */ 126: uint32_t aticks; /* Cache (accel) ticks */ 127: uint32_t cticks; /* Client ticks */ 128: }; 129: 130: /* 131: * A Name Service request 132: * This request is used to access the name space, ns_name is the name 133: * of the object within the namespace and the object is it's value, for 134: * add/modify, a copy of the original for remove. 135: */ 136: 137: struct ns_request { 138: nis_name ns_name; /* Name in the NIS name space */ 139: nis_object ns_object<1>; /* Optional Object (add/remove) */ 140: }; 141: 142: /* 143: * An information base request 144: * This request includes the NIS name of the table we wish to search, the 145: * search criteria in the form of attribute/value pairs and an optional 146: * callback program number. If the callback program number is provided 147: * the server will send back objects one at a time, otherwise it will 148: * return them all in the response. 149: */ 150: 151: struct ib_request { 152: nis_name ibr_name; /* The name of the Table */ 153: nis_attr ibr_srch<>; /* The search critereia */ 154: uint32_t ibr_flags; /* Optional flags */ 155: nis_object ibr_obj<1>; /* optional object (add/modify) */ 156: nis_server ibr_cbhost<1>; /* Optional callback info */ 157: u_int ibr_bufsize; /* Optional first/next bufsize */ 158: netobj ibr_cookie; /* The first/next cookie */ 159: }; 160: 161: /* 162: * This argument to the PING call notifies the replicas that something in 163: * a directory has changed and this is it's timestamp. The replica will use 164: * the timestamp to determine if its resync operation was successful. 165: */ 166: struct ping_args { 167: nis_name dir; /* Directory that had the change */ 168: uint32_t stamp; /* timestamp of the transaction */ 169: }; 170: 171: /* 172: * These are the type of entries that are stored in the transaction log, 173: * note that modifications will appear as two entries, for names, they have 174: * a "OLD" entry followed by a "NEW" entry. For entries in tables, there 175: * is a remove followed by an add. It is done this way so that we can read 176: * the log backwards to back out transactions and forwards to propogate 177: * updated. 178: */ 179: enum log_entry_t { 180: LOG_NOP = 0, 181: ADD_NAME = 1, /* Name Added to name space */ 182: REM_NAME = 2, /* Name removed from name space */ 183: MOD_NAME_OLD = 3, /* Name was modified in the name space */ 184: MOD_NAME_NEW = 4, /* Name was modified in the name space */ 185: ADD_IBASE = 5, /* Entry added to information base */ 186: REM_IBASE = 6, /* Entry removed from information base */ 187: MOD_IBASE = 7, /* Entry was modified in information base */ 188: UPD_STAMP = 8 /* Update timestamp (used as fenceposts) */ 189: }; 190: 191: /* 192: * This result is returned from the name service when it is requested to 193: * dump logged entries from its transaction log. Information base updates 194: * will have the name of the information base in the le_name field and 195: * a canonical set of attribute/value pairs to fully specify the entry's 196: * 'name'. 197: */ 198: struct log_entry { 199: uint32_t le_time; /* Time in seconds */ 200: log_entry_t le_type; /* Type of log entry */ 201: nis_name le_princp; /* Principal making the change */ 202: nis_name le_name; /* Name of table/dir involved */ 203: nis_attr le_attrs<>; /* List of AV pairs. */ 204: nis_object le_object; /* Actual object value */ 205: }; 206: 207: struct log_result { 208: nis_error lr_status; /* The status itself */ 209: netobj lr_cookie; /* Used by the dump callback */ 210: log_entry lr_entries<>; /* zero or more entries */ 211: }; 212: 213: struct cp_result { 214: nis_error cp_status; /* Status of the checkpoint */ 215: uint32_t cp_zticks; /* Service 'ticks' */ 216: uint32_t cp_dticks; /* Database 'ticks' */ 217: }; 218: 219: /* 220: * This structure defines a generic NIS tag list. The taglist contains 221: * zero or tags, each of which is a type and a value. (u_int). 222: * These are used to report statistics (see tag definitions below) 223: * and to set or reset state variables. 224: */ 225: struct nis_tag { 226: uint32_t tag_type; /* Statistic tag (may vary) */ 227: string tag_val<>; /* Statistic value may also vary */ 228: }; 229: 230: struct nis_taglist { 231: nis_tag tags<>; /* List of tags */ 232: }; 233: 234: struct dump_args { 235: nis_name da_dir; /* Directory to dump */ 236: uint32_t da_time; /* From this timestamp */ 237: nis_server da_cbhost<1>; /* Callback to use. */ 238: }; 239: 240: struct fd_args { 241: nis_name dir_name; /* The directory we're looking for */ 242: nis_name requester; /* Host principal name for signature */ 243: }; 244: 245: struct fd_result { 246: nis_error status; /* Status returned by function */ 247: nis_name source; /* Source of this answer */ 248: opaque dir_data<>; /* Directory Data (XDR'ed) */ 249: opaque signature<>; /* Signature of the source */ 250: }; 251: 252: %/* 253: % * Structures used for server binding. 254: % */ 255: struct nis_bound_endpoint { 256: endpoint ep; 257: int generation; 258: int rank; 259: uint32_t flags; 260: int hostnum; 261: int epnum; 262: nis_name uaddr; 263: endpoint cbep; 264: }; 265: typedef struct nis_bound_endpoint nis_bound_endpoint; 266: 267: struct nis_bound_directory { 268: int generation; 269: int min_rank; /* minimum rank of bound endpoints */ 270: int optimal_rank; /* best possible rank of all endpoints */ 271: directory_obj dobj; 272: nis_bound_endpoint BEP<>; 273: }; 274: typedef struct nis_bound_directory nis_bound_directory; 275: %#define bep_len BEP.BEP_len 276: %#define bep_val BEP.BEP_val 277: 278: struct nis_active_endpoint { 279: endpoint ep; 280: nis_name hostname; 281: int rank; 282: int uaddr_generation; 283: nis_name uaddr; 284: int cbep_generation; 285: endpoint cbep; 286: }; 287: typedef struct nis_active_endpoint nis_active_endpoint; 288: 289: %/* defines for nis_bound_endpoint.flags */ 290: %#define NIS_BOUND 0x1 291: %#define NIS_TRANSIENT_ERRORS 0x2 292: 293: program NIS_PROG { 294: 295: /* RPC Language description of the NIS+ protocol */ 296: version NIS_VERSION { 297: /* The name service functions */ 298: nis_result NIS_LOOKUP(ns_request) = 1; 299: nis_result NIS_ADD(ns_request) = 2; 300: nis_result NIS_MODIFY(ns_request) = 3; 301: nis_result NIS_REMOVE(ns_request) = 4; 302: 303: /* The information base functions */ 304: nis_result NIS_IBLIST(ib_request) = 5; 305: nis_result NIS_IBADD(ib_request) = 6; 306: nis_result NIS_IBMODIFY(ib_request) = 7; 307: nis_result NIS_IBREMOVE(ib_request) = 8; 308: nis_result NIS_IBFIRST(ib_request) = 9; 309: nis_result NIS_IBNEXT(ib_request) = 10; 310: 311: /* NIS Administrative functions */ 312: fd_result NIS_FINDDIRECTORY(fd_args) = 12; 313: 314: /* If fetch and optionally reset statistics */ 315: nis_taglist NIS_STATUS(nis_taglist) = 14; 316: 317: /* Dump changes to directory since time in da_time */ 318: log_result NIS_DUMPLOG(dump_args) = 15; 319: 320: /* Dump contents of directory named */ 321: log_result NIS_DUMP(dump_args) = 16; 322: 323: /* Check status of callback thread */ 324: bool NIS_CALLBACK(netobj) = 17; 325: 326: /* Return last update time for named dir */ 327: uint32_t NIS_CPTIME(nis_name) = 18; 328: 329: /* Checkpoint directory or table named */ 330: cp_result NIS_CHECKPOINT(nis_name) = 19; 331: 332: /* Send 'status changed' ping to replicates */ 333: void NIS_PING(ping_args) = 20; 334: 335: /* Modify server behaviour (such as debugging) */ 336: nis_taglist NIS_SERVSTATE(nis_taglist) = 21; 337: 338: /* Create a Directory */ 339: nis_error NIS_MKDIR(nis_name) = 22; 340: 341: /* Remove a Directory */ 342: nis_error NIS_RMDIR(nis_name) = 23; 343: 344: /* Update public keys of a directory object */ 345: nis_error NIS_UPDKEYS(nis_name) = 24; 346: } = 3; 347: } = 100300; 348: 349: /* 350: * Included below are the defines that become part of nis.h, 351: * they are technically not part of the protocol, but do define 352: * key aspects of the implementation and are therefore useful 353: * in building a conforming server or client. 354: */ 355: #if RPC_HDR 356: %/* 357: % * Generic "hash" datastructures, used by all types of hashed data. 358: % */ 359: %struct nis_hash_data { 360: % nis_name name; /* NIS name of hashed item */ 361: % int keychain; /* It's hash key (for pop) */ 362: % struct nis_hash_data *next; /* Hash collision pointer */ 363: % struct nis_hash_data *prv_item; /* A serial, doubly linked list */ 364: % struct nis_hash_data *nxt_item; /* of items in the hash table */ 365: %}; 366: %typedef struct nis_hash_data NIS_HASH_ITEM; 367: % 368: %struct nis_hash_table { 369: % NIS_HASH_ITEM *keys[64]; /* A hash table of items */ 370: % NIS_HASH_ITEM *first; /* The first "item" in serial list */ 371: %}; 372: %typedef struct nis_hash_table NIS_HASH_TABLE; 373: % 374: %/* Structure for storing dynamically allocated static data */ 375: %struct nis_sdata { 376: % void *buf; /* Memory allocation pointer */ 377: % u_int size; /* Buffer size */ 378: %}; 379: % 380: %/* Generic client creating flags */ 381: %#define ZMH_VC 1 382: %#define ZMH_DG 2 383: %#define ZMH_AUTH 4 384: % 385: %/* Testing Access rights for objects */ 386: % 387: %#define NIS_READ_ACC 1 388: %#define NIS_MODIFY_ACC 2 389: %#define NIS_CREATE_ACC 4 390: %#define NIS_DESTROY_ACC 8 391: %/* Test macros. a == access rights, m == desired rights. */ 392: %#define NIS_WORLD(a, m) (((a) & (m)) != 0) 393: %#define NIS_GROUP(a, m) (((a) & ((m) << 8)) != 0) 394: %#define NIS_OWNER(a, m) (((a) & ((m) << 16)) != 0) 395: %#define NIS_NOBODY(a, m) (((a) & ((m) << 24)) != 0) 396: %/* 397: % * EOL Alert - The following non-prefixed test macros are 398: % * here for backward compatability, and will be not be present 399: % * in future releases - use the NIS_*() macros above. 400: % */ 401: %#define WORLD(a, m) (((a) & (m)) != 0) 402: %#define GROUP(a, m) (((a) & ((m) << 8)) != 0) 403: %#define OWNER(a, m) (((a) & ((m) << 16)) != 0) 404: %#define NOBODY(a, m) (((a) & ((m) << 24)) != 0) 405: % 406: %#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype) 407: %#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights) 408: %#define WORLD_DEFAULT (NIS_READ_ACC) 409: %#define GROUP_DEFAULT (NIS_READ_ACC << 8) 410: %#define OWNER_DEFAULT ((NIS_READ_ACC +\ 411: NIS_MODIFY_ACC +\ 412: NIS_CREATE_ACC +\ 413: NIS_DESTROY_ACC) << 16) 414: %#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT) 415: % 416: %/* Result manipulation defines ... */ 417: %#define NIS_RES_NUMOBJ(x) ((x)->objects.objects_len) 418: %#define NIS_RES_OBJECT(x) ((x)->objects.objects_val) 419: %#define NIS_RES_COOKIE(x) ((x)->cookie) 420: %#define NIS_RES_STATUS(x) ((x)->status) 421: % 422: %/* These defines make getting at the variant part of the object easier. */ 423: %#define TA_data zo_data.objdata_u.ta_data 424: %#define EN_data zo_data.objdata_u.en_data 425: %#define DI_data zo_data.objdata_u.di_data 426: %#define LI_data zo_data.objdata_u.li_data 427: %#define GR_data zo_data.objdata_u.gr_data 428: % 429: %#define __type_of(o) ((o)->zo_data.zo_type) 430: % 431: %/* Declarations for the internal subroutines in nislib.c */ 432: %enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME}; 433: %typedef enum name_pos name_pos; 434: % 435: %/* 436: % * Defines for getting at column data in entry objects. Because RPCGEN 437: % * generates some rather wordy structures, we create some defines that 438: % * collapse the needed keystrokes to access a particular value using 439: % * these definitions they take an nis_object *, and an int and return 440: % * a u_char * for Value, and an int for length. 441: % */ 442: %#define ENTRY_VAL(obj, col) \ 443: % (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val 444: %#define ENTRY_LEN(obj, col) \ 445: % (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len 446: % 447: % 448: % 449: %#ifdef __cplusplus 450: %} 451: %#endif 452: % 453: %/* Prototypes, and extern declarations for the NIS library functions. */ 454: %#include <rpcsvc/nislib.h> 455: %#endif /* __NIS_RPCGEN_H */ 456: %/* EDIT_START */ 457: % 458: %/* 459: % * nis_3.h 460: % * 461: % * This file contains definitions that are only of interest to the actual 462: % * service daemon and client stubs. Normal users of NIS will not include 463: % * this file. 464: % * 465: % * NOTE : This include file is automatically created by a combination 466: % * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead 467: % * and then remake this file. 468: % */ 469: %#ifndef __nis_3_h 470: %#define __nis_3_h 471: %#ifdef __cplusplus 472: %extern "C" { 473: %#endif 474: #endif 475: