code:
/*
 * Please do not edit this file.
 * It was generated using rpcgen.
 */

#ifndef _NIS_H_RPCGEN
#define	_NIS_H_RPCGEN

#include <rpc/rpc.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user or with the express written consent of
 * Sun Microsystems, Inc.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */
/*
 *	nis.h
 *
 *	This file is the main include file for NIS clients. It contains
 *	both the client library function defines and the various data
 * 	structures used by the NIS service. It includes the file nis_tags.h
 *	which defines the tag values. This allows the tags to change without
 *	having to change the nis.x file.
 *
 *	NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
 *	       rpcgen is run on the nis.x file. Note that there is a
 *	       simple sed script to remove some unneeded lines. (See the
 *	       Makefile target nis.h)
 *
 */
#include <rpcsvc/nis_tags.h>
#include <rpc/xdr.h>
/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user or with the express written consent of
 * Sun Microsystems, Inc.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */

#ifndef __nis_object_h
#define __nis_object_h

#define	NIS_MAXSTRINGLEN 255
#define	NIS_MAXNAMELEN 1024
#define	NIS_MAXATTRNAME 32
#define	NIS_MAXATTRVAL 2048
#define	NIS_MAXCOLUMNS 64
#define	NIS_MAXATTR 16
#define	NIS_MAXPATH 1024
#define	NIS_MAXREPLICAS 128
#define	NIS_MAXLINKS 16
#define	NIS_PK_NONE 0
#define	NIS_PK_DH 1
#define	NIS_PK_RSA 2
#define	NIS_PK_KERB 3

struct nis_attr {
	char *zattr_ndx;
	struct {
		u_int zattr_val_len;
		char *zattr_val_val;
	} zattr_val;
};
typedef struct nis_attr nis_attr;

typedef char *nis_name;

enum zotypes {
	BOGUS_OBJ = 0,
	NO_OBJ = 1,
	DIRECTORY_OBJ = 2,
	GROUP_OBJ = 3,
	TABLE_OBJ = 4,
	ENTRY_OBJ = 5,
	LINK_OBJ = 6,
	PRIVATE_OBJ = 7
};
typedef enum zotypes zotypes;

enum nstype {
	UNKNOWN = 0,
	NIS = 1,
	SUNYP = 2,
	IVY = 3,
	DNS = 4,
	X500 = 5,
	DNANS = 6,
	XCHS = 7,
	CDS = 8
};
typedef enum nstype nstype;

struct oar_mask {
	u_long oa_rights;
	zotypes oa_otype;
};
typedef struct oar_mask oar_mask;

struct endpoint {
	char *uaddr;
	char *family;
	char *proto;
};
typedef struct endpoint endpoint;

struct nis_server {
	nis_name name;
	struct {
		u_int ep_len;
		endpoint *ep_val;
	} ep;
	u_long key_type;
	netobj pkey;
};
typedef struct nis_server nis_server;

struct directory_obj {
	nis_name do_name;
	nstype do_type;
	struct {
		u_int do_servers_len;
		nis_server *do_servers_val;
	} do_servers;
	u_long do_ttl;
	struct {
		u_int do_armask_len;
		oar_mask *do_armask_val;
	} do_armask;
};
typedef struct directory_obj directory_obj;
#define	EN_BINARY 1
#define	EN_CRYPT 2
#define	EN_XDR 4
#define	EN_MODIFIED 8
#define	EN_ASN1 64

struct entry_col {
	u_long ec_flags;
	struct {
		u_int ec_value_len;
		char *ec_value_val;
	} ec_value;
};
typedef struct entry_col entry_col;

struct entry_obj {
	char *en_type;
	struct {
		u_int en_cols_len;
		entry_col *en_cols_val;
	} en_cols;
};
typedef struct entry_obj entry_obj;

struct group_obj {
	u_long gr_flags;
	struct {
		u_int gr_members_len;
		nis_name *gr_members_val;
	} gr_members;
};
typedef struct group_obj group_obj;

struct link_obj {
	zotypes li_rtype;
	struct {
		u_int li_attrs_len;
		nis_attr *li_attrs_val;
	} li_attrs;
	nis_name li_name;
};
typedef struct link_obj link_obj;
#define	TA_BINARY 1
#define	TA_CRYPT 2
#define	TA_XDR 4
#define	TA_SEARCHABLE 8
#define	TA_CASE 16
#define	TA_MODIFIED 32
#define	TA_ASN1 64

struct table_col {
	char *tc_name;
	u_long tc_flags;
	u_long tc_rights;
};
typedef struct table_col table_col;

struct table_obj {
	char *ta_type;
	int ta_maxcol;
	u_char ta_sep;
	struct {
		u_int ta_cols_len;
		table_col *ta_cols_val;
	} ta_cols;
	char *ta_path;
};
typedef struct table_obj table_obj;

struct objdata {
	zotypes zo_type;
	union {
		struct directory_obj di_data;
		struct group_obj gr_data;
		struct table_obj ta_data;
		struct entry_obj en_data;
		struct link_obj li_data;
		struct {
			u_int po_data_len;
			char *po_data_val;
		} po_data;
	} objdata_u;
};
typedef struct objdata objdata;

struct nis_oid {
	u_long ctime;
	u_long mtime;
};
typedef struct nis_oid nis_oid;

struct nis_object {
	nis_oid zo_oid;
	nis_name zo_name;
	nis_name zo_owner;
	nis_name zo_group;
	nis_name zo_domain;
	u_long zo_access;
	u_long zo_ttl;
	objdata zo_data;
};
typedef struct nis_object nis_object;

#endif /* if __nis_object_h */

enum nis_error {
	NIS_SUCCESS = 0,
	NIS_S_SUCCESS = 1,
	NIS_NOTFOUND = 2,
	NIS_S_NOTFOUND = 3,
	NIS_CACHEEXPIRED = 4,
	NIS_NAMEUNREACHABLE = 5,
	NIS_UNKNOWNOBJ = 6,
	NIS_TRYAGAIN = 7,
	NIS_SYSTEMERROR = 8,
	NIS_CHAINBROKEN = 9,
	NIS_PERMISSION = 10,
	NIS_NOTOWNER = 11,
	NIS_NOT_ME = 12,
	NIS_NOMEMORY = 13,
	NIS_NAMEEXISTS = 14,
	NIS_NOTMASTER = 15,
	NIS_INVALIDOBJ = 16,
	NIS_BADNAME = 17,
	NIS_NOCALLBACK = 18,
	NIS_CBRESULTS = 19,
	NIS_NOSUCHNAME = 20,
	NIS_NOTUNIQUE = 21,
	NIS_IBMODERROR = 22,
	NIS_NOSUCHTABLE = 23,
	NIS_TYPEMISMATCH = 24,
	NIS_LINKNAMEERROR = 25,
	NIS_PARTIAL = 26,
	NIS_TOOMANYATTRS = 27,
	NIS_RPCERROR = 28,
	NIS_BADATTRIBUTE = 29,
	NIS_NOTSEARCHABLE = 30,
	NIS_CBERROR = 31,
	NIS_FOREIGNNS = 32,
	NIS_BADOBJECT = 33,
	NIS_NOTSAMEOBJ = 34,
	NIS_MODFAIL = 35,
	NIS_BADREQUEST = 36,
	NIS_NOTEMPTY = 37,
	NIS_COLDSTART_ERR = 38,
	NIS_RESYNC = 39,
	NIS_FAIL = 40,
	NIS_UNAVAIL = 41,
	NIS_RES2BIG = 42,
	NIS_SRVAUTH = 43,
	NIS_CLNTAUTH = 44,
	NIS_NOFILESPACE = 45,
	NIS_NOPROC = 46,
	NIS_DUMPLATER = 47
};
typedef enum nis_error nis_error;

struct nis_result {
	nis_error status;
	struct {
		u_int objects_len;
		nis_object *objects_val;
	} objects;
	netobj cookie;
	u_long zticks;
	u_long dticks;
	u_long aticks;
	u_long cticks;
};
typedef struct nis_result nis_result;

struct ns_request {
	nis_name ns_name;
	struct {
		u_int ns_object_len;
		nis_object *ns_object_val;
	} ns_object;
};
typedef struct ns_request ns_request;

struct ib_request {
	nis_name ibr_name;
	struct {
		u_int ibr_srch_len;
		nis_attr *ibr_srch_val;
	} ibr_srch;
	u_long ibr_flags;
	struct {
		u_int ibr_obj_len;
		nis_object *ibr_obj_val;
	} ibr_obj;
	struct {
		u_int ibr_cbhost_len;
		nis_server *ibr_cbhost_val;
	} ibr_cbhost;
	u_long ibr_bufsize;
	netobj ibr_cookie;
};
typedef struct ib_request ib_request;

struct ping_args {
	nis_name dir;
	u_long stamp;
};
typedef struct ping_args ping_args;

enum log_entry_t {
	LOG_NOP = 0,
	ADD_NAME = 1,
	REM_NAME = 2,
	MOD_NAME_OLD = 3,
	MOD_NAME_NEW = 4,
	ADD_IBASE = 5,
	REM_IBASE = 6,
	MOD_IBASE = 7,
	UPD_STAMP = 8
};
typedef enum log_entry_t log_entry_t;

struct log_entry {
	u_long le_time;
	log_entry_t le_type;
	nis_name le_princp;
	nis_name le_name;
	struct {
		u_int le_attrs_len;
		nis_attr *le_attrs_val;
	} le_attrs;
	nis_object le_object;
};
typedef struct log_entry log_entry;

struct log_result {
	nis_error lr_status;
	netobj lr_cookie;
	struct {
		u_int lr_entries_len;
		log_entry *lr_entries_val;
	} lr_entries;
};
typedef struct log_result log_result;

struct cp_result {
	nis_error cp_status;
	u_long cp_zticks;
	u_long cp_dticks;
};
typedef struct cp_result cp_result;

struct nis_tag {
	u_long tag_type;
	char *tag_val;
};
typedef struct nis_tag nis_tag;

struct nis_taglist {
	struct {
		u_int tags_len;
		nis_tag *tags_val;
	} tags;
};
typedef struct nis_taglist nis_taglist;

struct dump_args {
	nis_name da_dir;
	u_long da_time;
	struct {
		u_int da_cbhost_len;
		nis_server *da_cbhost_val;
	} da_cbhost;
};
typedef struct dump_args dump_args;

struct fd_args {
	nis_name dir_name;
	nis_name requester;
};
typedef struct fd_args fd_args;

struct fd_result {
	nis_error status;
	nis_name source;
	struct {
		u_int dir_data_len;
		char *dir_data_val;
	} dir_data;
	struct {
		u_int signature_len;
		char *signature_val;
	} signature;
};
typedef struct fd_result fd_result;
/*
 * Generic "hash" datastructures, used by all types of hashed data.
 */
struct nis_hash_data {
 nis_name name; /* NIS name of hashed item      */
 int keychain; /* It's hash key (for pop)      */
 struct nis_hash_data *next; /* Hash collision pointer       */
 struct nis_hash_data *prv_item; /* A serial, doubly linked list */
 struct nis_hash_data *nxt_item; /* of items in the hash table   */
};
typedef struct nis_hash_data NIS_HASH_ITEM;

struct nis_hash_table {
 NIS_HASH_ITEM *keys[64]; /* A hash table of items           */
 NIS_HASH_ITEM *first; /* The first "item" in serial list */
};
typedef struct nis_hash_table NIS_HASH_TABLE;

/* Structure for storing dynamically allocated static data */
struct nis_sdata {
 void *buf; /* Memory allocation pointer 	*/
 u_long size; /* Buffer size			*/
};

/* Generic client creating flags */
#define ZMH_VC 1
#define ZMH_DG 2
#define ZMH_AUTH 4

/* Testing Access rights for objects */

#define NIS_READ_ACC 1
#define NIS_MODIFY_ACC 2
#define NIS_CREATE_ACC 4
#define NIS_DESTROY_ACC 8
/* Test macros. a == access rights, m == desired rights. */
#define WORLD(a, m) (((a) & (m)) != 0)
#define GROUP(a, m) (((a) & ((m) << 8)) != 0)
#define OWNER(a, m) (((a) & ((m) << 16)) != 0)
#define NOBODY(a, m) (((a) & ((m) << 24)) != 0)

#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
#define WORLD_DEFAULT (NIS_READ_ACC)
#define GROUP_DEFAULT (NIS_READ_ACC << 8)
#define OWNER_DEFAULT ((NIS_READ_ACC + NIS_MODIFY_ACC + NIS_CREATE_ACC + NIS_DESTROY_ACC) << 16)
#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)

/* Result manipulation defines ... */
#define NIS_RES_NUMOBJ(x) ((x)->objects.objects_len)
#define NIS_RES_OBJECT(x) ((x)->objects.objects_val)
#define NIS_RES_COOKIE(x) ((x)->cookie)
#define NIS_RES_STATUS(x) ((x)->status)

/* These defines make getting at the variant part of the object easier. */
#define TA_data zo_data.objdata_u.ta_data
#define EN_data zo_data.objdata_u.en_data
#define DI_data zo_data.objdata_u.di_data
#define LI_data zo_data.objdata_u.li_data
#define GR_data zo_data.objdata_u.gr_data

#define __type_of(o) ((o)->zo_data.zo_type)

/* Declarations for the internal subroutines in nislib.c */
enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
typedef enum name_pos name_pos;

/*
 * Defines for getting at column data in entry objects. Because RPCGEN
 * generates some rather wordy structures, we create some defines that
 * collapse the needed keystrokes to access a particular value using
 * these definitions they take an nis_object *, and an int and return
 * a u_char * for Value, and an int for length.
 */
#define ENTRY_VAL(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
#define ENTRY_LEN(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len

#ifdef __cplusplus
}
#endif

/* Prototypes, and extern declarations for the NIS library functions. */
#include <rpcsvc/nislib.h>
#endif /* __NIS_RPCGEN_H */
/* EDIT_START */

/*
 * nis_3.h
 *
 * This file contains definitions that are only of interest to the actual
 * service daemon and client stubs. Normal users of NIS will not include
 * this file.
 *
 * NOTE : This include file is automatically created by a combination
 * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
 * and then remake this file.
 */
#ifndef __nis_3_h
#define __nis_3_h
#ifdef __cplusplus
extern "C" {
#endif

#define	NIS_PROG ((unsigned long)(100300))
#define	NIS_VERSION ((unsigned long)(3))

extern  void nis_prog_3(struct svc_req *rqstp, SVCXPRT *transp);
#define	NIS_LOOKUP ((unsigned long)(1))
extern  nis_result * nis_lookup_3(ns_request *, CLIENT *);
extern  nis_result * nis_lookup_3_svc(ns_request *, struct svc_req *);
#define	NIS_ADD ((unsigned long)(2))
extern  nis_result * nis_add_3(ns_request *, CLIENT *);
extern  nis_result * nis_add_3_svc(ns_request *, struct svc_req *);
#define	NIS_MODIFY ((unsigned long)(3))
extern  nis_result * nis_modify_3(ns_request *, CLIENT *);
extern  nis_result * nis_modify_3_svc(ns_request *, struct svc_req *);
#define	NIS_REMOVE ((unsigned long)(4))
extern  nis_result * nis_remove_3(ns_request *, CLIENT *);
extern  nis_result * nis_remove_3_svc(ns_request *, struct svc_req *);
#define	NIS_IBLIST ((unsigned long)(5))
extern  nis_result * nis_iblist_3(ib_request *, CLIENT *);
extern  nis_result * nis_iblist_3_svc(ib_request *, struct svc_req *);
#define	NIS_IBADD ((unsigned long)(6))
extern  nis_result * nis_ibadd_3(ib_request *, CLIENT *);
extern  nis_result * nis_ibadd_3_svc(ib_request *, struct svc_req *);
#define	NIS_IBMODIFY ((unsigned long)(7))
extern  nis_result * nis_ibmodify_3(ib_request *, CLIENT *);
extern  nis_result * nis_ibmodify_3_svc(ib_request *, struct svc_req *);
#define	NIS_IBREMOVE ((unsigned long)(8))
extern  nis_result * nis_ibremove_3(ib_request *, CLIENT *);
extern  nis_result * nis_ibremove_3_svc(ib_request *, struct svc_req *);
#define	NIS_IBFIRST ((unsigned long)(9))
extern  nis_result * nis_ibfirst_3(ib_request *, CLIENT *);
extern  nis_result * nis_ibfirst_3_svc(ib_request *, struct svc_req *);
#define	NIS_IBNEXT ((unsigned long)(10))
extern  nis_result * nis_ibnext_3(ib_request *, CLIENT *);
extern  nis_result * nis_ibnext_3_svc(ib_request *, struct svc_req *);
#define	NIS_FINDDIRECTORY ((unsigned long)(12))
extern  fd_result * nis_finddirectory_3(fd_args *, CLIENT *);
extern  fd_result * nis_finddirectory_3_svc(fd_args *, struct svc_req *);
#define	NIS_STATUS ((unsigned long)(14))
extern  nis_taglist * nis_status_3(nis_taglist *, CLIENT *);
extern  nis_taglist * nis_status_3_svc(nis_taglist *, struct svc_req *);
#define	NIS_DUMPLOG ((unsigned long)(15))
extern  log_result * nis_dumplog_3(dump_args *, CLIENT *);
extern  log_result * nis_dumplog_3_svc(dump_args *, struct svc_req *);
#define	NIS_DUMP ((unsigned long)(16))
extern  log_result * nis_dump_3(dump_args *, CLIENT *);
extern  log_result * nis_dump_3_svc(dump_args *, struct svc_req *);
#define	NIS_CALLBACK ((unsigned long)(17))
extern  bool_t * nis_callback_3(netobj *, CLIENT *);
extern  bool_t * nis_callback_3_svc(netobj *, struct svc_req *);
#define	NIS_CPTIME ((unsigned long)(18))
extern  u_long * nis_cptime_3(nis_name *, CLIENT *);
extern  u_long * nis_cptime_3_svc(nis_name *, struct svc_req *);
#define	NIS_CHECKPOINT ((unsigned long)(19))
extern  cp_result * nis_checkpoint_3(nis_name *, CLIENT *);
extern  cp_result * nis_checkpoint_3_svc(nis_name *, struct svc_req *);
#define	NIS_PING ((unsigned long)(20))
extern  void * nis_ping_3(ping_args *, CLIENT *);
extern  void * nis_ping_3_svc(ping_args *, struct svc_req *);
#define	NIS_SERVSTATE ((unsigned long)(21))
extern  nis_taglist * nis_servstate_3(nis_taglist *, CLIENT *);
extern  nis_taglist * nis_servstate_3_svc(nis_taglist *, struct svc_req *);
#define	NIS_MKDIR ((unsigned long)(22))
extern  nis_error * nis_mkdir_3(nis_name *, CLIENT *);
extern  nis_error * nis_mkdir_3_svc(nis_name *, struct svc_req *);
#define	NIS_RMDIR ((unsigned long)(23))
extern  nis_error * nis_rmdir_3(nis_name *, CLIENT *);
extern  nis_error * nis_rmdir_3_svc(nis_name *, struct svc_req *);
#define	NIS_UPDKEYS ((unsigned long)(24))
extern  nis_error * nis_updkeys_3(nis_name *, CLIENT *);
extern  nis_error * nis_updkeys_3_svc(nis_name *, struct svc_req *);
extern int nis_prog_3_freeresult(SVCXPRT *, xdrproc_t, caddr_t);

/* the xdr functions */
extern  bool_t xdr_nis_attr(XDR *, nis_attr*);
extern  bool_t xdr_nis_name(XDR *, nis_name*);
extern  bool_t xdr_zotypes(XDR *, zotypes*);
extern  bool_t xdr_nstype(XDR *, nstype*);
extern  bool_t xdr_oar_mask(XDR *, oar_mask*);
extern  bool_t xdr_endpoint(XDR *, endpoint*);
extern  bool_t xdr_nis_server(XDR *, nis_server*);
extern  bool_t xdr_directory_obj(XDR *, directory_obj*);
extern  bool_t xdr_entry_col(XDR *, entry_col*);
extern  bool_t xdr_entry_obj(XDR *, entry_obj*);
extern  bool_t xdr_group_obj(XDR *, group_obj*);
extern  bool_t xdr_link_obj(XDR *, link_obj*);
extern  bool_t xdr_table_col(XDR *, table_col*);
extern  bool_t xdr_table_obj(XDR *, table_obj*);
extern  bool_t xdr_objdata(XDR *, objdata*);
extern  bool_t xdr_nis_oid(XDR *, nis_oid*);
extern  bool_t xdr_nis_object(XDR *, nis_object*);
extern  bool_t xdr_nis_error(XDR *, nis_error*);
extern  bool_t xdr_nis_result(XDR *, nis_result*);
extern  bool_t xdr_ns_request(XDR *, ns_request*);
extern  bool_t xdr_ib_request(XDR *, ib_request*);
extern  bool_t xdr_ping_args(XDR *, ping_args*);
extern  bool_t xdr_log_entry_t(XDR *, log_entry_t*);
extern  bool_t xdr_log_entry(XDR *, log_entry*);
extern  bool_t xdr_log_result(XDR *, log_result*);
extern  bool_t xdr_cp_result(XDR *, cp_result*);
extern  bool_t xdr_nis_tag(XDR *, nis_tag*);
extern  bool_t xdr_nis_taglist(XDR *, nis_taglist*);
extern  bool_t xdr_dump_args(XDR *, dump_args*);
extern  bool_t xdr_fd_args(XDR *, fd_args*);
extern  bool_t xdr_fd_result(XDR *, fd_result*);

#ifdef __cplusplus
}
#endif

#endif /* !_NIS_H_RPCGEN */


code:
%/*
% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
% * unrestricted use provided that this legend is included on all tape
% * media and as a part of the software program in whole or part.  Users
% * may copy or modify Sun RPC without charge, but are not authorized
% * to license or distribute it to anyone else except as part of a product or
% * program developed by the user or with the express written consent of
% * Sun Microsystems, Inc.
% *
% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
% *
% * Sun RPC is provided with no support and without any obligation on the
% * part of Sun Microsystems, Inc. to assist in its use, correction,
% * modification or enhancement.
% *
% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
% * OR ANY PART THEREOF.
% *
% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
% * or profits or other special, indirect and consequential damages, even if
% * Sun has been advised of the possibility of such damages.
% *
% * Sun Microsystems, Inc.
% * 2550 Garcia Avenue
% * Mountain View, California  94043
% */

#ifndef RPC_HDR
%#include <sys/cdefs.h>
%__FBSDID("$FreeBSD: release/9.0.0/include/rpcsvc/nis.x 114629 2003-05-04 02:51:42Z obrien $");
#endif

/*
 * From 4.1 : @(#)nis.x	1.61 Copyright 1989 Sun Microsystems
 *
 * RPC Language Protocol description file for NIS Plus
 * This version : 1.61
 * Last Modified : 3/19/91
 */
#ifdef RPC_HDR
%/*
% *	nis.h
% *
% *	This file is the main include file for NIS clients. It contains
% *	both the client library function defines and the various data
% * 	structures used by the NIS service. It includes the file nis_tags.h
% *	which defines the tag values. This allows the tags to change without
% *	having to change the nis.x file.
% *
% *	NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
% *	       rpcgen is run on the nis.x file. Note that there is a
% *	       simple sed script to remove some unneeded lines. (See the
% *	       Makefile target nis.h)
% *
% */
%#include <rpcsvc/nis_tags.h>
#endif

/* This gets stuffed into the source files. */
#if RPC_HDR
%#include <rpc/xdr.h>
#endif
/*
 * This is just pointless.
 */
#ifdef SUN_STUPIDITY
#if RPC_SVC
%#include "nis_svc.h"
#endif
#endif

/* Include the RPC Language description of NIS objects */
#include "nis_object.x"

/* Errors  that can be returned by the service */
enum nis_error {
	NIS_SUCCESS = 0,	/* A-ok, let's rock n roll 	*/
	NIS_S_SUCCESS = 1,	/* Name found (maybe)	   	*/
	NIS_NOTFOUND = 2,	/* Name definitely not found 	*/
	NIS_S_NOTFOUND = 3,	/* Name maybe not found 	*/
	NIS_CACHEEXPIRED = 4,	/* Name exists but cache out of date */
	NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */
	NIS_UNKNOWNOBJ = 6,	/* Object type is bogus */
	NIS_TRYAGAIN = 7,	/* I'm busy, call back */
	NIS_SYSTEMERROR = 8,	/* Out of band failure */
	NIS_CHAINBROKEN = 9,	/* First/Next warning */
	NIS_PERMISSION = 10,	/* Not enough permission to access */
	NIS_NOTOWNER = 11,	/* You don't own it, sorry */
	NIS_NOT_ME = 12,	/* I don't serve this name */
	NIS_NOMEMORY = 13,	/* Outta VM! Help! */
	NIS_NAMEEXISTS = 14,	/* Can't create over another name */
	NIS_NOTMASTER = 15,	/* I'm justa secondaray, don't ask me */
	NIS_INVALIDOBJ = 16,	/* Object is broken somehow */
	NIS_BADNAME = 17,	/* Unparsable name */
	NIS_NOCALLBACK = 18,	/* Couldn't talk to call back proc */
	NIS_CBRESULTS = 19,	/* Results being called back to you */
	NIS_NOSUCHNAME = 20,	/* Name unknown */
	NIS_NOTUNIQUE = 21,	/* Value is not uniques (entry) */
	NIS_IBMODERROR = 22,	/* Inf. Base. Modify error. */
	NIS_NOSUCHTABLE = 23,	/* Name for table was wrong */
	NIS_TYPEMISMATCH = 24, 	/* Entry and table type mismatch */
	NIS_LINKNAMEERROR = 25,	/* Link points to bogus name */
	NIS_PARTIAL = 26,	/* Partial success, found table */
	NIS_TOOMANYATTRS = 27,	/* Too many attributes */
	NIS_RPCERROR = 28,	/* RPC error encountered */
	NIS_BADATTRIBUTE = 29,	/* Bad or invalid attribute */
	NIS_NOTSEARCHABLE = 30,	/* Non-searchable object searched */
	NIS_CBERROR = 31,	/* Error during callback (svc crash) */
	NIS_FOREIGNNS = 32,	/* Foreign Namespace */
	NIS_BADOBJECT = 33,	/* Malformed object structure */
	NIS_NOTSAMEOBJ = 34,	/* Object swapped during deletion */
	NIS_MODFAIL = 35,	/* Failure during a Modify. */
	NIS_BADREQUEST = 36,	/* Illegal query for table */
	NIS_NOTEMPTY = 37,	/* Attempt to remove a non-empty tbl */
	NIS_COLDSTART_ERR = 38, /* Error accesing the cold start file */
	NIS_RESYNC = 39,	/* Transaction log too far out of date */
	NIS_FAIL = 40,		/* NIS operation failed. */
	NIS_UNAVAIL = 41,	/* NIS+ service is unavailable (client) */
	NIS_RES2BIG = 42,	/* NIS+ result too big for datagram */
	NIS_SRVAUTH = 43,	/* NIS+ server wasn't authenticated. */
	NIS_CLNTAUTH = 44,	/* NIS+ Client wasn't authenticated. */
	NIS_NOFILESPACE = 45,	/* NIS+ server ran out of disk space */
	NIS_NOPROC = 46,	/* NIS+ server couldn't create new proc */
	NIS_DUMPLATER = 47	/* NIS+ server already has dump child */
};

/*
 * Structure definitions for the parameters and results of the actual
 * NIS RPC calls.
 *
 * This is the standard result (in the protocol) of most of the nis
 * requests.
 */

struct nis_result {
	nis_error	status;		/* Status of the response */
	nis_object	objects<>;	/* objects found 	  */
	netobj		cookie;		/* Cookie Data 		  */
	u_long		zticks;		/* server ticks	 	  */
	u_long		dticks;		/* DBM ticks.		  */
	u_long		aticks;		/* Cache (accel) ticks	  */
	u_long		cticks;		/* Client ticks		  */
};

/*
 * A Name Service request
 * This request is used to access the name space, ns_name is the name
 * of the object within the namespace and the object is it's value, for
 * add/modify, a copy of the original for remove.
 */

struct ns_request {
	nis_name	ns_name;	/* Name in the NIS name space	*/
	nis_object	ns_object<1>;	/* Optional Object (add/remove)	*/
};

/*
 * An information base request
 * This request includes the NIS name of the table we wish to search, the
 * search criteria in the form of attribute/value pairs and an optional
 * callback program number. If the callback program number is provided
 * the server will send back objects one at a time, otherwise it will
 * return them all in the response.
 */

struct ib_request {
	nis_name  	ibr_name;	/* The name of the Table 	*/
	nis_attr  	ibr_srch<>; 	/* The search critereia 	*/
	u_long		ibr_flags;	/* Optional flags 		*/
	nis_object	ibr_obj<1>;	/* optional object (add/modify) */
	nis_server	ibr_cbhost<1>;	/* Optional callback info	*/
	u_long		ibr_bufsize;	/* Optional first/next bufsize	*/
	netobj		ibr_cookie;	/* The first/next cookie	*/
};

/*
 * This argument to the PING call notifies the replicas that something in
 * a directory has changed and this is it's timestamp. The replica will use
 * the timestamp to determine if its resync operation was successful.
 */
struct ping_args {
	nis_name	dir;	/* Directory that had the change */
	u_long		stamp;	/* timestamp of the transaction  */
};

/*
 * These are the type of entries that are stored in the transaction log,
 * note that modifications will appear as two entries, for names, they have
 * an "OLD" entry followed by a "NEW" entry. For entries in tables, there
 * is a remove followed by an add. It is done this way so that we can read
 * the log backwards to back out transactions and forwards to propogate
 * updated.
 */
enum log_entry_t {
	LOG_NOP = 0,
	ADD_NAME = 1,		/* Name Added to name space 		  */
	REM_NAME = 2,		/* Name removed from name space 	  */
	MOD_NAME_OLD = 3,	/* Name was modified in the name space 	  */
	MOD_NAME_NEW = 4,	/* Name was modified in the name space 	  */
	ADD_IBASE = 5,		/* Entry added to information base 	  */
	REM_IBASE = 6,		/* Entry removed from information base    */
	MOD_IBASE = 7,		/* Entry was modified in information base */
	UPD_STAMP = 8		/* Update timestamp (used as fenceposts)  */
};

/*
 * This result is returned from the name service when it is requested to
 * dump logged entries from its transaction log. Information base updates
 * will have the name of the information base in the le_name field and
 * a canonical set of attribute/value pairs to fully specify the entry's
 * 'name'.
 */
struct log_entry {
	u_long		le_time;	/* Time in seconds 		*/
	log_entry_t	le_type;	/* Type of log entry 		*/
	nis_name	le_princp;	/* Principal making the change	*/
	nis_name	le_name;	/* Name of table/dir involved 	*/
	nis_attr	le_attrs<>;	/* List of AV pairs.		*/
	nis_object	le_object;	/* Actual object value 		*/
};

struct log_result {
	nis_error 	lr_status;	/* The status itself 	 	*/
	netobj		lr_cookie;	/* Used by the dump callback	*/
	log_entry	lr_entries<>;	/* zero or more entries 	*/
};

struct cp_result {
	nis_error	cp_status;	/* Status of the checkpoint 	*/
	u_long		cp_zticks;	/* Service 'ticks' 	    	*/
	u_long		cp_dticks;	/* Database 'ticks'	    	*/
};

/*
 * This structure defines a generic NIS tag list. The taglist contains
 * zero or tags, each of which is a type and a value. (u_long).
 * These are used to report statistics (see tag definitions below)
 * and to set or reset state variables.
 */
struct nis_tag {
	u_long	tag_type;	/* Statistic tag (may vary) 	 */
	string	tag_val<1024>;	/* Statistic value may also vary */
};

struct nis_taglist {
	nis_tag tags<>;		/* List of tags */
};

struct dump_args {
	nis_name	da_dir;		/* Directory to dump 	*/
	u_long		da_time;	/* From this timestamp	*/
	nis_server	da_cbhost<1>;	/* Callback to use.	*/
};

struct fd_args {
	nis_name	dir_name;  /* The directory we're looking for */
	nis_name	requester; /* Host principal name for signature */
};

struct fd_result {
	nis_error	status;		/* Status returned by function	*/
	nis_name	source;		/* Source of this answer   	*/
	opaque		dir_data<>;	/* Directory Data (XDR'ed) 	*/
	opaque		signature<>;	/* Signature of the source 	*/
};

/*
 * What's going on here? Well, it's like this. When the service
 * is being compiled it wants to have the service definition specific
 * info included, and when the client is being compiled it wants that
 * info. This includes the appropriate file which was generated by
 * make in the protocols directory (probably /usr/include/rpcsvc).
 *
 * Uhm... guys? With RPC, you aren't supposed to have separate
 * server-specific and client-specific header files. You have one header
 * file that's suitable for both. If your code doesn't work using just
 * the one header file, I submit to you that it's broken.
 *							-Bill
 */
#ifdef SUN_STUPIDITY
#ifdef RPC_SVC
%#include "nis_svc.h"
#endif
#ifdef RPC_CLNT
%#include "nis_clnt.h"
#endif
#endif

program  NIS_PROG {

	/* RPC Language description of the NIS+ protocol */
	version NIS_VERSION {
		/* The name service functions */
		nis_result  NIS_LOOKUP(ns_request) = 1;
		nis_result  NIS_ADD(ns_request) = 2;
		nis_result  NIS_MODIFY(ns_request) = 3;
		nis_result  NIS_REMOVE(ns_request) = 4;

		/* The information base functions */
		nis_result  NIS_IBLIST(ib_request) = 5;
		nis_result  NIS_IBADD(ib_request) = 6;
		nis_result  NIS_IBMODIFY(ib_request) = 7;
		nis_result  NIS_IBREMOVE(ib_request) = 8;
		nis_result  NIS_IBFIRST(ib_request) = 9;
		nis_result  NIS_IBNEXT(ib_request) = 10;

		/* NIS Administrative functions */
		fd_result   NIS_FINDDIRECTORY(fd_args) = 12;

		/* If fetch and optionally reset statistics */
		nis_taglist  NIS_STATUS(nis_taglist) = 14;

		/* Dump changes to directory since time in da_time */
		log_result  NIS_DUMPLOG(dump_args) = 15;

		/* Dump contents of directory named */
		log_result  NIS_DUMP(dump_args) = 16;

		/* Check status of callback thread */
		bool	    NIS_CALLBACK(netobj) = 17;

		/* Return last update time for named dir */
		u_long      NIS_CPTIME(nis_name) = 18;

		/* Checkpoint directory or table named */
		cp_result   NIS_CHECKPOINT(nis_name) = 19;

		/* Send 'status changed' ping to replicates */
		void	    NIS_PING(ping_args) = 20;

		/* Modify server behaviour (such as debugging) */
		nis_taglist NIS_SERVSTATE(nis_taglist) = 21;

		/* Create a Directory */
		nis_error   NIS_MKDIR(nis_name) = 22;

		/* Remove a Directory */
		nis_error   NIS_RMDIR(nis_name) = 23;

		/* Update public keys of a directory object */
		nis_error   NIS_UPDKEYS(nis_name) = 24;
	} = 3;
} = 100300;

/*
 * Included below are the defines that become part of nis.h,
 * they are technically not part of the protocol, but do define
 * key aspects of the implementation and are therefore useful
 * in building a conforming server or client.
 */
#if RPC_HDR
%/*
% * Generic "hash" datastructures, used by all types of hashed data.
% */
%struct nis_hash_data {
%	nis_name		name;	   /* NIS name of hashed item      */
%	int			keychain;  /* It's hash key (for pop)      */
%	struct nis_hash_data	*next;	   /* Hash collision pointer       */
%	struct nis_hash_data	*prv_item; /* A serial, doubly linked list */
%	struct nis_hash_data	*nxt_item; /* of items in the hash table   */
%};
%typedef struct nis_hash_data NIS_HASH_ITEM;
%
%struct nis_hash_table {
%	NIS_HASH_ITEM	*keys[64];	/* A hash table of items           */
%	NIS_HASH_ITEM	*first;		/* The first "item" in serial list */
%};
%typedef struct nis_hash_table NIS_HASH_TABLE;
%
%/* Structure for storing dynamically allocated static data */
%struct nis_sdata {
%	void	*buf;	/* Memory allocation pointer 	*/
%	u_long	size;	/* Buffer size			*/
%};
%
%/* Generic client creating flags */
%#define ZMH_VC		1
%#define ZMH_DG		2
%#define ZMH_AUTH	4
%
%/* Testing Access rights for objects */
%
%#define NIS_READ_ACC		1
%#define NIS_MODIFY_ACC		2
%#define NIS_CREATE_ACC		4
%#define NIS_DESTROY_ACC	8
%/* Test macros. a == access rights, m == desired rights. */
%#define WORLD(a, m)	(((a) & (m)) != 0)
%#define GROUP(a, m)	(((a) & ((m) << 8)) != 0)
%#define OWNER(a, m)	(((a) & ((m) << 16)) != 0)
%#define NOBODY(a, m)	(((a) & ((m) << 24)) != 0)
%
%#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
%#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
%#define WORLD_DEFAULT (NIS_READ_ACC)
%#define GROUP_DEFAULT (NIS_READ_ACC << 8)
%#define OWNER_DEFAULT ((NIS_READ_ACC +\
			 NIS_MODIFY_ACC +\
			 NIS_CREATE_ACC +\
			 NIS_DESTROY_ACC) << 16)
