From: chuck Date: Sat, 20 Jan 1996 02:53:22 +0000 (+0000) Subject: ypserv_xdr, as generated by rpcgen from yp.x with one major exception. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=030628e3674eff4660922a6cba310bccff3253f9;p=openbsd ypserv_xdr, as generated by rpcgen from yp.x with one major exception. in xdr_ypresp_key_val() invert the order of loading the key and value (rpcgen says [1] stat, [2] key, [3] value, but the data on the wire comes in as [1] stat, [2] val, [3] key... you can't fix this in yp.x because if you invert the ordr in yp.x not only does it invert the order in ypserv_xdr.c, but it also inverts it in the structure in yp.h which cancels out the inversion in ypserv_xdr.c. i guess this means it is not possible to have a yp.x that descrives the YP protocol properly?). ***NOTE*** this file is also needed because some of the YP functions in libc are broken. For example, compare src/lib/libc/yp/xdryp.c's version of xdr_domainname() to the one in this file generated by rpcgen. Note that xdryp.c calls: if (!xdr_string(xdrs, &objp, YPMAXDOMAIN)) { /* xdryp.c */ while ypserv_xdr.c (generated by rpcgen) calls: if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) { /* rpcgen */ (note the lack of "&" in the second line). Clearly libc is wrong and needs to be fixed (XXX). (Of course changing libc could break other YP stuff, which is why I haven't attemped it... :) ) When libc is fixed, it should be possible to phase out this file, I think. --- diff --git a/usr.sbin/ypserv/ypserv/ypserv_xdr.c b/usr.sbin/ypserv/ypserv/ypserv_xdr.c index 3ce1fd647af..94f1d5b33ca 100644 --- a/usr.sbin/ypserv/ypserv/ypserv_xdr.c +++ b/usr.sbin/ypserv/ypserv/ypserv_xdr.c @@ -1,56 +1,169 @@ /* - * Copyright (c) 1994 Mats O Jansson - * 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. + * Please do not edit this file. + * It was generated using rpcgen. */ -#ifndef LINT -static char rcsid[] = "$Id: ypserv_xdr.c,v 1.1 1995/11/01 16:56:38 deraadt Exp $"; -#endif +#include "yp.h" +#ifndef lint +/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/ +static char rcsid[] = "$Id: ypserv_xdr.c,v 1.2 1996/01/20 02:53:22 chuck Exp $"; +#endif /* not lint */ -#include -#include +bool_t +xdr_ypstat(xdrs, objp) + XDR *xdrs; + ypstat *objp; +{ + + register long *buf; + + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypxfrstat(xdrs, objp) + XDR *xdrs; + ypxfrstat *objp; +{ + + register long *buf; + + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_domainname(xdrs, objp) + XDR *xdrs; + domainname *objp; +{ + + register long *buf; + + if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_mapname(xdrs, objp) + XDR *xdrs; + mapname *objp; +{ + + register long *buf; + + if (!xdr_string(xdrs, objp, YPMAXMAP)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_peername(xdrs, objp) + XDR *xdrs; + peername *objp; +{ + + register long *buf; + + if (!xdr_string(xdrs, objp, YPMAXPEER)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_keydat(xdrs, objp) + XDR *xdrs; + keydat *objp; +{ + + register long *buf; + + if (!xdr_bytes(xdrs, (char **)&objp->keydat_val, (u_int *)&objp->keydat_len, YPMAXRECORD)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_valdat(xdrs, objp) + XDR *xdrs; + valdat *objp; +{ + + register long *buf; + + if (!xdr_bytes(xdrs, (char **)&objp->valdat_val, (u_int *)&objp->valdat_len, YPMAXRECORD)) { + return (FALSE); + } + return (TRUE); +} bool_t xdr_ypmap_parms(xdrs, objp) XDR *xdrs; ypmap_parms *objp; { - if (!xdr_domainname(xdrs, &objp->domain)) { - return (FALSE); - } - if (!xdr_mapname(xdrs, &objp->map)) { - return (FALSE); - } - if (!xdr_u_int(xdrs, &objp->ordernum)) { - return (FALSE); - } - if (!xdr_peername(xdrs, &objp->peer)) { - return (FALSE); - } + + register long *buf; + + if (!xdr_domainname(xdrs, &objp->domain)) { + return (FALSE); + } + if (!xdr_mapname(xdrs, &objp->map)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ordernum)) { + return (FALSE); + } + if (!xdr_peername(xdrs, &objp->peer)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypreq_key(xdrs, objp) + XDR *xdrs; + ypreq_key *objp; +{ + + register long *buf; + + if (!xdr_domainname(xdrs, &objp->domain)) { + return (FALSE); + } + if (!xdr_mapname(xdrs, &objp->map)) { + return (FALSE); + } + if (!xdr_keydat(xdrs, &objp->key)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypreq_nokey(xdrs, objp) + XDR *xdrs; + ypreq_nokey *objp; +{ + + register long *buf; + + if (!xdr_domainname(xdrs, &objp->domain)) { + return (FALSE); + } + if (!xdr_mapname(xdrs, &objp->map)) { + return (FALSE); + } return (TRUE); } @@ -59,17 +172,278 @@ xdr_ypreq_xfr(xdrs, objp) XDR *xdrs; ypreq_xfr *objp; { - if (!xdr_ypmap_parms(xdrs, &objp->map_parms)) { - return (FALSE); - } - if (!xdr_u_int(xdrs, &objp->transid)) { - return (FALSE); - } - if (!xdr_u_int(xdrs, &objp->prog)) { + + register long *buf; + + if (!xdr_ypmap_parms(xdrs, &objp->map_parms)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->transid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->prog)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->port)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_val(xdrs, objp) + XDR *xdrs; + ypresp_val *objp; +{ + + register long *buf; + + if (!xdr_ypstat(xdrs, &objp->stat)) { + return (FALSE); + } + if (!xdr_valdat(xdrs, &objp->val)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_key_val(xdrs, objp) + XDR *xdrs; + ypresp_key_val *objp; +{ + + register long *buf; + + if (!xdr_ypstat(xdrs, &objp->stat)) { + return (FALSE); + } + if (!xdr_valdat(xdrs, &objp->val)) { + return (FALSE); + } + if (!xdr_keydat(xdrs, &objp->key)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_master(xdrs, objp) + XDR *xdrs; + ypresp_master *objp; +{ + + register long *buf; + + if (!xdr_ypstat(xdrs, &objp->stat)) { + return (FALSE); + } + if (!xdr_peername(xdrs, &objp->peer)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_order(xdrs, objp) + XDR *xdrs; + ypresp_order *objp; +{ + + register long *buf; + + if (!xdr_ypstat(xdrs, &objp->stat)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ordernum)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_all(xdrs, objp) + XDR *xdrs; + ypresp_all *objp; +{ + + register long *buf; + + if (!xdr_bool(xdrs, &objp->more)) { + return (FALSE); + } + switch (objp->more) { + case TRUE: + if (!xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) { + return (FALSE); + } + break; + case FALSE: + break; + default: return (FALSE); } - if (!xdr_u_int(xdrs, &objp->port)) { + return (TRUE); +} + +bool_t +xdr_ypresp_xfr(xdrs, objp) + XDR *xdrs; + ypresp_xfr *objp; +{ + + register long *buf; + + if (!xdr_u_int(xdrs, &objp->transid)) { + return (FALSE); + } + if (!xdr_ypxfrstat(xdrs, &objp->xfrstat)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypmaplist(xdrs, objp) + XDR *xdrs; + ypmaplist *objp; +{ + + register long *buf; + + if (!xdr_mapname(xdrs, &objp->map)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypresp_maplist(xdrs, objp) + XDR *xdrs; + ypresp_maplist *objp; +{ + + register long *buf; + + if (!xdr_ypstat(xdrs, &objp->stat)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **)&objp->maps, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_yppush_status(xdrs, objp) + XDR *xdrs; + yppush_status *objp; +{ + + register long *buf; + + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_yppushresp_xfr(xdrs, objp) + XDR *xdrs; + yppushresp_xfr *objp; +{ + + register long *buf; + + if (!xdr_u_int(xdrs, &objp->transid)) { + return (FALSE); + } + if (!xdr_yppush_status(xdrs, &objp->status)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypbind_resptype(xdrs, objp) + XDR *xdrs; + ypbind_resptype *objp; +{ + + register long *buf; + + if (!xdr_enum(xdrs, (enum_t *)objp)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypbind_binding(xdrs, objp) + XDR *xdrs; + ypbind_binding *objp; +{ + + register long *buf; + + int i; + if (!xdr_opaque(xdrs, objp->ypbind_binding_addr, 4)) { + return (FALSE); + } + if (!xdr_opaque(xdrs, objp->ypbind_binding_port, 2)) { + return (FALSE); + } + return (TRUE); +} + +bool_t +xdr_ypbind_resp(xdrs, objp) + XDR *xdrs; + ypbind_resp *objp; +{ + + register long *buf; + + if (!xdr_ypbind_resptype(xdrs, &objp->ypbind_status)) { + return (FALSE); + } + switch (objp->ypbind_status) { + case YPBIND_FAIL_VAL: + if (!xdr_u_int(xdrs, &objp->ypbind_resp_u.ypbind_error)) { + return (FALSE); + } + break; + case YPBIND_SUCC_VAL: + if (!xdr_ypbind_binding(xdrs, &objp->ypbind_resp_u.ypbind_bindinfo)) { + return (FALSE); + } + break; + default: return (FALSE); } return (TRUE); } + +bool_t +xdr_ypbind_setdom(xdrs, objp) + XDR *xdrs; + ypbind_setdom *objp; +{ + + register long *buf; + + if (!xdr_domainname(xdrs, &objp->ypsetdom_domain)) { + return (FALSE); + } + if (!xdr_ypbind_binding(xdrs, &objp->ypsetdom_binding)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ypsetdom_vers)) { + return (FALSE); + } + return (TRUE); +}