Home | History | Annotate | Download | only in rpcsvc
      1 /* @(#)yp.x	2.1 88/08/01 4.0 RPCSRC */
      2 
      3 /*
      4  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
      5  * unrestricted use provided that this legend is included on all tape
      6  * media and as a part of the software program in whole or part.  Users
      7  * may copy or modify Sun RPC without charge, but are not authorized
      8  * to license or distribute it to anyone else except as part of a product or
      9  * program developed by the user.
     10  *
     11  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
     12  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
     13  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
     14  *
     15  * Sun RPC is provided with no support and without any obligation on the
     16  * part of Sun Microsystems, Inc. to assist in its use, correction,
     17  * modification or enhancement.
     18  *
     19  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
     20  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
     21  * OR ANY PART THEREOF.
     22  *
     23  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
     24  * or profits or other special, indirect and consequential damages, even if
     25  * Sun has been advised of the possibility of such damages.
     26  *
     27  * Sun Microsystems, Inc.
     28  * 2550 Garcia Avenue
     29  * Mountain View, California  94043
     30  */
     31 
     32 /*
     33  * Protocol description file for the Yellow Pages Service
     34  */
     35 
     36 const YPMAXRECORD = 1024;
     37 const YPMAXDOMAIN = 64;
     38 const YPMAXMAP = 64;
     39 const YPMAXPEER = 64;
     40 
     41 
     42 enum ypstat {
     43 	YP_TRUE		=  1,
     44 	YP_NOMORE	=  2,
     45 	YP_FALSE	=  0,
     46 	YP_NOMAP	= -1,
     47 	YP_NODOM	= -2,
     48 	YP_NOKEY	= -3,
     49 	YP_BADOP	= -4,
     50 	YP_BADDB	= -5,
     51 	YP_YPERR	= -6,
     52 	YP_BADARGS	= -7,
     53 	YP_VERS		= -8
     54 };
     55 
     56 
     57 enum ypxfrstat {
     58 	YPXFR_SUCC	=  1,
     59 	YPXFR_AGE	=  2,
     60 	YPXFR_NOMAP	= -1,
     61 	YPXFR_NODOM	= -2,
     62 	YPXFR_RSRC	= -3,
     63 	YPXFR_RPC	= -4,
     64 	YPXFR_MADDR	= -5,
     65 	YPXFR_YPERR	= -6,
     66 	YPXFR_BADARGS	= -7,
     67 	YPXFR_DBM	= -8,
     68 	YPXFR_FILE	= -9,
     69 	YPXFR_SKEW	= -10,
     70 	YPXFR_CLEAR	= -11,
     71 	YPXFR_FORCE	= -12,
     72 	YPXFR_XFRERR	= -13,
     73 	YPXFR_REFUSED	= -14
     74 };
     75 
     76 
     77 typedef string domainname<YPMAXDOMAIN>;
     78 typedef string mapname<YPMAXMAP>;
     79 typedef string peername<YPMAXPEER>;
     80 typedef opaque keydat<YPMAXRECORD>;
     81 typedef opaque valdat<YPMAXRECORD>;
     82 
     83 
     84 struct ypmap_parms {
     85 	domainname domain;
     86 	mapname map;
     87 	unsigned int ordernum;
     88 	peername peer;
     89 };
     90 
     91 struct ypreq_key {
     92 	domainname domain;
     93 	mapname map;
     94 	keydat key;
     95 };
     96 
     97 struct ypreq_nokey {
     98 	domainname domain;
     99 	mapname map;
    100 };
    101 
    102 struct ypreq_xfr {
    103 	ypmap_parms map_parms;
    104 	unsigned int transid;
    105 	unsigned int prog;
    106 	unsigned int port;
    107 };
    108 
    109 
    110 struct ypresp_val {
    111 	ypstat stat;
    112 	valdat val;
    113 };
    114 
    115 struct ypresp_key_val {
    116 	ypstat stat;
    117 #ifdef STUPID_SUN_BUG
    118 	/* This is the form as distributed by Sun.  But even the Sun NIS
    119 	   servers expect the values in the other order.  So their
    120 	   implementation somehow must change the order internally.  We
    121 	   don't want to follow this bad example since the user should be
    122 	   able to use rpcgen on this file.  */
    123 	keydat key;
    124 	valdat val;
    125 #else
    126 	valdat val;
    127 	keydat key;
    128 #endif
    129 };
    130 
    131 
    132 struct ypresp_master {
    133 	ypstat stat;
    134 	peername peer;
    135 };
    136 
    137 struct ypresp_order {
    138 	ypstat stat;
    139 	unsigned int ordernum;
    140 };
    141 
    142 union ypresp_all switch (bool more) {
    143 case TRUE:
    144 	ypresp_key_val val;
    145 case FALSE:
    146 	void;
    147 };
    148 
    149 struct ypresp_xfr {
    150 	unsigned int transid;
    151 	ypxfrstat xfrstat;
    152 };
    153 
    154 struct ypmaplist {
    155 	mapname map;
    156 	ypmaplist *next;
    157 };
    158 
    159 struct ypresp_maplist {
    160 	ypstat stat;
    161 	ypmaplist *maps;
    162 };
    163 
    164 enum yppush_status {
    165 	YPPUSH_SUCC	=  1,	/* Success */
    166 	YPPUSH_AGE 	=  2,	/* Master's version not newer */
    167 	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
    168 	YPPUSH_NODOM	= -2,	/* Domain not supported */
    169 	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
    170 	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
    171 	YPPUSH_MADDR 	= -5,	/* Can't get master address */
    172 	YPPUSH_YPERR	= -6,	/* YP server/map db error */
    173 	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
    174 	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
    175 	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
    176 	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
    177 	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
    178 	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
    179 	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
    180 	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
    181 };
    182 
    183 struct yppushresp_xfr {
    184 	unsigned transid;
    185 	yppush_status status;
    186 };
    187 
    188 /*
    189  * Response structure and overall result status codes.  Success and failure
    190  * represent two separate response message types.
    191  */
    192 
    193 enum ypbind_resptype {
    194 	YPBIND_SUCC_VAL = 1,
    195 	YPBIND_FAIL_VAL = 2
    196 };
    197 
    198 struct ypbind_binding {
    199     opaque ypbind_binding_addr[4]; /* In network order */
    200     opaque ypbind_binding_port[2]; /* In network order */
    201 };
    202 
    203 union ypbind_resp switch (ypbind_resptype ypbind_status) {
    204 case YPBIND_FAIL_VAL:
    205         unsigned ypbind_error;
    206 case YPBIND_SUCC_VAL:
    207         ypbind_binding ypbind_bindinfo;
    208 };
    209 
    210 /* Detailed failure reason codes for response field ypbind_error*/
    211 
    212 const YPBIND_ERR_ERR    = 1;	/* Internal error */
    213 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
    214 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
    215 
    216 
    217 /*
    218  * Request data structure for ypbind "Set domain" procedure.
    219  */
    220 struct ypbind_setdom {
    221 	domainname ypsetdom_domain;
    222 	ypbind_binding ypsetdom_binding;
    223 	unsigned ypsetdom_vers;
    224 };
    225 
    226 
    227 /*
    228  * YP access protocol
    229  */
    230 program YPPROG {
    231 	version YPVERS {
    232 		void
    233 		YPPROC_NULL(void) = 0;
    234 
    235 		bool
    236 		YPPROC_DOMAIN(domainname) = 1;
    237 
    238 		bool
    239 		YPPROC_DOMAIN_NONACK(domainname) = 2;
    240 
    241 		ypresp_val
    242 		YPPROC_MATCH(ypreq_key) = 3;
    243 
    244 		ypresp_key_val
    245 		YPPROC_FIRST(ypreq_key) = 4;
    246 
    247 		ypresp_key_val
    248 		YPPROC_NEXT(ypreq_key) = 5;
    249 
    250 		ypresp_xfr
    251 		YPPROC_XFR(ypreq_xfr) = 6;
    252 
    253 		void
    254 		YPPROC_CLEAR(void) = 7;
    255 
    256 		ypresp_all
    257 		YPPROC_ALL(ypreq_nokey) = 8;
    258 
    259 		ypresp_master
    260 		YPPROC_MASTER(ypreq_nokey) = 9;
    261 
    262 		ypresp_order
    263 		YPPROC_ORDER(ypreq_nokey) = 10;
    264 
    265 		ypresp_maplist
    266 		YPPROC_MAPLIST(domainname) = 11;
    267 	} = 2;
    268 } = 100004;
    269 
    270 
    271 /*
    272  * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
    273  */
    274 program YPPUSH_XFRRESPPROG {
    275 	version YPPUSH_XFRRESPVERS {
    276 		void
    277 		YPPUSHPROC_NULL(void) = 0;
    278 
    279 #ifdef STUPID_SUN_BUG
    280 		/* This is the form as distributed by Sun.  But even
    281 		   the Sun NIS servers expect the values in the other
    282 		   order.  So their implementation somehow must change
    283 		   the order internally.  We don't want to follow this
    284 		   bad example since the user should be able to use
    285 		   rpcgen on this file.  */
    286 		yppushresp_xfr
    287 		YPPUSHPROC_XFRRESP(void) = 1;
    288 #else
    289 		void
    290 		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
    291 #endif
    292 	} = 1;
    293 } = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
    294 
    295 /*
    296  * YP binding protocol
    297  */
    298 program YPBINDPROG {
    299 	version YPBINDVERS {
    300 		void
    301 		YPBINDPROC_NULL(void) = 0;
    302 
    303 		ypbind_resp
    304 		YPBINDPROC_DOMAIN(domainname) = 1;
    305 
    306 		void
    307 		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
    308 	} = 2;
    309 } = 100007;
    310