1 /* 2 * Copyright (c) 2010, Oracle America, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following 12 * disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * * Neither the name of the "Oracle America, Inc." nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 23 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 25 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef __RPCSVC_YP_H__ 33 #define __RPCSVC_YP_H__ 34 35 #include <features.h> 36 #include <rpc/rpc.h> 37 38 #define YPMAXRECORD 1024 39 #define YPMAXDOMAIN 64 40 #define YPMAXMAP 64 41 #define YPMAXPEER 64 42 43 enum ypstat { 44 YP_TRUE = 1, 45 YP_NOMORE = 2, 46 YP_FALSE = 0, 47 YP_NOMAP = -1, 48 YP_NODOM = -2, 49 YP_NOKEY = -3, 50 YP_BADOP = -4, 51 YP_BADDB = -5, 52 YP_YPERR = -6, 53 YP_BADARGS = -7, 54 YP_VERS = -8, 55 }; 56 typedef enum ypstat ypstat; 57 58 enum ypxfrstat { 59 YPXFR_SUCC = 1, 60 YPXFR_AGE = 2, 61 YPXFR_NOMAP = -1, 62 YPXFR_NODOM = -2, 63 YPXFR_RSRC = -3, 64 YPXFR_RPC = -4, 65 YPXFR_MADDR = -5, 66 YPXFR_YPERR = -6, 67 YPXFR_BADARGS = -7, 68 YPXFR_DBM = -8, 69 YPXFR_FILE = -9, 70 YPXFR_SKEW = -10, 71 YPXFR_CLEAR = -11, 72 YPXFR_FORCE = -12, 73 YPXFR_XFRERR = -13, 74 YPXFR_REFUSED = -14, 75 }; 76 typedef enum ypxfrstat ypxfrstat; 77 78 typedef char *domainname; 79 typedef char *mapname; 80 typedef char *peername; 81 82 typedef struct { 83 u_int keydat_len; 84 char *keydat_val; 85 } keydat; 86 87 typedef struct { 88 u_int valdat_len; 89 char *valdat_val; 90 } valdat; 91 92 struct ypmap_parms { 93 domainname domain; 94 mapname map; 95 u_int ordernum; 96 peername peer; 97 }; 98 typedef struct ypmap_parms ypmap_parms; 99 100 struct ypreq_key { 101 domainname domain; 102 mapname map; 103 keydat key; 104 }; 105 typedef struct ypreq_key ypreq_key; 106 107 struct ypreq_nokey { 108 domainname domain; 109 mapname map; 110 }; 111 typedef struct ypreq_nokey ypreq_nokey; 112 113 struct ypreq_xfr { 114 ypmap_parms map_parms; 115 u_int transid; 116 u_int prog; 117 u_int port; 118 }; 119 typedef struct ypreq_xfr ypreq_xfr; 120 121 struct ypresp_val { 122 ypstat stat; 123 valdat val; 124 }; 125 typedef struct ypresp_val ypresp_val; 126 127 struct ypresp_key_val { 128 ypstat stat; 129 #ifdef STUPID_SUN_BUG 130 /* This is the form as distributed by Sun. But even the Sun NIS 131 servers expect the values in the other order. So their 132 implementation somehow must change the order internally. We 133 don't want to follow this bad example since the user should be 134 able to use rpcgen on this file. */ 135 keydat key; 136 valdat val; 137 #else 138 valdat val; 139 keydat key; 140 #endif 141 }; 142 typedef struct ypresp_key_val ypresp_key_val; 143 144 struct ypresp_master { 145 ypstat stat; 146 peername peer; 147 }; 148 typedef struct ypresp_master ypresp_master; 149 150 struct ypresp_order { 151 ypstat stat; 152 u_int ordernum; 153 }; 154 typedef struct ypresp_order ypresp_order; 155 156 struct ypresp_all { 157 bool_t more; 158 union { 159 ypresp_key_val val; 160 } ypresp_all_u; 161 }; 162 typedef struct ypresp_all ypresp_all; 163 164 struct ypresp_xfr { 165 u_int transid; 166 ypxfrstat xfrstat; 167 }; 168 typedef struct ypresp_xfr ypresp_xfr; 169 170 struct ypmaplist { 171 mapname map; 172 struct ypmaplist *next; 173 }; 174 typedef struct ypmaplist ypmaplist; 175 176 struct ypresp_maplist { 177 ypstat stat; 178 ypmaplist *maps; 179 }; 180 typedef struct ypresp_maplist ypresp_maplist; 181 182 enum yppush_status { 183 YPPUSH_SUCC = 1, 184 YPPUSH_AGE = 2, 185 YPPUSH_NOMAP = -1, 186 YPPUSH_NODOM = -2, 187 YPPUSH_RSRC = -3, 188 YPPUSH_RPC = -4, 189 YPPUSH_MADDR = -5, 190 YPPUSH_YPERR = -6, 191 YPPUSH_BADARGS = -7, 192 YPPUSH_DBM = -8, 193 YPPUSH_FILE = -9, 194 YPPUSH_SKEW = -10, 195 YPPUSH_CLEAR = -11, 196 YPPUSH_FORCE = -12, 197 YPPUSH_XFRERR = -13, 198 YPPUSH_REFUSED = -14, 199 }; 200 typedef enum yppush_status yppush_status; 201 202 struct yppushresp_xfr { 203 u_int transid; 204 yppush_status status; 205 }; 206 typedef struct yppushresp_xfr yppushresp_xfr; 207 208 enum ypbind_resptype { 209 YPBIND_SUCC_VAL = 1, 210 YPBIND_FAIL_VAL = 2, 211 }; 212 typedef enum ypbind_resptype ypbind_resptype; 213 214 struct ypbind_binding { 215 char ypbind_binding_addr[4]; 216 char ypbind_binding_port[2]; 217 }; 218 typedef struct ypbind_binding ypbind_binding; 219 220 struct ypbind_resp { 221 ypbind_resptype ypbind_status; 222 union { 223 u_int ypbind_error; 224 ypbind_binding ypbind_bindinfo; 225 } ypbind_resp_u; 226 }; 227 typedef struct ypbind_resp ypbind_resp; 228 229 #define YPBIND_ERR_ERR 1 230 #define YPBIND_ERR_NOSERV 2 231 #define YPBIND_ERR_RESC 3 232 233 struct ypbind_setdom { 234 domainname ypsetdom_domain; 235 ypbind_binding ypsetdom_binding; 236 u_int ypsetdom_vers; 237 }; 238 typedef struct ypbind_setdom ypbind_setdom; 239 240 __BEGIN_DECLS 241 242 #define YPPROG 100004 243 #define YPVERS 2 244 245 #define YPPROC_NULL 0 246 extern void *ypproc_null_2 (void *, CLIENT *); 247 extern void *ypproc_null_2_svc (void *, struct svc_req *); 248 #define YPPROC_DOMAIN 1 249 extern bool_t *ypproc_domain_2 (domainname *, CLIENT *); 250 extern bool_t *ypproc_domain_2_svc (domainname *, struct svc_req *); 251 #define YPPROC_DOMAIN_NONACK 2 252 extern bool_t *ypproc_domain_nonack_2 (domainname *, CLIENT *); 253 extern bool_t *ypproc_domain_nonack_2_svc (domainname *, struct svc_req *); 254 #define YPPROC_MATCH 3 255 extern ypresp_val *ypproc_match_2 (ypreq_key *, CLIENT *); 256 extern ypresp_val *ypproc_match_2_svc (ypreq_key *, struct svc_req *); 257 #define YPPROC_FIRST 4 258 extern ypresp_key_val *ypproc_first_2 (ypreq_key *, CLIENT *); 259 extern ypresp_key_val *ypproc_first_2_svc (ypreq_key *, struct svc_req *); 260 #define YPPROC_NEXT 5 261 extern ypresp_key_val *ypproc_next_2 (ypreq_key *, CLIENT *); 262 extern ypresp_key_val *ypproc_next_2_svc (ypreq_key *, struct svc_req *); 263 #define YPPROC_XFR 6 264 extern ypresp_xfr *ypproc_xfr_2 (ypreq_xfr *, CLIENT *); 265 extern ypresp_xfr *ypproc_xfr_2_svc (ypreq_xfr *, struct svc_req *); 266 #define YPPROC_CLEAR 7 267 extern void *ypproc_clear_2 (void *, CLIENT *); 268 extern void *ypproc_clear_2_svc (void *, struct svc_req *); 269 #define YPPROC_ALL 8 270 extern ypresp_all *ypproc_all_2 (ypreq_nokey *, CLIENT *); 271 extern ypresp_all *ypproc_all_2_svc (ypreq_nokey *, struct svc_req *); 272 #define YPPROC_MASTER 9 273 extern ypresp_master *ypproc_master_2 (ypreq_nokey *, CLIENT *); 274 extern ypresp_master *ypproc_master_2_svc (ypreq_nokey *, struct svc_req *); 275 #define YPPROC_ORDER 10 276 extern ypresp_order *ypproc_order_2 (ypreq_nokey *, CLIENT *); 277 extern ypresp_order *ypproc_order_2_svc (ypreq_nokey *, struct svc_req *); 278 #define YPPROC_MAPLIST 11 279 extern ypresp_maplist *ypproc_maplist_2 (domainname *, CLIENT *); 280 extern ypresp_maplist *ypproc_maplist_2_svc (domainname *, struct svc_req *); 281 extern int ypprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 282 283 284 #define YPPUSH_XFRRESPPROG (0x40000000) 285 #define YPPUSH_XFRRESPVERS 1 286 287 #define YPPUSHPROC_NULL 0 288 extern void *yppushproc_null_1 (void *, CLIENT *); 289 extern void *yppushproc_null_1_svc (void *, struct svc_req *); 290 #define YPPUSHPROC_XFRRESP 1 291 extern void *yppushproc_xfrresp_1 (yppushresp_xfr *, CLIENT *); 292 extern void *yppushproc_xfrresp_1_svc (yppushresp_xfr *, struct svc_req *); 293 extern int yppush_xfrrespprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 294 295 296 #define YPBINDPROG 100007 297 #define YPBINDVERS 2 298 299 #define YPBINDPROC_NULL 0 300 extern void *ypbindproc_null_2 (void *, CLIENT *); 301 extern void *ypbindproc_null_2_svc (void *, struct svc_req *); 302 #define YPBINDPROC_DOMAIN 1 303 extern ypbind_resp *ypbindproc_domain_2 (domainname *, CLIENT *); 304 extern ypbind_resp *ypbindproc_domain_2_svc (domainname *, struct svc_req *); 305 #define YPBINDPROC_SETDOM 2 306 extern void *ypbindproc_setdom_2 (ypbind_setdom *, CLIENT *); 307 extern void *ypbindproc_setdom_2_svc (ypbind_setdom *, struct svc_req *); 308 extern int ypbindprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 309 310 311 extern bool_t xdr_ypstat (XDR *, ypstat*); 312 extern bool_t xdr_ypxfrstat (XDR *, ypxfrstat*); 313 extern bool_t xdr_domainname (XDR *, domainname*); 314 extern bool_t xdr_mapname (XDR *, mapname*); 315 extern bool_t xdr_peername (XDR *, peername*); 316 extern bool_t xdr_keydat (XDR *, keydat*); 317 extern bool_t xdr_valdat (XDR *, valdat*); 318 extern bool_t xdr_ypmap_parms (XDR *, ypmap_parms*); 319 extern bool_t xdr_ypreq_key (XDR *, ypreq_key*); 320 extern bool_t xdr_ypreq_nokey (XDR *, ypreq_nokey*); 321 extern bool_t xdr_ypreq_xfr (XDR *, ypreq_xfr*); 322 extern bool_t xdr_ypresp_val (XDR *, ypresp_val*); 323 extern bool_t xdr_ypresp_key_val (XDR *, ypresp_key_val*); 324 extern bool_t xdr_ypresp_master (XDR *, ypresp_master*); 325 extern bool_t xdr_ypresp_order (XDR *, ypresp_order*); 326 extern bool_t xdr_ypresp_all (XDR *, ypresp_all*); 327 extern bool_t xdr_ypresp_xfr (XDR *, ypresp_xfr*); 328 extern bool_t xdr_ypmaplist (XDR *, ypmaplist*); 329 extern bool_t xdr_ypresp_maplist (XDR *, ypresp_maplist*); 330 extern bool_t xdr_yppush_status (XDR *, yppush_status*); 331 extern bool_t xdr_yppushresp_xfr (XDR *, yppushresp_xfr*); 332 extern bool_t xdr_ypbind_resptype (XDR *, ypbind_resptype*); 333 extern bool_t xdr_ypbind_binding (XDR *, ypbind_binding*); 334 extern bool_t xdr_ypbind_resp (XDR *, ypbind_resp*); 335 extern bool_t xdr_ypbind_setdom (XDR *, ypbind_setdom*); 336 337 __END_DECLS 338 339 #endif /* !__RPCSVC_YP_H__ */ 340