%#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
%
%/* Result manipulation defines ... */
%#define NIS_RES_NUMOBJ(x)	((x)->objects.objects_len)
%#define NIS_RES_OBJECT(x)	((x)->objects.objects_val)
%#define NIS_RES_COOKIE(x)	((x)->cookie)
%#define NIS_RES_STATUS(x)	((x)->status)
%
%/* These defines make getting at the variant part of the object easier. */
%#define TA_data zo_data.objdata_u.ta_data
%#define EN_data zo_data.objdata_u.en_data
%#define DI_data zo_data.objdata_u.di_data
%#define LI_data zo_data.objdata_u.li_data
%#define GR_data zo_data.objdata_u.gr_data
%
%#define __type_of(o) ((o)->zo_data.zo_type)
%
%/* Declarations for the internal subroutines in nislib.c */
%enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
%typedef enum name_pos name_pos;
%
%/*
% * Defines for getting at column data in entry objects. Because RPCGEN
% * generates some rather wordy structures, we create some defines that
% * collapse the needed keystrokes to access a particular value using
% * these definitions they take an nis_object *, and an int and return
% * a u_char * for Value, and an int for length.
% */
%#define ENTRY_VAL(obj, col) \
	(obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
%#define ENTRY_LEN(obj, col) \
	(obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
%
%#ifdef __cplusplus
%}
%#endif
%
%/* Prototypes, and extern declarations for the NIS library functions. */
%#include <rpcsvc/nislib.h>
%#endif /* __NIS_RPCGEN_H */
%/* EDIT_START */
%
%/*
% * nis_3.h
% *
% * This file contains definitions that are only of interest to the actual
% * service daemon and client stubs. Normal users of NIS will not include
% * this file.
% *
% * NOTE : This include file is automatically created by a combination
% * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
% * and then remake this file.
% */
%#ifndef __nis_3_h
%#define __nis_3_h
%#ifdef __cplusplus
%extern "C" {
%#endif
#endif

repo_name: veiledmerc/mira

license: mit


code:
/*
 * Please do not edit this file.
 * It was generated using rpcgen.
 */

#ifndef _NIS_CACHE_H_RPCGEN
#define	_NIS_CACHE_H_RPCGEN

#include <rpc/rpc.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user or with the express written consent of
 * Sun Microsystems, Inc.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */
#include <rpc/types.h>
#include <rpcsvc/nis.h>

/* default cache file */
#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE"

/* clients have to read-lock the cache file, and SVR4 locking requires that */
/*   the file be writable, but we don't want a world-writable cache file.   */
/*   So... everyone agrees to use a different, world-writable file for the  */
/*   locking operations, but the data is in CACHEFILE.                      */
#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK"

/* the file containing one trusted XDR'ed directory object.
 * This has to be present for the system to work.
 */
#define COLD_START_FILE "/var/nis/NIS_COLD_START"

enum pc_status {HIT, MISS, NEAR_MISS};

extern int __nis_debuglevel;

#define	CACHEPROG ((unsigned long)(100301))
#define	CACHE_VER_1 ((unsigned long)(1))

extern  void cacheprog_1(struct svc_req *rqstp, SVCXPRT *transp);
#define	NIS_CACHE_ADD_ENTRY ((unsigned long)(1))
extern  void * nis_cache_add_entry_1(fd_result *, CLIENT *);
extern  void * nis_cache_add_entry_1_svc(fd_result *, struct svc_req *);
#define	NIS_CACHE_REMOVE_ENTRY ((unsigned long)(2))
extern  void * nis_cache_remove_entry_1(directory_obj *, CLIENT *);
extern  void * nis_cache_remove_entry_1_svc(directory_obj *, struct svc_req *);
#define	NIS_CACHE_READ_COLDSTART ((unsigned long)(3))
extern  void * nis_cache_read_coldstart_1(void *, CLIENT *);
extern  void * nis_cache_read_coldstart_1_svc(void *, struct svc_req *);
#define	NIS_CACHE_REFRESH_ENTRY ((unsigned long)(4))
extern  void * nis_cache_refresh_entry_1(char **, CLIENT *);
extern  void * nis_cache_refresh_entry_1_svc(char **, struct svc_req *);
extern int cacheprog_1_freeresult(SVCXPRT *, xdrproc_t, caddr_t);

#ifdef __cplusplus
}
#endif

#endif /* !_NIS_CACHE_H_RPCGEN */


code:
%/*
% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
% * unrestricted use provided that this legend is included on all tape
% * media and as a part of the software program in whole or part.  Users
% * may copy or modify Sun RPC without charge, but are not authorized
% * to license or distribute it to anyone else except as part of a product or
% * program developed by the user or with the express written consent of
% * Sun Microsystems, Inc.
% *
% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
% *
% * Sun RPC is provided with no support and without any obligation on the
% * part of Sun Microsystems, Inc. to assist in its use, correction,
% * modification or enhancement.
% *
% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
% * OR ANY PART THEREOF.
% *
% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
% * or profits or other special, indirect and consequential damages, even if
% * Sun has been advised of the possibility of such damages.
% *
% * Sun Microsystems, Inc.
% * 2550 Garcia Avenue
% * Mountain View, California  94043
% */

/*
 *	nis_cache.x
 *
 *	Copyright (c) 1988-1992 Sun Microsystems Inc
 *	All Rights Reserved.
 */

/* From: %#pragma ident	"@(#)nis_cache.x	1.11	94/05/03 SMI" */

#ifndef RPC_HDR
%#include <sys/cdefs.h>
%__FBSDID("$FreeBSD: release/9.0.0/include/rpcsvc/nis_cache.x 114629 2003-05-04 02:51:42Z obrien $");
#endif

#ifdef RPC_HDR
%#include <rpc/types.h>
%#include <rpcsvc/nis.h>
%
%/* default cache file */
%#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE"
%
%/* clients have to read-lock the cache file, and SVR4 locking requires that */
%/*   the file be writable, but we don't want a world-writable cache file.   */
%/*   So... everyone agrees to use a different, world-writable file for the  */
%/*   locking operations, but the data is in CACHEFILE.                      */
%#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK"
%
%/* the file containing one trusted XDR'ed directory object.
% * This has to be present for the system to work.
% */
%#define COLD_START_FILE "/var/nis/NIS_COLD_START"
%
%enum pc_status {HIT, MISS, NEAR_MISS};
%
%extern int __nis_debuglevel;
%
%
#endif

#ifdef RPC_CLNT
#ifdef SOLARIS
%#include "../gen/nis_clnt.h"
#else
%#include "nis.h"
#endif
#endif

program CACHEPROG {
	version CACHE_VER_1 {
		void NIS_CACHE_ADD_ENTRY(fd_result) = 1;
		void NIS_CACHE_REMOVE_ENTRY(directory_obj) = 2;
		void NIS_CACHE_READ_COLDSTART(void) = 3;
		void NIS_CACHE_REFRESH_ENTRY(string<>) = 4;
	} = 1;
} = 100301;


code:
/*
 * Please do not edit this file.
 * It was generated using rpcgen.
 */

#ifndef _NIS_CALLBACK_H_RPCGEN
#define	_NIS_CALLBACK_H_RPCGEN

#include <rpc/rpc.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user or with the express written consent of
 * Sun Microsystems, Inc.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */
#include <rpcsvc/nis.h>

typedef nis_object *obj_p;

struct cback_data {
	struct {
		u_int entries_len;
		obj_p *entries_val;
	} entries;
};
typedef struct cback_data cback_data;

#define	CB_PROG ((unsigned long)(100302))
#define	CB_VERS ((unsigned long)(1))

extern  void cb_prog_1(struct svc_req *rqstp, SVCXPRT *transp);
#define	CBPROC_RECEIVE ((unsigned long)(1))
extern  bool_t * cbproc_receive_1(cback_data *, CLIENT *);
extern  bool_t * cbproc_receive_1_svc(cback_data *, struct svc_req *);
#define	CBPROC_FINISH ((unsigned long)(2))
extern  void * cbproc_finish_1(void *, CLIENT *);
extern  void * cbproc_finish_1_svc(void *, struct svc_req *);
#define	CBPROC_ERROR ((unsigned long)(3))
extern  void * cbproc_error_1(nis_error *, CLIENT *);
extern  void * cbproc_error_1_svc(nis_error *, struct svc_req *);
extern int cb_prog_1_freeresult(SVCXPRT *, xdrproc_t, caddr_t);

/* the xdr functions */
extern  bool_t xdr_obj_p(XDR *, obj_p*);
extern  bool_t xdr_cback_data(XDR *, cback_data*);

#ifdef __cplusplus
}
#endif

#endif /* !_NIS_CALLBACK_H_RPCGEN */


code:
%/*
% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
% * unrestricted use provided that this legend is included on all tape
% * media and as a part of the software program in whole or part.  Users
% * may copy or modify Sun RPC without charge, but are not authorized
% * to license or distribute it to anyone else except as part of a product or
% * program developed by the user or with the express written consent of
% * Sun Microsystems, Inc.
% *
% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
% *
% * Sun RPC is provided with no support and without any obligation on the
% * part of Sun Microsystems, Inc. to assist in its use, correction,
% * modification or enhancement.
% *
% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
% * OR ANY PART THEREOF.
% *
% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
% * or profits or other special, indirect and consequential damages, even if
% * Sun has been advised of the possibility of such damages.
% *
% * Sun Microsystems, Inc.
% * 2550 Garcia Avenue
% * Mountain View, California  94043
% */

/*
 *	nis_callback.x
 *
 *	Copyright (c) 1988-1992 Sun Microsystems Inc
 *	All Rights Reserved.
 */

/* From: %#pragma ident	"@(#)nis_callback.x	1.7	94/05/03 SMI" */

#ifndef RPC_HDR
%#include <sys/cdefs.h>
%__FBSDID("$FreeBSD: release/9.0.0/include/rpcsvc/nis_callback.x 114629 2003-05-04 02:51:42Z obrien $");
#endif

/*
 * "@(#)zns_cback.x 1.2 90/09/10 Copyr 1990 Sun Micro"
 *
 * RPCL description of the Callback Service.
 */

#ifdef RPC_HDR
%#include <rpcsvc/nis.h>
#endif
#ifdef RPC_XDR
#ifdef SOLARIS
%#include "nis_clnt.h"
#else
%#include "nis.h"
#endif
#endif

typedef nis_object	*obj_p;

struct cback_data {
	obj_p		entries<>;	/* List of objects */
};

program CB_PROG {
	version CB_VERS {
		bool	CBPROC_RECEIVE(cback_data) = 1;
		void	CBPROC_FINISH(void) = 2;
		void	CBPROC_ERROR(nis_error) = 3;
	} = 1;
} = 100302;


code:
/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 *
 * $FreeBSD: release/9.0.0/include/rpcsvc/nis_db.h 93032 2002-03-23 17:24:55Z imp $
 */

/*
 * Copyright (c) 1991, by Sun Microsystems Inc.
 */

/*
 * This header file defines the interface to the NIS database. All
 * implementations of the database must export at least these routines.
 * They must also follow the conventions set herein. See the implementors
 * guide for specific semantics that are required.
 */

#ifndef	_RPCSVC_NIS_DB_H
#define	_RPCSVC_NIS_DB_H

/* From: #pragma ident	"@(#)nis_db.h	1.8	94/05/03 SMI" */

/*
 * Note: although the version of <rpcsvc/nis_db.h> shipped with Solaris
 * 2.5/2.5.x is actually older than this one (according to the ident
 * string), it contains changes and a few added functions. Those changes
 * have been hand merged into this file to bring it up to date.
 */

#include <rpc/rpc.h>
#include <rpcsvc/nis.h>

#ifdef	__cplusplus
extern "C" {
#endif

enum db_status {
	DB_SUCCESS = 0,
	DB_NOTFOUND = 1,
	DB_NOTUNIQUE = 2,
	DB_BADTABLE = 3,
	DB_BADQUERY = 4,
	DB_BADOBJECT = 5,
	DB_MEMORY_LIMIT = 6,
	DB_STORAGE_LIMIT = 7,
	DB_INTERNAL_ERROR = 8
};
typedef enum db_status db_status;

enum db_action {
	DB_LOOKUP = 0,
	DB_REMOVE = 1,
	DB_ADD = 2,
	DB_FIRST = 3,
	DB_NEXT = 4,
	DB_ALL = 5,
	DB_RESET_NEXT = 6
};
typedef enum db_action db_action;

typedef entry_obj *entry_object_p;

typedef struct {
	u_int db_next_desc_len;
	char *db_next_desc_val;
} db_next_desc;

struct db_result {
	db_status status;
	db_next_desc nextinfo;
	struct {
		u_int objects_len;
		entry_object_p *objects_val;
	} objects;
	long ticks;
};
typedef struct db_result db_result;

/*
 * Prototypes for the database functions.
 */

extern bool_t db_initialize(char *);
#ifdef ORIGINAL_DECLS
extern bool_t db_create_table(char *, table_obj *);
extern bool_t db_destroy_table(char *);
#else
extern db_status db_create_table(char *, table_obj *);
extern db_status db_destroy_table(char *);
#endif
extern db_result *db_first_entry(char *, int, nis_attr *);
extern db_result *db_next_entry(char *, db_next_desc *);
extern db_result *db_reset_next_entry(char *, db_next_desc *);
extern db_result *db_list_entries(char *, int, nis_attr *);
extern db_result *db_add_entry(char *, int,  nis_attr *, entry_obj *);
extern db_result *db_remove_entry(char *, int, nis_attr *);
extern db_status db_checkpoint(char *);
extern db_status db_standby(char *);
#ifndef ORIGINAL_DECLS
extern db_status db_table_exists(char *);
extern db_status db_unload_table(char *);
extern void db_free_result(db_result *);
#endif

#ifdef __cplusplus
}
#endif

#endif	/* _RPCSVC_NIS_DB_H */


code:
%/*
% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
% * unrestricted use provided that this legend is included on all tape
% * media and as a part of the software program in whole or part.  Users
% * may copy or modify Sun RPC without charge, but are not authorized
% * to license or distribute it to anyone else except as part of a product or
% * program developed by the user or with the express written consent of
% * Sun Microsystems, Inc.
% *
% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
% *
% * Sun RPC is provided with no support and without any obligation on the
% * part of Sun Microsystems, Inc. to assist in its use, correction,
% * modification or enhancement.
% *
% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
% * OR ANY PART THEREOF.
% *
% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
% * or profits or other special, indirect and consequential damages, even if
% * Sun has been advised of the possibility of such damages.
% *
% * Sun Microsystems, Inc.
% * 2550 Garcia Avenue
% * Mountain View, California  94043
% */

/*
 *	nis_object.x
 *
 *	Copyright (c) 1988-1992 Sun Microsystems Inc
 *	All Rights Reserved.
 */

/* From: %#pragma ident	"@(#)nis_object.x	1.10	94/05/03 SMI" */

#if RPC_HDR
%
%#ifndef __nis_object_h
%#define __nis_object_h
%
#endif
/*
 * 	This file defines the format for a NIS object in RPC language.
 * It is included by the main .x file and the database access protocol
 * file. It is common because both of them need to deal with the same
 * type of object. Generating the actual code though is a bit messy because
 * the nis.x file and the nis_dba.x file will generate xdr routines to
 * encode/decode objects when only one set is needed. Such is life when
 * one is using rpcgen.
 *
 * Note, the protocol doesn't specify any limits on such things as
 * maximum name length, number of attributes, etc. These are enforced
 * by the database backend. When you hit them you will no. Also see
 * the db_getlimits() function for fetching the limit values.
 *
 */

/* Some manifest constants, chosen to maximize flexibility without
 * plugging the wire full of data.
 */
const NIS_MAXSTRINGLEN = 255;
const NIS_MAXNAMELEN   = 1024;
const NIS_MAXATTRNAME  = 32;
const NIS_MAXATTRVAL   = 2048;
const NIS_MAXCOLUMNS   = 64;
const NIS_MAXATTR      = 16;
const NIS_MAXPATH      = 1024;
const NIS_MAXREPLICAS  = 128;
const NIS_MAXLINKS     = 16;

const NIS_PK_NONE      = 0;	/* no public key (unix/sys auth) */
const NIS_PK_DH	       = 1;	/* Public key is Diffie-Hellman type */
const NIS_PK_RSA       = 2;	/* Public key if RSA type */
const NIS_PK_KERB      = 3;	/* Use kerberos style authentication */

/*
 * The fundamental name type of NIS. The name may consist of two parts,
 * the first being the fully qualified name, and the second being an
 * optional set of attribute/value pairs.
 */
struct nis_attr {
	string	zattr_ndx<>;	/* name of the index 		*/
	opaque	zattr_val<>;	/* Value for the attribute. 	*/
};

typedef string nis_name<>;	/* The NIS name itself. */

/* NIS object types are defined by the following enumeration. The numbers
 * they use are based on the following scheme :
 *		     0 - 1023 are reserved for Sun,
 * 		1024 - 2047 are defined to be private to a particular tree.
 *		2048 - 4095 are defined to be user defined.
 *		4096 - ...  are reserved for future use.
 */

enum zotypes {
	BOGUS_OBJ  	= 0,	/* Uninitialized object structure 	*/
	NO_OBJ   	= 1,	/* NULL object (no data)	 	*/
	DIRECTORY_OBJ 	= 2,	/* Directory object describing domain 	*/
	GROUP_OBJ  	= 3,	/* Group object (a list of names) 	*/
	TABLE_OBJ  	= 4,	/* Table object (a database schema) 	*/
	ENTRY_OBJ  	= 5,	/* Entry object (a database record) 	*/
	LINK_OBJ   	= 6, 	/* A name link.				*/
	PRIVATE_OBJ   	= 7 	/* Private object (all opaque data) 	*/
};

/*
 * The types of Name services NIS knows about. They are enumerated
 * here. The Binder code will use this type to determine if it has
 * a set of library routines that will access the indicated name service.
 */
enum nstype {
	UNKNOWN = 0,
	NIS = 1,	/* Nis Plus Service		*/
	SUNYP = 2,	/* Old NIS Service		*/
	IVY = 3,	/* Nis Plus Plus Service	*/
	DNS = 4,	/* Domain Name Service		*/
	X500 = 5,	/* ISO/CCCIT X.500 Service	*/
	DNANS = 6,	/* Digital DECNet Name Service	*/
	XCHS = 7,	/* Xerox ClearingHouse Service	*/
	CDS= 8
};

/*
 * DIRECTORY - The name service object. These objects identify other name
 * servers that are serving some portion of the name space. Each has a
 * type associated with it. The resolver library will note whether or not
 * is has the needed routines to access that type of service.
 * The oarmask structure defines an access rights mask on a per object
 * type basis for the name spaces. The only bits currently used are
 * create and destroy. By enabling or disabling these access rights for
 * a specific object type for a one of the accessor entities (owner,
 * group, world) the administrator can control what types of objects
 * may be freely added to the name space and which require the
 * administrator's approval.
 */
struct oar_mask {
	u_long	oa_rights;	/* Access rights mask 	*/
	zotypes	oa_otype;	/* Object type 		*/
};

struct endpoint {
	string		uaddr<>;
	string		family<>;   /* Transport family (INET, OSI, etc) */
	string		proto<>;    /* Protocol (TCP, UDP, CLNP,  etc)   */
};

/*
 * Note: pkey is a netobj which is limited to 1024 bytes which limits the
 * keysize to 8192 bits. This is consider to be a reasonable limit for
 * the expected lifetime of this service.
 */
struct nis_server {
	nis_name	name; 	 	/* Principal name of the server  */
	endpoint	ep<>;  		/* Universal addr(s) for server  */
	u_long		key_type;	/* Public key type		 */
	netobj		pkey;		/* server's public key  	 */
};

struct directory_obj {
	nis_name   do_name;	 /* Name of the directory being served   */
	nstype	   do_type;	 /* one of NIS, DNS, IVY, YP, or X.500 	 */
	nis_server do_servers<>; /* <0> == Primary name server     	 */
	u_long	   do_ttl;	 /* Time To Live (for caches) 		 */
	oar_mask   do_armask<>;  /* Create/Destroy rights by object type */
};

/*
 * ENTRY - This is one row of data from an information base.
 * The type value is used by the client library to convert the entry to
 * it's internal structure representation. The Table name is a back pointer
 * to the table where the entry is stored. This allows the client library
 * to determine where to send a request if the client wishes to change this
 * entry but got to it through a LINK rather than directly.
 * If the entry is a "standalone" entry then this field is void.
 */
const EN_BINARY   = 1;	/* Indicates value is binary data 	*/
const EN_CRYPT    = 2;	/* Indicates the value is encrypted	*/
const EN_XDR      = 4;	/* Indicates the value is XDR encoded	*/
const EN_MODIFIED = 8;	/* Indicates entry is modified. 	*/
const EN_ASN1     = 64;	/* Means contents use ASN.1 encoding    */

struct entry_col {
	u_long	ec_flags;	/* Flags for this value */
	opaque	ec_value<>;	/* It's textual value	*/
};

struct entry_obj {
	string 	en_type<>;	/* Type of entry such as "passwd" */
	entry_col en_cols<>;	/* Value for the entry		  */
};

/*
 * GROUP - The group object contains a list of NIS principal names. Groups
 * are used to authorize principals. Each object has a set of access rights
 * for members of its group. Principal names in groups are in the form
 * name.directory and recursive groups are expressed as @groupname.directory
 */
struct group_obj {
	u_long		gr_flags;	/* Flags controlling group	*/
	nis_name	gr_members<>;  	/* List of names in group 	*/
};

/*
 * LINK - This is the LINK object. It is quite similar to a symbolic link
 * in the UNIX filesystem. The attributes in the main object structure are
 * relative to the LINK data and not what it points to (like the file system)
 * "modify" privleges here indicate the right to modify what the link points
 * at and not to modify that actual object pointed to by the link.
 */
struct link_obj {
	zotypes	 li_rtype;	/* Real type of the object	*/
	nis_attr li_attrs<>;	/* Attribute/Values for tables	*/
	nis_name li_name; 	/* The object's real NIS name	*/
};

/*
 * TABLE - This is the table object. It implements a simple
 * data base that applications and use for configuration or
 * administration purposes. The role of the table is to group together
 * a set of related entries. Tables are the simple database component
 * of NIS. Like many databases, tables are logically divided into columns
 * and rows. The columns are labeled with indexes and each ENTRY makes
 * up a row. Rows may be addressed within the table by selecting one
 * or more indexes, and values for those indexes. Each row which has
 * a value for the given index that matches the desired value is returned.
 * Within the definition of each column there is a flags variable, this
 * variable contains flags which determine whether or not the column is
 * searchable, contains binary data, and access rights for the entry objects
 * column value.
 */

const TA_BINARY     = 1;	/* Means table data is binary 		*/
const TA_CRYPT      = 2;	/* Means value should be encrypted 	*/
const TA_XDR        = 4;	/* Means value is XDR encoded		*/
const TA_SEARCHABLE = 8;	/* Means this column is searchable	*/
const TA_CASE       = 16;	/* Means this column is Case Sensitive	*/
const TA_MODIFIED   = 32;	/* Means this columns attrs are modified*/
const TA_ASN1       = 64;	/* Means contents use ASN.1 encoding     */

struct table_col {
	string	tc_name<64>;	/* Column Name 	 	   */
	u_long	tc_flags;	/* control flags	   */
	u_long	tc_rights;	/* Access rights mask	   */
};

struct table_obj {
	string 	  ta_type<64>;	 /* Table type such as "passwd"	*/
	int	  ta_maxcol;	 /* Total number of columns	*/
	u_char	  ta_sep;	 /* Separator character 	*/
	table_col ta_cols<>; 	 /* The number of table indexes */
	string	  ta_path<>;	 /* A search path for this table */
};

/*
 * This union joins together all of the currently known objects.
 */
union objdata switch (zotypes zo_type) {
        case DIRECTORY_OBJ :
                struct directory_obj di_data;
        case GROUP_OBJ :
                struct group_obj gr_data;
        case TABLE_OBJ :
                struct table_obj ta_data;
        case ENTRY_OBJ:
                struct entry_obj en_data;
        case LINK_OBJ :
                struct link_obj li_data;
        case PRIVATE_OBJ :
                opaque	po_data<>;
	case NO_OBJ :
		void;
        case BOGUS_OBJ :
		void;
        default :
                void;
};

/*
 * This is the basic NIS object data type. It consists of a generic part
 * which all objects contain, and a specialized part which varies depending
 * on the type of the object. All of the specialized sections have been
 * described above. You might have wondered why they all start with an
 * integer size, followed by the useful data. The answer is, when the
 * server doesn't recognize the type returned it treats it as opaque data.
 * And the definition for opaque data is {int size; char *data;}. In this
 * way, servers and utility routines that do not understand a given type
 * may still pass it around. One has to be careful in setting
 * this variable accurately, it must take into account such things as
 * XDR padding of structures etc. The best way to set it is to note one's
 * position in the XDR encoding stream, encode the structure, look at the
 * new position and calculate the size.
 */
struct nis_oid {
	u_long	ctime;		/* Time of objects creation 	*/
	u_long	mtime;		/* Time of objects modification */
};

struct nis_object {
	nis_oid	 zo_oid;	/* object identity verifier.		*/
	nis_name zo_name;	/* The NIS name for this object		*/
	nis_name zo_owner;	/* NIS name of object owner.		*/
	nis_name zo_group;	/* NIS name of access group.		*/
	nis_name zo_domain;	/* The administrator for the object	*/
	u_long	 zo_access;	/* Access rights (owner, group, world)	*/
	u_long	 zo_ttl;	/* Object's time to live in seconds.	*/
	objdata	 zo_data;	/* Data structure for this type 	*/
};
#if RPC_HDR
%
%#endif /* if __nis_object_h */
%
#endif


code:
/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */

/*
 * Copyright (c) 1991, Sun Microsystems Inc.
 */

/*
 *	nis_tags.h
 *
 *	This file contains the tags and statistics definitions. It is
 *	automatically included by nis.h
 */

#ifndef	_RPCSVC_NIS_TAGS_H
#define	_RPCSVC_NIS_TAGS_H

/* From: #pragma ident	"@(#)nis_tags.h	1.10	94/05/03 SMI" */
/* from file: zns_tags.h	1.7 Copyright (c) 1990 Sun Microsystems */

#ifdef	__cplusplus
extern "C" {
#endif

#ifndef ORIGINAL_DECLS
#define		NIS_DIR "data"
#endif

/* Lookup and List function flags */
#define	FOLLOW_LINKS	(1<<0)	/* Follow link objects 			*/
#define	FOLLOW_PATH	(1<<1)	/* Follow the path in a table 		*/
#define	HARD_LOOKUP	(1<<2)	/* Block until successful 		*/
#define	ALL_RESULTS	(1<<3)	/* Retrieve all results 		*/
#define	NO_CACHE	(1<<4)	/* Do not return 'cached' results 	*/
#define	MASTER_ONLY	(1<<5)	/* Get value only from master server	*/
#define	EXPAND_NAME	(1<<6)	/* Expand partitially qualified names	*/

/* Semantic modification for table operations flags */
#define	RETURN_RESULT	(1<<7)	/* Return resulting object to client    */
#define	ADD_OVERWRITE	(1<<8)	/* Allow overwrites on ADD		*/
#define	REM_MULTIPLE	(1<<9)	/* Allow wildcard deletes		*/
#define	MOD_SAMEOBJ	(1<<10)	/* Check modified object before write	*/
#define	ADD_RESERVED	(1<<11)	/* Spare ADD semantic			*/
#define	REM_RESERVED	(1<<12)	/* Spare REM semantic			*/
#ifdef ORIGINAL_DECLS
#define	MOD_RESERVED	(1<<13)	/* Spare MOD semantic			*/
#else
#define	MOD_EXCLUSIVE	(1<<13)	/* Modify no overwrite on modified keys	*/
#endif

/* Transport specific modifications to the operation */
#define	USE_DGRAM	(1<<16) /* Use a datagram transport 		*/
#define	NO_AUTHINFO	(1<<17) /* Don't bother attaching auth info	*/

/*
 * Declarations for "standard" NIS+ tags
 * State variable tags have values	0 - 2047
 * Statistic tags have values		2048 - 65535
 * User Tags have values		>2^16
 */
#define	TAG_DEBUG	1	/* set debug level 		*/
#define	TAG_STATS	2	/* Enable/disable statistics 	*/
#define	TAG_GCACHE	3	/* Flush the Group Cache	*/
#ifndef ORIGINAL_DECLS
#define	TAG_GCACHE_ALL	TAG_GCACHE
#endif
#define	TAG_DCACHE	4	/* Flush the directory cache	*/
#ifndef ORIGINAL_DECLS
#define	TAG_DCACHE_ONE	TAG_DCACHE
#endif
#define	TAG_OCACHE	5	/* Flush the Object Cache	*/
#define	TAG_SECURE	6	/* Set the security level 	*/
#ifndef ORIGINAL_DECLS
#define	TAG_TCACHE_ONE	7	/* Flush the table cache	*/
#define	TAG_DCACHE_ALL	8	/* Flush entire directory cache */
#define TAG_TCACHE_ALL	9	/* Flush entire table cache	*/
#define	TAG_GCACHE_ONE	10	/* Flush one group object	*/
#define	TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO	*/
#endif

#define	TAG_OPSTATS	2048	/* NIS+ operations statistics   */
#define	TAG_THREADS	2049	/* Child process/thread status  */
#define	TAG_HEAP	2050	/* Heap usage statistics	*/
#define	TAG_UPDATES	2051	/* Updates to this service	*/
#define	TAG_VISIBLE	2052	/* First update that isn't replicated */
#define	TAG_S_DCACHE	2053	/* Directory cache statistics	*/
#define	TAG_S_OCACHE	2054	/* Object cache statistics	*/
#define	TAG_S_GCACHE	2055	/* Group cache statistics	*/
#define	TAG_S_STORAGE	2056	/* Group cache statistics	*/
#define	TAG_UPTIME	2057	/* Time that server has been up */
#ifndef ORIGINAL_DECLS
#define	TAG_DIRLIST	2058    /* Dir served by this server	*/
#define	TAG_NISCOMPAT	2059    /* Whether supports NIS compat mode */
#define	TAG_DNSFORWARDING 2060	/* Whether DNS forwarding supported*/
#define	TAG_SECURITY_LEVEL 2061 /* Security level of the server */
#define	TAG_ROOTSERVER	2062	/* Whether root server		*/
#endif

/*
 * Declarations for the Group object flags. Currently
 * there are only 3.
 */
#define	IMPMEM_GROUPS  1	/* Implicit Membership allowed 	*/
#define	RECURS_GROUPS  2	/* Recursive Groups allowed 	*/
#define	NEGMEM_GROUPS  4	/* Negative Groups allowed	*/

#ifdef	__cplusplus
}
#endif

#endif	/* _RPCSVC_NIS_TAGS_H */


code:
/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 *
 * $FreeBSD: release/9.0.0/include/rpcsvc/nislib.h 93032 2002-03-23 17:24:55Z imp $
 */

/*
 * Copyright (c) 1991, Sun Microsystems Inc.
 */

/*
 * This file contains the interfaces that are visible in the SunOS 5.x
 * implementation of NIS Plus.
 */

#ifndef	_RPCSVC_NISLIB_H
#define	_RPCSVC_NISLIB_H

/* From: #pragma ident	"@(#)nislib.h	1.16	94/05/03 SMI" */

#ifdef __cplusplus
extern "C" {
#endif

struct signature {
	int signature_len;
	char *signature_val;
};

extern void nis_freeresult(nis_result *);
extern nis_result * nis_lookup(nis_name, u_long);
extern nis_result * nis_list(nis_name, u_long,
	int (*)(nis_name, nis_object *, void *), void *);
extern nis_result * nis_add(nis_name, nis_object *);
extern nis_result * nis_remove(nis_name, nis_object *);
extern nis_result * nis_modify(nis_name, nis_object *);

extern nis_result * nis_add_entry(nis_name, nis_object *, u_long);
extern nis_result * nis_remove_entry(nis_name, nis_object *, u_long);
extern nis_result * nis_modify_entry(nis_name, nis_object *, u_long);
extern nis_result * nis_first_entry(nis_name);
extern nis_result * nis_next_entry(nis_name, netobj *);

extern nis_error nis_mkdir(nis_name, nis_server *);
extern nis_error nis_rmdir(nis_name, nis_server *);
extern name_pos nis_dir_cmp(nis_name, nis_name);

extern nis_name * nis_getnames(nis_name);
extern void nis_freenames(nis_name *);
extern nis_name nis_domain_of(nis_name);
extern nis_name nis_leaf_of(nis_name);
extern nis_name nis_leaf_of_r(const nis_name, char *, size_t);
extern nis_name nis_name_of(nis_name);
extern nis_name nis_local_group(void);
extern nis_name nis_local_directory(void);
extern nis_name nis_local_principal(void);
extern nis_name nis_local_host(void);

extern void nis_destroy_object(nis_object *);
extern nis_object * nis_clone_object(nis_object *, nis_object *);
extern void nis_print_object(nis_object *);

extern char * nis_sperrno(nis_error);
extern void nis_perror(nis_error, char *);
extern char * nis_sperror(nis_error, char *);
extern void nis_lerror(nis_error, char *);

extern void nis_print_group_entry(nis_name);
extern bool_t nis_ismember(nis_name, nis_name);
extern nis_error nis_creategroup(nis_name, u_long);
extern nis_error nis_destroygroup(nis_name);
extern nis_error nis_addmember(nis_name, nis_name);
extern nis_error nis_removemember(nis_name, nis_name);
extern nis_error nis_verifygroup(nis_name);

extern void nis_freeservlist(nis_server **);
extern nis_server ** nis_getservlist(nis_name);
extern nis_error nis_stats(nis_server *, nis_tag *, int, nis_tag **);
extern nis_error nis_servstate(nis_server *, nis_tag *, int, nis_tag **);
extern void nis_freetags(nis_tag *, int);

extern nis_result * nis_checkpoint(nis_name);
extern void nis_ping(nis_name, u_long, nis_object *);

/*
 * XXX: PLEASE NOTE THAT THE FOLLOWING FUNCTIONS ARE INTERNAL
 * TO NIS+ AND SHOULD NOT BE USED BY ANY APPLICATION PROGRAM.
 * THEIR SEMANTICS AND/OR SIGNATURE CAN CHANGE WITHOUT NOTICE.
 * SO, PLEASE DO NOT USE THEM.  YOU ARE WARNED!!!!
 */

extern char ** __break_name(nis_name, int *);
extern int __name_distance(char **, char **);
extern nis_result * nis_make_error(nis_error, u_long, u_long, u_long, u_long);
extern nis_attr * __cvt2attr(int *, char **);
extern void nis_free_request(ib_request *);
extern nis_error nis_get_request(nis_name, nis_object *, netobj*, ib_request*);
extern nis_object * nis_read_obj(char *);
extern int nis_write_obj(char *, nis_object *);
extern int nis_in_table(nis_name, NIS_HASH_TABLE *, int *);
extern int nis_insert_item(NIS_HASH_ITEM *, NIS_HASH_TABLE *);
extern NIS_HASH_ITEM * nis_find_item(nis_name, NIS_HASH_TABLE *);
extern NIS_HASH_ITEM * nis_remove_item(nis_name, NIS_HASH_TABLE *);
extern void nis_insert_name(nis_name, NIS_HASH_TABLE *);
extern void nis_remove_name(nis_name, NIS_HASH_TABLE *);
extern CLIENT * nis_make_rpchandle(nis_server *, int, u_long, u_long, u_long,
								int, int);
extern void * nis_get_static_storage(struct nis_sdata *, u_long, u_long);
extern char * nis_data(char *);
extern void nis_print_rights(u_long);
extern void nis_print_directory(directory_obj *);
extern void nis_print_group(group_obj *);
extern void nis_print_table(table_obj *);
extern void nis_print_link(link_obj *);
extern void nis_print_entry(entry_obj *);
extern nis_object * nis_get_object(char *, char *, char *, u_long, u_long,
								    zotypes);
extern nis_server * __nis_init_callback(CLIENT *,
    int (*)(nis_name, nis_object *, void *), void *);
extern int nis_getdtblsize(void);
extern int __nis_run_callback(netobj *, u_long, struct timeval *, CLIENT *);

extern log_result *nis_dumplog(nis_server *, nis_name, u_long);
extern log_result *nis_dump(nis_server *, nis_name,
    int (*)(nis_name, nis_object *, void *));

extern bool_t __do_ismember(nis_name, nis_name,
    nis_result *(*)(nis_name, u_long));
extern nis_name __nis_map_group(nis_name);
extern nis_name __nis_map_group_r(nis_name, char*, size_t);

extern nis_error __nis_CacheBind(char *, directory_obj *);
extern nis_error __nis_CacheSearch(char *, directory_obj *);
extern bool_t __nis_CacheRemoveEntry(directory_obj *);
extern void __nis_CacheRestart(void);
extern void __nis_CachePrint(void);
extern void __nis_CacheDumpStatistics(void);
extern bool_t writeColdStartFile(directory_obj *);

extern CLIENT * __get_ti_clnt(char *, CLIENT *, char **, pid_t *);
extern int __strcmp_case_insens(char *, char *);
extern int __strncmp_case_insens(char *, char *);

extern fd_result * nis_finddirectory(directory_obj *, nis_name);
extern int __start_clock(int);
extern u_long __stop_clock(int);

/*
 * This particular function is part of the FreeBSD NIS+ implementation
 * only. Ideally it should be somewhere else, but it is used by both
 * rpc.nisd and nis_cachemgr, and there aren't that many headers common
 * to both programs.
 */

extern struct signature *__nis_calculate_encrypted_cksum(unsigned char *, unsigned int, char *, int);

#define	NUL '\0'

#ifdef	__cplusplus
}
#endif

#endif	/* _RPCSVC_NISLIB_H */


code:
/*
 * Please do not edit this file.
 * It was generated using rpcgen.
 */

#ifndef _NLM_PROT_H_RPCGEN
#define	_NLM_PROT_H_RPCGEN

#include <rpc/rpc.h>

