📄 yp_prot.h
字号:
/* * Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: src/include/rpcsvc/yp_prot.h,v 1.10 1999/08/27 23:45:12 peter Exp $ */#ifndef _RPCSVC_YP_PROT_H_#define _RPCSVC_YP_PROT_H_/* * YPSERV PROTOCOL: * * ypserv supports the following procedures: * * YPPROC_NULL takes (void), returns (void). * called to check if server is alive. * YPPROC_DOMAIN takes (char *), returns (bool_t). * true if ypserv serves the named domain. * YPPROC_DOMAIN_NOACK takes (char *), returns (bool_t). * true if ypserv serves the named domain. * used for broadcasts, does not ack if ypserv * doesn't handle named domain. * YPPROC_MATCH takes (struct ypreq_key), returns (struct ypresp_val) * does a lookup. * YPPROC_FIRST takes (struct ypreq_nokey) returns (ypresp_key_val). * gets the first key/datum from the map. * YPPROC_NEXT takes (struct ypreq_key) returns (ypresp_key_val). * gets the next key/datum from the map. * YPPROC_XFR takes (struct ypreq_xfr), returns (void). * tells ypserv to check if there is a new version of * the map. * YPPROC_CLEAR takes (void), returns (void). * tells ypserv to flush it's file cache, so that * newly transferred files will get read. * YPPROC_ALL takes (struct ypreq_nokey), returns (bool_t and * struct ypresp_key_val). * returns an array of data, with the bool_t being * false on the last datum. read the source, it's * convoluted. * YPPROC_MASTER takes (struct ypreq_nokey), returns (ypresp_master). * YPPROC_ORDER takes (struct ypreq_nokey), returns (ypresp_order). * YPPROC_MAPLIST takes (char *), returns (struct ypmaplist *). */#ifndef BOOL_DEFINEDtypedef u_int bool;#define BOOL_DEFINED#endif/* Program and version symbols, magic numbers */#define YPPROG ((u_long)100004)#define YPVERS ((u_long)2)#define YPVERS_ORIG ((u_long)1)#define YPMAXRECORD ((u_long)1024)#define YPMAXDOMAIN ((u_long)64)#define YPMAXMAP ((u_long)64)#define YPMAXPEER ((u_long)256)/* * I don't know if anything of sun's depends on this, or if they * simply defined it so that their own code wouldn't try to send * packets over the ethernet MTU. This YP code doesn't use it. */#define YPMSGSZ 1600#ifndef DATUMtypedef struct { char *dptr; int dsize;} datum;#define DATUM#endifstruct ypmap_parms { char *domain; char *map; u_long ordernum; char *owner;};struct ypreq_key { char *domain; char *map; datum keydat;};struct ypreq_nokey { char *domain; char *map;};struct ypreq_xfr { struct ypmap_parms map_parms; u_long transid; u_long proto; u_short port;};#define ypxfr_domain map_parms.domain#define ypxfr_map map_parms.map#define ypxfr_ordernum map_parms.ordernum#define ypxfr_owner map_parms.ownerstruct ypresp_val { u_long status; datum valdat;};struct ypresp_key_val { u_long status; datum keydat; datum valdat;};struct ypresp_master { u_long status; char *master;};struct ypresp_order { u_long status; u_long ordernum;};struct ypmaplist { char ypml_name[YPMAXMAP + 1]; struct ypmaplist *ypml_next;};struct ypresp_maplist { u_long status; struct ypmaplist *list;};/* ypserv procedure numbers */#define YPPROC_NULL ((u_long)0)#define YPPROC_DOMAIN ((u_long)1)#define YPPROC_DOMAIN_NONACK ((u_long)2)#define YPPROC_MATCH ((u_long)3)#define YPPROC_FIRST ((u_long)4)#define YPPROC_NEXT ((u_long)5)#define YPPROC_XFR ((u_long)6)#define YPPROC_CLEAR ((u_long)7)#define YPPROC_ALL ((u_long)8)#define YPPROC_MASTER ((u_long)9)#define YPPROC_ORDER ((u_long)10)#define YPPROC_MAPLIST ((u_long)11)/* ypserv procedure return status values */#define YP_TRUE ((long)1) /* general purpose success code */#define YP_NOMORE ((long)2) /* no more entries in map */#define YP_FALSE ((long)0) /* general purpose failure code */#define YP_NOMAP ((long)-1) /* no such map in domain */#define YP_NODOM ((long)-2) /* domain not supported */#define YP_NOKEY ((long)-3) /* no such key in map */#define YP_BADOP ((long)-4) /* invalid operation */#define YP_BADDB ((long)-5) /* server data base is bad */#define YP_YPERR ((long)-6) /* YP server error */#define YP_BADARGS ((long)-7) /* request arguments bad */#define YP_VERS ((long)-8) /* YP server version mismatch *//* * Sun's header file says: * "Domain binding data structure, used by ypclnt package and ypserv modules. * Users of the ypclnt package (or of this protocol) don't HAVE to know about * it, but it must be available to users because _yp_dobind is a public * interface." * * This is totally bogus! Nowhere else does Sun state that _yp_dobind() is * a public interface, and I don't know any reason anyone would want to call * it. But, just in case anyone does actually expect it to be available.. * we provide this.. exactly as Sun wants it. */struct dom_binding { struct dom_binding *dom_pnext; char dom_domain[YPMAXDOMAIN + 1]; struct sockaddr_in dom_server_addr; u_short dom_server_port; int dom_socket; CLIENT *dom_client; u_short dom_local_port; long dom_vers;};/* * YPBIND PROTOCOL: * * ypbind supports the following procedures: * * YPBINDPROC_NULL takes (void), returns (void). * to check if ypbind is running. * YPBINDPROC_DOMAIN takes (char *), returns (struct ypbind_resp). * requests that ypbind start to serve the * named domain (if it doesn't already) * YPBINDPROC_SETDOM takes (struct ypbind_setdom), returns (void). * used by ypset. */#define YPBINDPROG ((u_long)100007)#define YPBINDVERS ((u_long)2)#define YPBINDVERS_ORIG ((u_long)1)/* ypbind procedure numbers */#define YPBINDPROC_NULL ((u_long)0)#define YPBINDPROC_DOMAIN ((u_long)1)#define YPBINDPROC_SETDOM ((u_long)2)/* error code in ypbind_resp.ypbind_status */enum ypbind_resptype { YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2};/* network order, of course */struct ypbind_binding { struct in_addr ypbind_binding_addr; u_short ypbind_binding_port;};struct ypbind_resp { enum ypbind_resptype ypbind_status; union { u_long ypbind_error; struct ypbind_binding ypbind_bindinfo; } ypbind_respbody;};/* error code in ypbind_resp.ypbind_respbody.ypbind_error */#define YPBIND_ERR_ERR 1 /* internal error */#define YPBIND_ERR_NOSERV 2 /* no bound server for passed domain */#define YPBIND_ERR_RESC 3 /* system resource allocation failure *//* * Request data structure for ypbind "Set domain" procedure. */struct ypbind_setdom { char ypsetdom_domain[YPMAXDOMAIN + 1]; struct ypbind_binding ypsetdom_binding; u_short ypsetdom_vers;};#define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr#define ypsetdom_port ypsetdom_binding.ypbind_binding_port/* * YPPUSH PROTOCOL: * * Sun says: * "Protocol between clients (ypxfr, only) and yppush * yppush speaks a protocol in the transient range, which * is supplied to ypxfr as a command-line parameter when it * is activated by ypserv." * * This protocol is not implemented, naturally, because this YP * implementation only does the client side. */#define YPPUSHVERS ((u_long)1)#define YPPUSHVERS_ORIG ((u_long)1)/* yppush procedure numbers */#define YPPUSHPROC_NULL ((u_long)0)#define YPPUSHPROC_XFRRESP ((u_long)1)struct yppushresp_xfr { u_long transid; u_long status;};/* yppush status value in yppushresp_xfr.status */#define YPPUSH_SUCC ((long)1) /* Success */#define YPPUSH_AGE ((long)2) /* Master's version not newer */#define YPPUSH_NOMAP ((long)-1) /* Can't find server for map */#define YPPUSH_NODOM ((long)-2) /* Domain not supported */#define YPPUSH_RSRC ((long)-3) /* Local resource alloc failure */#define YPPUSH_RPC ((long)-4) /* RPC failure talking to server */#define YPPUSH_MADDR ((long)-5) /* Can't get master address */#define YPPUSH_YPERR ((long)-6) /* YP server/map db error */#define YPPUSH_BADARGS ((long)-7) /* Request arguments bad */#define YPPUSH_DBM ((long)-8) /* Local dbm operation failed */#define YPPUSH_FILE ((long)-9) /* Local file I/O operation failed */#define YPPUSH_SKEW ((long)-10) /* Map version skew during transfer */#define YPPUSH_CLEAR ((long)-11) /* Can't send "Clear" req to local ypserv */#define YPPUSH_FORCE ((long)-12) /* No local order number in map - use -f */#define YPPUSH_XFRERR ((long)-13) /* ypxfr error */#define YPPUSH_REFUSED ((long)-14) /* Transfer request refused by ypserv */struct inaddr;__BEGIN_DECLSbool_t xdr_datum __P((XDR *, datum *));bool_t xdr_ypreq_key __P((XDR *, struct ypreq_key *));bool_t xdr_ypreq_nokey __P((XDR *, struct ypreq_nokey *));bool_t xdr_ypreq_xfr __P((XDR *, struct ypreq_xfr *));bool_t xdr_ypresp_val __P((XDR *, struct ypresp_val *));bool_t xdr_ypresp_key_val __P((XDR *, struct ypresp_key_val *));bool_t xdr_ypbind_resp __P((XDR *, struct ypbind_resp *));bool_t xdr_ypbind_setdom __P((XDR *, struct ypbind_setdom *));bool_t xdr_yp_inaddr __P((XDR *, struct inaddr *));bool_t xdr_ypmap_parms __P((XDR *, struct ypmap_parms *));bool_t xdr_yppushresp_xfr __P((XDR *, struct yppushresp_xfr *));bool_t xdr_ypresp_order __P((XDR *, struct ypresp_order *));bool_t xdr_ypresp_master __P((XDR *, struct ypresp_master *));bool_t xdr_ypresp_maplist __P((XDR *, struct ypresp_maplist *));__END_DECLS#endif /* _RPCSVC_YP_PROT_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -