Blame nis/rpcsvc/yp_prot.h

Packit 6c4009
/*
Packit 6c4009
 * This file contains symbols and structures defining the rpc protocol
Packit 6c4009
 * between the NIS clients and the NIS servers.  The servers
Packit 6c4009
 * are the NIS database servers, and the NIS binders.
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
#ifndef _RPCSVC_YP_PROT_H
Packit 6c4009
#define _RPCSVC_YP_PROT_H
Packit 6c4009
Packit 6c4009
#include <features.h>
Packit 6c4009
Packit 6c4009
#include <rpc/rpc.h>
Packit 6c4009
#include <rpcsvc/ypclnt.h>
Packit 6c4009
Packit 6c4009
__BEGIN_DECLS
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * The following procedures are supported by the protocol:
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_NULL() returns () takes nothing, returns nothing.  This indicates
Packit 6c4009
 * that the NIS server is alive.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_DOMAIN (char *) returns (bool_t) TRUE.  Indicates that the
Packit 6c4009
 * responding NIS server does serve the named domain; FALSE indicates no
Packit 6c4009
 * support.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the NIS server does serve
Packit 6c4009
 * the named domain, otherwise does not return.  Used in the broadcast case.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val).  Returns the
Packit 6c4009
 * right-hand value for a passed left-hand key, within a named map and
Packit 6c4009
 * domain.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val).
Packit 6c4009
 * Returns the first key-value pair from a named domain and map.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val).  Returns
Packit 6c4009
 * the key-value pair following a passed key-value pair within a named
Packit 6c4009
 * domain and map.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_XFR (struct ypreq_xfr) returns nothing.  Indicates to a server that
Packit 6c4009
 * a map should be updated.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_CLEAR	takes nothing, returns nothing.  Instructs a NIS server to
Packit 6c4009
 * close the current map, so that old versions of the disk file don't get
Packit 6c4009
 * held open.
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_ALL (struct ypreq_nokey), returns
Packit 6c4009
 * 	union switch (bool_t more) {
Packit 6c4009
 *		TRUE:	(struct ypresp_key_val);
Packit 6c4009
 *		FALSE:	(struct) {};
Packit 6c4009
 *	}
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master)
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order)
Packit 6c4009
 *
Packit 6c4009
 * YPPROC_MAPLIST (char *), returns (struct ypmaplist *)
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
/* Program and version symbols, magic numbers */
Packit 6c4009
Packit 6c4009
#define YPPROG		100004
Packit 6c4009
#define YPVERS		2
Packit 6c4009
#define YPVERS_ORIG	1
Packit 6c4009
#define YPMAXRECORD	1024
Packit 6c4009
#define YPMAXDOMAIN	64 /* XXX orig. yp_prot.h defines 256 */
Packit 6c4009
#define YPMAXMAP	64
Packit 6c4009
#define YPMAXPEER	64 /* XXX orig. yp_prot.h defines 256 */
Packit 6c4009
Packit 6c4009
/* byte size of a large NIS packet */
Packit 6c4009
#define YPMSGSZ		1600
Packit 6c4009
Packit 6c4009
typedef struct {
Packit 6c4009
  u_int keydat_len;
Packit 6c4009
  char *keydat_val;
Packit 6c4009
} keydat_t;
Packit 6c4009
Packit 6c4009
typedef struct {
Packit 6c4009
  u_int valdat_len;
Packit 6c4009
  char *valdat_val;
Packit 6c4009
} valdat_t;
Packit 6c4009
Packit 6c4009
struct ypmap_parms {
Packit 6c4009
  char *domain;			/* Null string means not available */
Packit 6c4009
  char *map;			/* Null string means not available */
Packit 6c4009
  unsigned int ordernum;	/* 0 means not available */
Packit 6c4009
  char *owner;			/* Null string means not available */
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * Request parameter structures
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
struct ypreq_key {
Packit 6c4009
  const char *domain;
Packit 6c4009
  const char *map;
Packit 6c4009
  keydat_t keydat;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypreq_nokey {
Packit 6c4009
  char *domain;
Packit 6c4009
  char *map;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypreq_xfr {
Packit 6c4009
  struct ypmap_parms map_parms;
Packit 6c4009
  u_int transid;
Packit 6c4009
  u_int proto;
Packit 6c4009
  u_int port;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
#define ypxfr_domain map_parms.domain
Packit 6c4009
#define ypxfr_map map_parms.map
Packit 6c4009
#define ypxfr_ordernum map_parms.ordernum
Packit 6c4009
#define ypxfr_owner map_parms.owner
Packit 6c4009
Packit 6c4009
/* Return status values */
Packit 6c4009
Packit 6c4009
enum ypstat {
Packit 6c4009
  YP_TRUE = 1,		/* General purpose success code */
Packit 6c4009
#define YP_TRUE YP_TRUE
Packit 6c4009
  YP_NOMORE = 2,	/* No more entries in map */
Packit 6c4009
#define YP_NOMORE YP_NOMORE
Packit 6c4009
  YP_FALSE = 0,		/* General purpose failure code */
Packit 6c4009
#define YP_FALSE YP_FALSE
Packit 6c4009
  YP_NOMAP = -1,	/* No such map in domain */
Packit 6c4009
#define YP_NOMAP YP_NOMAP
Packit 6c4009
  YP_NODOM = -2,	/* Domain not supported */
Packit 6c4009
#define YP_NODOM YP_NODOM
Packit 6c4009
  YP_NOKEY = -3,	/* No such key in map */
Packit 6c4009
#define YP_NOKEY YP_NOKEY
Packit 6c4009
  YP_BADOP = -4,	/* Invalid operation */
Packit 6c4009
#define YP_BADOP YP_BADOP
Packit 6c4009
  YP_BADDB = -5,	/* Server data base is bad */
Packit 6c4009
#define YP_BADDB YP_BADDB
Packit 6c4009
  YP_YPERR = -6,	/* NIS server error */
Packit 6c4009
#define YP_YPERR YP_YPERR
Packit 6c4009
  YP_BADARGS = -7,	/* Request arguments bad */
Packit 6c4009
#define YP_BADARGS YP_BADARGS
Packit 6c4009
  YP_VERS = -8,		/* NIS server version mismatch - server can't supply
Packit 6c4009
			   requested service. */
Packit 6c4009
#define YP_VERS YP_VERS
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * Response parameter structures
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
typedef enum ypstat ypstat;
Packit 6c4009
Packit 6c4009
struct ypresp_val {
Packit 6c4009
  ypstat status;
Packit 6c4009
  valdat_t valdat;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypresp_key_val {
Packit 6c4009
  ypstat status;
Packit 6c4009
#ifdef STUPID_SUN_BUG
Packit 6c4009
  /* This is the form as distributed by Sun.  But even the Sun NIS
Packit 6c4009
     servers expect the values in the other order.  So their
Packit 6c4009
     implementation somehow must change the order internally.  We
Packit 6c4009
     don't want to follow this bad example since the user should be
Packit 6c4009
     able to use rpcgen on this file.  */
Packit 6c4009
  keydat_t keydat;
Packit 6c4009
  valdat_t valdat;
Packit 6c4009
#else
Packit 6c4009
  valdat_t valdat;
Packit 6c4009
  keydat_t keydat;
Packit 6c4009
#endif
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypresp_master {
Packit 6c4009
  ypstat status;
Packit 6c4009
  char *master;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypresp_order {
Packit 6c4009
  ypstat status;
Packit 6c4009
  u_int ordernum;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypmaplist {
Packit 6c4009
  char *map;
Packit 6c4009
#define ypml_name map
Packit 6c4009
  struct ypmaplist *next;
Packit 6c4009
#define ypml_next next
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypresp_maplist {
Packit 6c4009
  ypstat status;
Packit 6c4009
  struct ypmaplist *list;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * Procedure symbols.  YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK
Packit 6c4009
 * must keep the same values (0, 1, and 2) that they had in the first version
Packit 6c4009
 * of the protocol.
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
#define YPPROC_NULL	0
Packit 6c4009
#define YPPROC_DOMAIN	1
Packit 6c4009
#define YPPROC_DOMAIN_NONACK 2
Packit 6c4009
#define YPPROC_MATCH	3
Packit 6c4009
#define YPPROC_FIRST	4
Packit 6c4009
#define YPPROC_NEXT	5
Packit 6c4009
#define YPPROC_XFR	6
Packit 6c4009
#define YPPROC_CLEAR	7
Packit 6c4009
#define YPPROC_ALL	8
Packit 6c4009
#define YPPROC_MASTER	9
Packit 6c4009
#define YPPROC_ORDER	10
Packit 6c4009
#define YPPROC_MAPLIST	11
Packit 6c4009
#define	YPPROC_NEWXFR	12
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 *		Protocol between clients and NIS binder servers
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * The following procedures are supported by the protocol:
Packit 6c4009
 *
Packit 6c4009
 * YPBINDPROC_NULL() returns ()
Packit 6c4009
 * 	takes nothing, returns nothing
Packit 6c4009
 *
Packit 6c4009
 * YPBINDPROC_DOMAIN takes (char *) returns (struct ypbind_resp)
Packit 6c4009
 *
Packit 6c4009
 * YPBINDPROC_SETDOM takes (struct ypbind_setdom) returns nothing
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
/* Program and version symbols, magic numbers */
Packit 6c4009
Packit 6c4009
#define YPBINDPROG		100007
Packit 6c4009
#define YPBINDVERS		2
Packit 6c4009
#define YPBINDVERS_ORIG		1
Packit 6c4009
Packit 6c4009
/* Procedure symbols */
Packit 6c4009
Packit 6c4009
#define YPBINDPROC_NULL		0
Packit 6c4009
#define YPBINDPROC_DOMAIN	1
Packit 6c4009
#define YPBINDPROC_SETDOM	2
Packit 6c4009
/*
Packit 6c4009
 * Response structure and overall result status codes.  Success and failure
Packit 6c4009
 * represent two separate response message types.
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
enum ypbind_resptype {YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2};
Packit 6c4009
Packit 6c4009
struct ypbind_binding {
Packit 6c4009
  struct in_addr ypbind_binding_addr;	        /* In network order */
Packit 6c4009
  unsigned short int ypbind_binding_port;	/* In network order */
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypbind_resp {
Packit 6c4009
  enum ypbind_resptype ypbind_status;
Packit 6c4009
  union {
Packit 6c4009
    u_int ypbind_error;
Packit 6c4009
    struct ypbind_binding ypbind_bindinfo;
Packit 6c4009
  } ypbind_respbody;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Detailed failure reason codes for response field ypbind_error*/
Packit 6c4009
Packit 6c4009
#define YPBIND_ERR_ERR 1		/* Internal error */
Packit 6c4009
#define YPBIND_ERR_NOSERV 2		/* No bound server for passed domain */
Packit 6c4009
#define YPBIND_ERR_RESC 3		/* System resource allocation failure */
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 * Request data structure for ypbind "Set domain" procedure.
Packit 6c4009
 */
Packit 6c4009
struct ypbind_setdom {
Packit 6c4009
  char *ypsetdom_domain;
Packit 6c4009
  struct ypbind_binding ypsetdom_binding;
Packit 6c4009
  u_int ypsetdom_vers;
Packit 6c4009
};
Packit 6c4009
#define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
Packit 6c4009
#define ypsetdom_port ypsetdom_binding.ypbind_binding_port
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 *		Protocol between clients (ypxfr, only) and yppush
Packit 6c4009
 *		yppush speaks a protocol in the transient range, which
Packit 6c4009
 *		is supplied to ypxfr as a command-line parameter when it
Packit 6c4009
 *		is activated by ypserv.
Packit 6c4009
 */
Packit 6c4009
#define YPPUSHVERS		1
Packit 6c4009
#define YPPUSHVERS_ORIG		1
Packit 6c4009
Packit 6c4009
/* Procedure symbols */
Packit 6c4009
Packit 6c4009
#define YPPUSHPROC_NULL		0
Packit 6c4009
#define YPPUSHPROC_XFRRESP	1
Packit 6c4009
Packit 6c4009
/* Status values for yppushresp_xfr.status */
Packit 6c4009
Packit 6c4009
enum yppush_status {
Packit 6c4009
  YPPUSH_SUCC = 1,		/* Success */
Packit 6c4009
#define YPPUSH_SUCC	YPPUSH_SUCC
Packit 6c4009
  YPPUSH_AGE = 2,		/* Master's version not newer */
Packit 6c4009
#define YPPUSH_AGE	YPPUSH_AGE
Packit 6c4009
  YPPUSH_NOMAP = -1,		/* Can't find server for map */
Packit 6c4009
#define YPPUSH_NOMAP 	YPPUSH_NOMAP
Packit 6c4009
  YPPUSH_NODOM = -2,		/* Domain not supported */
Packit 6c4009
#define YPPUSH_NODOM 	YPPUSH_NODOM
Packit 6c4009
  YPPUSH_RSRC = -3,		/* Local resouce alloc failure */
Packit 6c4009
#define YPPUSH_RSRC 	YPPUSH_RSRC
Packit 6c4009
  YPPUSH_RPC = -4,		/* RPC failure talking to server */
Packit 6c4009
#define YPPUSH_RPC 	YPPUSH_RPC
Packit 6c4009
  YPPUSH_MADDR = -5,		/* Can't get master address */
Packit 6c4009
#define YPPUSH_MADDR	YPPUSH_MADDR
Packit 6c4009
  YPPUSH_YPERR = -6,		/* NIS server/map db error */
Packit 6c4009
#define YPPUSH_YPERR 	YPPUSH_YPERR
Packit 6c4009
  YPPUSH_BADARGS = -7,		/* Request arguments bad */
Packit 6c4009
#define YPPUSH_BADARGS 	YPPUSH_BADARGS
Packit 6c4009
  YPPUSH_DBM = -8,		/* Local dbm operation failed */
Packit 6c4009
#define YPPUSH_DBM	YPPUSH_DBM
Packit 6c4009
  YPPUSH_FILE = -9,		/* Local file I/O operation failed */
Packit 6c4009
#define YPPUSH_FILE	YPPUSH_FILE
Packit 6c4009
  YPPUSH_SKEW = -10,		/* Map version skew during transfer */
Packit 6c4009
#define YPPUSH_SKEW	YPPUSH_SKEW
Packit 6c4009
  YPPUSH_CLEAR = -11,		/* Can't send "Clear" req to local ypserv */
Packit 6c4009
#define YPPUSH_CLEAR	YPPUSH_CLEAR
Packit 6c4009
  YPPUSH_FORCE = -12,		/* No local order number in map - use -f flag*/
Packit 6c4009
#define YPPUSH_FORCE	YPPUSH_FORCE
Packit 6c4009
  YPPUSH_XFRERR = -13,		/* ypxfr error */
Packit 6c4009
#define YPPUSH_XFRERR	YPPUSH_XFRERR
Packit 6c4009
  YPPUSH_REFUSED = -14,		/* Transfer request refused by ypserv */
Packit 6c4009
#define YPPUSH_REFUSED	YPPUSH_REFUSED
Packit 6c4009
  YPPUSH_NOALIAS = -15		/* Alias not found for map or domain */
Packit 6c4009
#define	YPPUSH_NOALIAS	YPPUSH_NOALIAS
Packit 6c4009
};
Packit 6c4009
typedef enum yppush_status yppush_status;
Packit 6c4009
Packit 6c4009
struct yppushresp_xfr {
Packit 6c4009
  u_int transid;
Packit 6c4009
  yppush_status status;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
struct ypresp_all {
Packit 6c4009
  bool_t more;
Packit 6c4009
  union {
Packit 6c4009
    struct ypresp_key_val val;
Packit 6c4009
  } ypresp_all_u;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
extern bool_t xdr_ypreq_key (XDR *__xdrs, struct ypreq_key * __objp);
Packit 6c4009
extern bool_t xdr_ypreq_nokey (XDR *__xdrs, struct ypreq_nokey * __objp);
Packit 6c4009
extern bool_t xdr_ypreq_xfr (XDR *__xdrs, struct ypreq_xfr * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_val (XDR *__xdrs, struct ypresp_val * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_key_val (XDR *__xdrs, struct ypresp_key_val * __objp);
Packit 6c4009
extern bool_t xdr_ypbind_resp (XDR *__xdrs, struct ypbind_resp * __objp);
Packit 6c4009
extern bool_t xdr_ypbind_setdom (XDR *__xdrs, struct ypbind_setdom * __objp);
Packit 6c4009
extern bool_t xdr_ypmap_parms (XDR *__xdrs, struct ypmap_parms * __objp);
Packit 6c4009
extern bool_t xdr_yppushresp_xfr (XDR *__xdrs, struct yppushresp_xfr * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_order (XDR *__xdrs, struct ypresp_order  * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_master (XDR *__xdrs, struct ypresp_master * __objp);
Packit 6c4009
extern bool_t xdr_ypall (XDR *__xdrs, struct ypall_callback * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_maplist (XDR *__xdrs, struct ypresp_maplist * __objp);
Packit 6c4009
extern bool_t xdr_ypbind_binding (XDR *__xdrs, struct ypbind_binding * __objp);
Packit 6c4009
extern bool_t xdr_ypbind_resptype (XDR *__xdrs, enum ypbind_resptype * __objp);
Packit 6c4009
extern bool_t xdr_ypstat (XDR *__xdrs, enum ypbind_resptype * __objp);
Packit 6c4009
extern bool_t xdr_ypresp_all (XDR *__xdrs, struct ypresp_all  * __objp);
Packit 6c4009
extern bool_t xdr_domainname (XDR *__xdrs, char ** __objp);
Packit 6c4009
Packit 6c4009
__END_DECLS
Packit 6c4009
Packit 6c4009
#endif	/* _RPCSVC_YP_PROT_H */