#ifdef __cplusplus
extern "C" {
#endif

#define LM_MAXSTRLEN 1024
#define MAXNAMELEN LM_MAXSTRLEN+1

enum nlm_stats {
	nlm_granted = 0,
	nlm_denied = 1,
	nlm_denied_nolocks = 2,
	nlm_blocked = 3,
	nlm_denied_grace_period = 4,
	nlm_deadlck = 5
};
typedef enum nlm_stats nlm_stats;

struct nlm_holder {
	bool_t exclusive;
	int svid;
	netobj oh;
	u_int l_offset;
	u_int l_len;
};
typedef struct nlm_holder nlm_holder;

struct nlm_testrply {
	nlm_stats stat;
	union {
		struct nlm_holder holder;
	} nlm_testrply_u;
};
typedef struct nlm_testrply nlm_testrply;

struct nlm_stat {
	nlm_stats stat;
};
typedef struct nlm_stat nlm_stat;

struct nlm_res {
	netobj cookie;
	nlm_stat stat;
};
typedef struct nlm_res nlm_res;

struct nlm_testres {
	netobj cookie;
	nlm_testrply stat;
};
typedef struct nlm_testres nlm_testres;

struct nlm_lock {
	char *caller_name;
	netobj fh;
	netobj oh;
	int svid;
	u_int l_offset;
	u_int l_len;
};
typedef struct nlm_lock nlm_lock;

struct nlm_lockargs {
	netobj cookie;
	bool_t block;
	bool_t exclusive;
	struct nlm_lock alock;
	bool_t reclaim;
	int state;
};
typedef struct nlm_lockargs nlm_lockargs;

struct nlm_cancargs {
	netobj cookie;
	bool_t block;
	bool_t exclusive;
	struct nlm_lock alock;
};
typedef struct nlm_cancargs nlm_cancargs;

struct nlm_testargs {
	netobj cookie;
	bool_t exclusive;
	struct nlm_lock alock;
};
typedef struct nlm_testargs nlm_testargs;

struct nlm_unlockargs {
	netobj cookie;
	struct nlm_lock alock;
};
typedef struct nlm_unlockargs nlm_unlockargs;
/*
 * The following enums are actually bit encoded for efficient
 * boolean algebra.... DON'T change them.....
 */

enum fsh_mode {
	fsm_DN = 0,
	fsm_DR = 1,
	fsm_DW = 2,
	fsm_DRW = 3
};
typedef enum fsh_mode fsh_mode;

enum fsh_access {
	fsa_NONE = 0,
	fsa_R = 1,
	fsa_W = 2,
	fsa_RW = 3
};
typedef enum fsh_access fsh_access;

struct nlm_share {
	char *caller_name;
	netobj fh;
	netobj oh;
	fsh_mode mode;
	fsh_access access;
};
typedef struct nlm_share nlm_share;

struct nlm_shareargs {
	netobj cookie;
	nlm_share share;
	bool_t reclaim;
};
typedef struct nlm_shareargs nlm_shareargs;

struct nlm_shareres {
	netobj cookie;
	nlm_stats stat;
	int sequence;
};
typedef struct nlm_shareres nlm_shareres;

struct nlm_notify {
	char *name;
	long state;
};
typedef struct nlm_notify nlm_notify;
/* definitions for NLM version 4 */

enum nlm4_stats {
	nlm4_granted = 0,
	nlm4_denied = 1,
	nlm4_denied_nolocks = 2,
	nlm4_blocked = 3,
	nlm4_denied_grace_period = 4,
	nlm4_deadlck = 5,
	nlm4_rofs = 6,
	nlm4_stale_fh = 7,
	nlm4_fbig = 8,
	nlm4_failed = 9
};
typedef enum nlm4_stats nlm4_stats;

struct nlm4_stat {
	nlm4_stats stat;
};
typedef struct nlm4_stat nlm4_stat;

struct nlm4_holder {
	bool_t exclusive;
	u_int32_t svid;
	netobj oh;
	u_int64_t l_offset;
	u_int64_t l_len;
};
typedef struct nlm4_holder nlm4_holder;

struct nlm4_lock {
	char *caller_name;
	netobj fh;
	netobj oh;
	u_int32_t svid;
	u_int64_t l_offset;
	u_int64_t l_len;
};
typedef struct nlm4_lock nlm4_lock;

struct nlm4_share {
	char *caller_name;
	netobj fh;
	netobj oh;
	fsh_mode mode;
	fsh_access access;
};
typedef struct nlm4_share nlm4_share;

struct nlm4_testrply {
	nlm4_stats stat;
	union {
		struct nlm4_holder holder;
	} nlm4_testrply_u;
};
typedef struct nlm4_testrply nlm4_testrply;

struct nlm4_testres {
	netobj cookie;
	nlm4_testrply stat;
};
typedef struct nlm4_testres nlm4_testres;

struct nlm4_testargs {
	netobj cookie;
	bool_t exclusive;
	struct nlm4_lock alock;
};
typedef struct nlm4_testargs nlm4_testargs;

struct nlm4_res {
	netobj cookie;
	nlm4_stat stat;
};
typedef struct nlm4_res nlm4_res;

struct nlm4_lockargs {
	netobj cookie;
	bool_t block;
	bool_t exclusive;
	struct nlm4_lock alock;
	bool_t reclaim;
	int state;
};
typedef struct nlm4_lockargs nlm4_lockargs;

struct nlm4_cancargs {
	netobj cookie;
	bool_t block;
	bool_t exclusive;
	struct nlm4_lock alock;
};
typedef struct nlm4_cancargs nlm4_cancargs;

struct nlm4_unlockargs {
	netobj cookie;
	struct nlm4_lock alock;
};
typedef struct nlm4_unlockargs nlm4_unlockargs;

struct nlm4_shareargs {
	netobj cookie;
	nlm4_share share;
	bool_t reclaim;
};
typedef struct nlm4_shareargs nlm4_shareargs;

struct nlm4_shareres {
	netobj cookie;
	nlm4_stats stat;
	int sequence;
};
typedef struct nlm4_shareres nlm4_shareres;

struct nlm_sm_status {
	char *mon_name;
	int state;
	char priv[16];
};
typedef struct nlm_sm_status nlm_sm_status;

struct nlm4_notify {
	char *name;
	int32_t state;
};
typedef struct nlm4_notify nlm4_notify;

#define	NLM_PROG ((unsigned long)(100021))
#define	NLM_SM ((unsigned long)(0))

extern  void nlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp);
#define	NLM_SM_NOTIFY ((unsigned long)(1))
extern  void * nlm_sm_notify_0(struct nlm_sm_status *, CLIENT *);
extern  void * nlm_sm_notify_0_svc(struct nlm_sm_status *, struct svc_req *);
extern int nlm_prog_0_freeresult(SVCXPRT *, xdrproc_t, caddr_t);
#define	NLM_VERS ((unsigned long)(1))

extern  void nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp);
#define	NLM_TEST ((unsigned long)(1))
extern  nlm_testres * nlm_test_1(struct nlm_testargs *, CLIENT *);
extern  nlm_testres * nlm_test_1_svc(struct nlm_testargs *, struct svc_req *);
#define	NLM_LOCK ((unsigned long)(2))
extern  nlm_res * nlm_lock_1(struct nlm_lockargs *, CLIENT *);
extern  nlm_res * nlm_lock_1_svc(struct nlm_lockargs *, struct svc_req *);
#define	NLM_CANCEL ((unsigned long)(3))
extern  nlm_res * nlm_cancel_1(struct nlm_cancargs *, CLIENT *);
extern  nlm_res * nlm_cancel_1_svc(struct nlm_cancargs *, struct svc_req *);
#define	NLM_UNLOCK ((unsigned long)(4))
extern  nlm_res * nlm_unlock_1(struct nlm_unlockargs *, CLIENT *);
extern  nlm_res * nlm_unlock_1_svc(struct nlm_unlockargs *, struct svc_req *);
#define	NLM_GRANTED ((unsigned long)(5))
extern  nlm_res * nlm_granted_1(struct nlm_testargs *, CLIENT *);
extern  nlm_res * nlm_granted_1_svc(struct nlm_testargs *, struct svc_req *);
#define	NLM_TEST_MSG ((unsigned long)(6))
extern  void * nlm_test_msg_1(struct nlm_testargs *, CLIENT *);
extern  void * nlm_test_msg_1_svc(struct nlm_testargs *, struct svc_req *);
#define	NLM_LOCK_MSG ((unsigned long)(7))
extern  void * nlm_lock_msg_1(struct nlm_lockargs *, CLIENT *);
extern  void * nlm_lock_msg_1_svc(struct nlm_lockargs *, struct svc_req *);
#define	NLM_CANCEL_MSG ((unsigned long)(8))
extern  void * nlm_cancel_msg_1(struct nlm_cancargs *, CLIENT *);
extern  void * nlm_cancel_msg_1_svc(struct nlm_cancargs *, struct svc_req *);
#define	NLM_UNLOCK_MSG ((unsigned long)(9))
extern  void * nlm_unlock_msg_1(struct nlm_unlockargs *, CLIENT *);
extern  void * nlm_unlock_msg_1_svc(struct nlm_unlockargs *, struct svc_req *);
#define	NLM_GRANTED_MSG ((unsigned long)(10))
extern  void * nlm_granted_msg_1(struct nlm_testargs *, CLIENT *);
extern  void * nlm_granted_msg_1_svc(struct nlm_testargs *, struct svc_req *);
#define	NLM_TEST_RES ((unsigned long)(11))
extern  void * nlm_test_res_1(nlm_testres *, CLIENT *);
extern  void * nlm_test_res_1_svc(nlm_testres *, struct svc_req *);
#define	NLM_LOCK_RES ((unsigned long)(12))
extern  void * nlm_lock_res_1(nlm_res *, CLIENT *);
extern  void * nlm_lock_res_1_svc(nlm_res *, struct svc_req *);
#define	NLM_CANCEL_RES ((unsigned long)(13))
extern  void * nlm_cancel_res_1(nlm_res *, CLIENT *);
extern  void * nlm_cancel_res_1_svc(nlm_res *, struct svc_req *);
#define	NLM_UNLOCK_RES ((unsigned long)(14))
extern  void * nlm_unlock_res_1(nlm_res *, CLIENT *);
extern  void * nlm_unlock_res_1_svc(nlm_res *, struct svc_req *);
#define	NLM_GRANTED_RES ((unsigned long)(15))
extern  void * nlm_granted_res_1(nlm_res *, CLIENT *);
extern  void * nlm_granted_res_1_svc(nlm_res *, struct svc_req *);
extern int nlm_prog_1_freeresult(SVCXPRT *, xdrproc_t, caddr_t);
#define	NLM_VERSX ((unsigned long)(3))

extern  void nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp);
#define	NLM_SHARE ((unsigned long)(20))
extern  nlm_shareres * nlm_share_3(nlm_shareargs *, CLIENT *);
extern  nlm_shareres * nlm_share_3_svc(nlm_shareargs *, struct svc_req *);
#define	NLM_UNSHARE ((unsigned long)(21))
extern  nlm_shareres * nlm_unshare_3(nlm_shareargs *, CLIENT *);
extern  nlm_shareres * nlm_unshare_3_svc(nlm_shareargs *, struct svc_req *);
#define	NLM_NM_LOCK ((unsigned long)(22))
extern  nlm_res * nlm_nm_lock_3(nlm_lockargs *, CLIENT *);
extern  nlm_res * nlm_nm_lock_3_svc(nlm_lockargs *, struct svc_req *);
#define	NLM_FREE_ALL ((unsigned long)(23))
extern  void * nlm_free_all_3(nlm_notify *, CLIENT *);
extern  void * nlm_free_all_3_svc(nlm_notify *, struct svc_req *);
extern int nlm_prog_3_freeresult(SVCXPRT *, xdrproc_t, caddr_t);
#define	NLM_VERS4 ((unsigned long)(4))

extern  void nlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp);
#define	NLM4_TEST ((unsigned long)(1))
extern  nlm4_testres * nlm4_test_4(nlm4_testargs *, CLIENT *);
extern  nlm4_testres * nlm4_test_4_svc(nlm4_testargs *, struct svc_req *);
#define	NLM4_LOCK ((unsigned long)(2))
extern  nlm4_res * nlm4_lock_4(nlm4_lockargs *, CLIENT *);
extern  nlm4_res * nlm4_lock_4_svc(nlm4_lockargs *, struct svc_req *);
#define	NLM4_CANCEL ((unsigned long)(3))
extern  nlm4_res * nlm4_cancel_4(nlm4_cancargs *, CLIENT *);
extern  nlm4_res * nlm4_cancel_4_svc(nlm4_cancargs *, struct svc_req *);
#define	NLM4_UNLOCK ((unsigned long)(4))
extern  nlm4_res * nlm4_unlock_4(nlm4_unlockargs *, CLIENT *);
extern  nlm4_res * nlm4_unlock_4_svc(nlm4_unlockargs *, struct svc_req *);
#define	NLM4_GRANTED ((unsigned long)(5))
extern  nlm4_res * nlm4_granted_4(nlm4_testargs *, CLIENT *);
extern  nlm4_res * nlm4_granted_4_svc(nlm4_testargs *, struct svc_req *);
#define	NLM4_TEST_MSG ((unsigned long)(6))
extern  void * nlm4_test_msg_4(nlm4_testargs *, CLIENT *);
extern  void * nlm4_test_msg_4_svc(nlm4_testargs *, struct svc_req *);
#define	NLM4_LOCK_MSG ((unsigned long)(7))
extern  void * nlm4_lock_msg_4(nlm4_lockargs *, CLIENT *);
extern  void * nlm4_lock_msg_4_svc(nlm4_lockargs *, struct svc_req *);
#define	NLM4_CANCEL_MSG ((unsigned long)(8))
extern  void * nlm4_cancel_msg_4(nlm4_cancargs *, CLIENT *);
extern  void * nlm4_cancel_msg_4_svc(nlm4_cancargs *, struct svc_req *);
#define	NLM4_UNLOCK_MSG ((unsigned long)(9))
extern  void * nlm4_unlock_msg_4(nlm4_unlockargs *, CLIENT *);
extern  void * nlm4_unlock_msg_4_svc(nlm4_unlockargs *, struct svc_req *);
#define	NLM4_GRANTED_MSG ((unsigned long)(10))
extern  void * nlm4_granted_msg_4(nlm4_testargs *, CLIENT *);
extern  void * nlm4_granted_msg_4_svc(nlm4_testargs *, struct svc_req *);
#define	NLM4_TEST_RES ((unsigned long)(11))
extern  void * nlm4_test_res_4(nlm4_testres *, CLIENT *);
extern  void * nlm4_test_res_4_svc(nlm4_testres *, struct svc_req *);
#define	NLM4_LOCK_RES ((unsigned long)(12))
extern  void * nlm4_lock_res_4(nlm4_res *, CLIENT *);
extern  void * nlm4_lock_res_4_svc(nlm4_res *, struct svc_req *);
#define	NLM4_CANCEL_RES ((unsigned long)(13))
extern  void * nlm4_cancel_res_4(nlm4_res *, CLIENT *);
extern  void * nlm4_cancel_res_4_svc(nlm4_res *, struct svc_req *);
#define	NLM4_UNLOCK_RES ((unsigned long)(14))
extern  void * nlm4_unlock_res_4(nlm4_res *, CLIENT *);
extern  void * nlm4_unlock_res_4_svc(nlm4_res *, struct svc_req *);
#define	NLM4_GRANTED_RES ((unsigned long)(15))
extern  void * nlm4_granted_res_4(nlm4_res *, CLIENT *);
extern  void * nlm4_granted_res_4_svc(nlm4_res *, struct svc_req *);
#define	NLM4_SHARE ((unsigned long)(20))
extern  nlm4_shareres * nlm4_share_4(nlm4_shareargs *, CLIENT *);
extern  nlm4_shareres * nlm4_share_4_svc(nlm4_shareargs *, struct svc_req *);
#define	NLM4_UNSHARE ((unsigned long)(21))
extern  nlm4_shareres * nlm4_unshare_4(nlm4_shareargs *, CLIENT *);
extern  nlm4_shareres * nlm4_unshare_4_svc(nlm4_shareargs *, struct svc_req *);
#define	NLM4_NM_LOCK ((unsigned long)(22))
extern  nlm4_res * nlm4_nm_lock_4(nlm4_lockargs *, CLIENT *);
extern  nlm4_res * nlm4_nm_lock_4_svc(nlm4_lockargs *, struct svc_req *);
#define	NLM4_FREE_ALL ((unsigned long)(23))
extern  void * nlm4_free_all_4(nlm4_notify *, CLIENT *);
extern  void * nlm4_free_all_4_svc(nlm4_notify *, struct svc_req *);
extern int nlm_prog_4_freeresult(SVCXPRT *, xdrproc_t, caddr_t);

/* the xdr functions */
extern  bool_t xdr_nlm_stats(XDR *, nlm_stats*);
extern  bool_t xdr_nlm_holder(XDR *, nlm_holder*);
extern  bool_t xdr_nlm_testrply(XDR *, nlm_testrply*);
extern  bool_t xdr_nlm_stat(XDR *, nlm_stat*);
extern  bool_t xdr_nlm_res(XDR *, nlm_res*);
extern  bool_t xdr_nlm_testres(XDR *, nlm_testres*);
extern  bool_t xdr_nlm_lock(XDR *, nlm_lock*);
extern  bool_t xdr_nlm_lockargs(XDR *, nlm_lockargs*);
extern  bool_t xdr_nlm_cancargs(XDR *, nlm_cancargs*);
extern  bool_t xdr_nlm_testargs(XDR *, nlm_testargs*);
extern  bool_t xdr_nlm_unlockargs(XDR *, nlm_unlockargs*);
extern  bool_t xdr_fsh_mode(XDR *, fsh_mode*);
extern  bool_t xdr_fsh_access(XDR *, fsh_access*);
extern  bool_t xdr_nlm_share(XDR *, nlm_share*);
extern  bool_t xdr_nlm_shareargs(XDR *, nlm_shareargs*);
extern  bool_t xdr_nlm_shareres(XDR *, nlm_shareres*);
extern  bool_t xdr_nlm_notify(XDR *, nlm_notify*);
extern  bool_t xdr_nlm4_stats(XDR *, nlm4_stats*);
extern  bool_t xdr_nlm4_stat(XDR *, nlm4_stat*);
extern  bool_t xdr_nlm4_holder(XDR *, nlm4_holder*);
extern  bool_t xdr_nlm4_lock(XDR *, nlm4_lock*);
extern  bool_t xdr_nlm4_share(XDR *, nlm4_share*);
extern  bool_t xdr_nlm4_testrply(XDR *, nlm4_testrply*);
extern  bool_t xdr_nlm4_testres(XDR *, nlm4_testres*);
extern  bool_t xdr_nlm4_testargs(XDR *, nlm4_testargs*);
extern  bool_t xdr_nlm4_res(XDR *, nlm4_res*);
extern  bool_t xdr_nlm4_lockargs(XDR *, nlm4_lockargs*);
extern  bool_t xdr_nlm4_cancargs(XDR *, nlm4_cancargs*);
extern  bool_t xdr_nlm4_unlockargs(XDR *, nlm4_unlockargs*);
extern  bool_t xdr_nlm4_shareargs(XDR *, nlm4_shareargs*);
extern  bool_t xdr_nlm4_shareres(XDR *, nlm4_shareres*);
extern  bool_t xdr_nlm_sm_status(XDR *, nlm_sm_status*);
extern  bool_t xdr_nlm4_notify(XDR *, nlm4_notify*);

#ifdef __cplusplus
}
#endif

#endif /* !_NLM_PROT_H_RPCGEN */


code:
/*
 * Network lock manager protocol definition
 * Copyright (C) 1986 Sun Microsystems, Inc.
 *
 * protocol used between local lock manager and remote lock manager
 */

#ifdef RPC_HDR
%#define LM_MAXSTRLEN	1024
%#define MAXNAMELEN	LM_MAXSTRLEN+1
#else
%#include <sys/cdefs.h>
%#ifndef lint
%/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
%/*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
%__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
%#endif /* not lint */
%__FBSDID("$FreeBSD: release/9.0.0/include/rpcsvc/nlm_prot.x 114629 2003-05-04 02:51:42Z obrien $");
#endif

/*
 * status of a call to the lock manager
 */
enum nlm_stats {
	nlm_granted = 0,
	nlm_denied = 1,
	nlm_denied_nolocks = 2,
	nlm_blocked = 3,
	nlm_denied_grace_period = 4,
	nlm_deadlck = 5
};

struct nlm_holder {
	bool exclusive;
	int svid;
	netobj oh;
	unsigned l_offset;
	unsigned l_len;
};

union nlm_testrply switch (nlm_stats stat) {
	case nlm_denied:
		struct nlm_holder holder;
	default:
		void;
};

struct nlm_stat {
	nlm_stats stat;
};

struct nlm_res {
	netobj cookie;
	nlm_stat stat;
};

struct nlm_testres {
	netobj cookie;
	nlm_testrply stat;
};

struct nlm_lock {
	string caller_name<LM_MAXSTRLEN>;
	netobj fh;		/* identify a file */
	netobj oh;		/* identify owner of a lock */
	int svid;		/* generated from pid for svid */
	unsigned l_offset;
	unsigned l_len;
};

struct nlm_lockargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm_lock alock;
	bool reclaim;		/* used for recovering locks */
	int state;		/* specify local status monitor state */
};

struct nlm_cancargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm_lock alock;
};

struct nlm_testargs {
	netobj cookie;
	bool exclusive;
	struct nlm_lock alock;
};

struct nlm_unlockargs {
	netobj cookie;
	struct nlm_lock alock;
};

#ifdef RPC_HDR
%/*
% * The following enums are actually bit encoded for efficient
% * boolean algebra.... DON'T change them.....
% */
#endif
enum	fsh_mode {
	fsm_DN  = 0,	/* deny none */
	fsm_DR  = 1,	/* deny read */
	fsm_DW  = 2,	/* deny write */
	fsm_DRW = 3	/* deny read/write */
};

enum	fsh_access {
	fsa_NONE = 0,	/* for completeness */
	fsa_R    = 1,	/* read only */
	fsa_W    = 2,	/* write only */
	fsa_RW   = 3	/* read/write */
};

struct	nlm_share {
	string caller_name<LM_MAXSTRLEN>;
	netobj	fh;
	netobj	oh;
	fsh_mode	mode;
	fsh_access	access;
};

struct	nlm_shareargs {
	netobj	cookie;
	nlm_share	share;
	bool	reclaim;
};

struct	nlm_shareres {
	netobj	cookie;
	nlm_stats	stat;
	int	sequence;
};

struct	nlm_notify {
	string name<MAXNAMELEN>;
	long state;
};

#ifdef RPC_HDR
%/* definitions for NLM version 4 */
#endif
enum nlm4_stats {
	nlm4_granted			= 0,
	nlm4_denied			= 1,
	nlm4_denied_nolocks		= 2,
	nlm4_blocked			= 3,
	nlm4_denied_grace_period	= 4,
	nlm4_deadlck			= 5,
	nlm4_rofs			= 6,
	nlm4_stale_fh			= 7,
	nlm4_fbig			= 8,
	nlm4_failed			= 9
};

struct nlm4_stat {
	nlm4_stats stat;
};

struct nlm4_holder {
	bool exclusive;
	u_int32_t svid;
	netobj oh;
	u_int64_t l_offset;
	u_int64_t l_len;
};

struct nlm4_lock {
	string caller_name<MAXNAMELEN>;
	netobj fh;
	netobj oh;
	u_int32_t svid;
	u_int64_t l_offset;
	u_int64_t l_len;
};

struct nlm4_share {
	string caller_name<MAXNAMELEN>;
	netobj fh;
	netobj oh;
	fsh_mode mode;
	fsh_access access;
};

union nlm4_testrply switch (nlm4_stats stat) {
	case nlm_denied:
		struct nlm4_holder holder;
	default:
		void;
};

struct nlm4_testres {
	netobj cookie;
	nlm4_testrply stat;
};

struct nlm4_testargs {
	netobj cookie;
	bool exclusive;
	struct nlm4_lock alock;
};

struct nlm4_res {
	netobj cookie;
	nlm4_stat stat;
};

struct nlm4_lockargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm4_lock alock;
	bool reclaim;		/* used for recovering locks */
	int state;		/* specify local status monitor state */
};

struct nlm4_cancargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm4_lock alock;
};

struct nlm4_unlockargs {
	netobj cookie;
	struct nlm4_lock alock;
};

struct	nlm4_shareargs {
	netobj	cookie;
	nlm4_share	share;
	bool	reclaim;
};

struct	nlm4_shareres {
	netobj	cookie;
	nlm4_stats	stat;
	int	sequence;
};

/*
 * argument for the procedure called by rpc.statd when a monitored host
 * status change.
 * XXX assumes LM_MAXSTRLEN == SM_MAXSTRLEN
 */
struct nlm_sm_status {
	string mon_name<LM_MAXSTRLEN>; /* name of host */
	int state;			/* new state */
	opaque priv[16];		/* private data */
};

struct	nlm4_notify {
	string name<MAXNAMELEN>;
	int32_t state;
};

/*
 * Over-the-wire protocol used between the network lock managers
 */

program NLM_PROG {

	version NLM_SM {
		void NLM_SM_NOTIFY(struct nlm_sm_status) = 1;
	} = 0;

	version NLM_VERS {

		nlm_testres	NLM_TEST(struct nlm_testargs) =	1;

		nlm_res		NLM_LOCK(struct nlm_lockargs) =	2;

		nlm_res		NLM_CANCEL(struct nlm_cancargs) = 3;
		nlm_res		NLM_UNLOCK(struct nlm_unlockargs) =	4;

		/*
		 * remote lock manager call-back to grant lock
		 */
		nlm_res		NLM_GRANTED(struct nlm_testargs)= 5;
		/*
		 * message passing style of requesting lock
		 */
		void		NLM_TEST_MSG(struct nlm_testargs) = 6;
		void		NLM_LOCK_MSG(struct nlm_lockargs) = 7;
		void		NLM_CANCEL_MSG(struct nlm_cancargs) =8;
		void		NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
		void		NLM_GRANTED_MSG(struct nlm_testargs) = 10;
		void		NLM_TEST_RES(nlm_testres) = 11;
		void		NLM_LOCK_RES(nlm_res) = 12;
		void		NLM_CANCEL_RES(nlm_res) = 13;
		void		NLM_UNLOCK_RES(nlm_res) = 14;
		void		NLM_GRANTED_RES(nlm_res) = 15;
	} = 1;

	version NLM_VERSX {
		nlm_shareres	NLM_SHARE(nlm_shareargs) = 20;
		nlm_shareres	NLM_UNSHARE(nlm_shareargs) = 21;
		nlm_res		NLM_NM_LOCK(nlm_lockargs) = 22;
		void		NLM_FREE_ALL(nlm_notify) = 23;
	} = 3;

	version NLM_VERS4 {
		nlm4_testres NLM4_TEST(nlm4_testargs) = 1;
		nlm4_res NLM4_LOCK(nlm4_lockargs) = 2;
		nlm4_res NLM4_CANCEL(nlm4_cancargs) = 3;
		nlm4_res NLM4_UNLOCK(nlm4_unlockargs) = 4;
		nlm4_res NLM4_GRANTED(nlm4_testargs) = 5;
		void NLM4_TEST_MSG(nlm4_testargs) = 6;
		void NLM4_LOCK_MSG(nlm4_lockargs) = 7;
		void NLM4_CANCEL_MSG(nlm4_cancargs) = 8;
		void NLM4_UNLOCK_MSG(nlm4_unlockargs) = 9;
		void NLM4_GRANTED_MSG(nlm4_testargs) = 10;
		void NLM4_TEST_RES(nlm4_testres) = 11;
		void NLM4_LOCK_RES(nlm4_res) = 12;
		void NLM4_CANCEL_RES(nlm4_res) = 13;
		void NLM4_UNLOCK_RES(nlm4_res) = 14;
		void NLM4_GRANTED_RES(nlm4_res) = 15;
		nlm4_shareres NLM4_SHARE(nlm4_shareargs) = 20;
		nlm4_shareres NLM4_UNSHARE(nlm4_shareargs) = 21;
		nlm4_res NLM4_NM_LOCK(nlm4_lockargs) = 22;
		void NLM4_FREE_ALL(nlm4_notify) = 23;
	} = 4;
} = 100021;