freebsd-skq/gnu/usr.bin/yppush/yp_xdr.c
wpaul 41d13cf350 Obtained from: The NYS project
This is a ported/modified version of the yppush program from the
yps-0.21 package from the NYS project. This program is used to propagate
updated NIS maps from an NIS master to an NIS slave. It's normally invoked
by /var/yp/Makefile.

This version of yppush has been modified in the following ways:

- Cleared up several Linux/BSD incompatibilities, largely involving
  header files.

- converted from GDBM to DB with extreme predjudice. (well, not really...)

- removed lots of ugly debugging code that really didn't do anyone any good.

- Fixed a couple of inaccurate/badly formatted error messages.

- Renamed some functions to avoid collisions with certain YP routines
  hidden inside libc.

- Small signal handling kludge: Linux has different struct sigaction
  that us.

- Incorporated some functions from the yps-0.21 library that yppush was
  dependent on.

Like ypxfr, this works, but could use come cleaning up.
1995-01-31 09:47:11 +00:00

478 lines
9.4 KiB
C

/*
YPS-0.2, NIS-Server for Linux
Copyright (C) 1994 Tobias Reber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Modified for use with FreeBSD 2.x by Bill Paul (wpaul@ctr.columbia.edu)
$Id$
*/
/*
* $Author: root $
* $Log: yp_xdr.c,v $
* Revision 0.20 1994/01/02 22:48:22 root
* Added strict prototypes
*
* Revision 0.19 1994/01/02 20:09:39 root
* Added GPL notice
*
* Revision 0.18 1994/01/02 18:06:13 root
* Fixed another bug in __xdr_ypresp_all
*
* Revision 0.17 1993/12/30 22:34:57 root
* *** empty log message ***
*
* Revision 0.16 1993/12/29 00:37:37 root
* Fixed a bug in __xdr_ypresp_key_val
*
* Revision 0.15 1993/06/16 22:54:12 dok235
* Fix a bug in ypresp_key_val
*
* Revision 0.14 1993/06/12 09:39:30 root
* Align with include-4.4
*
* Revision 0.13 1993/06/11 21:45:00 root
* Regenned from yp.x, that came with include-4.4
*
*/
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include <rpc/rpc.h>
#include <rpcsvc/yp.h>
#ifdef DEBUG
#define PRINTF(x) printf x
#define PRLINENO printf(__FILE__ "(%d): ", __LINE__)
#else
#define PRINTF(x)
#define PRLINENO
#endif
struct {
union {
int (*encoder)(char *, int, char **, int *, char **, int *);
int (*decoder)(int, char *, int, char *, int, char *);
} foreach;
char *data;
} *__xdr_ypall_callback;
bool_t
__xdr_ypstat(XDR *xdrs, ypstat *objp)
{
if (!xdr_enum(xdrs, (enum_t *)objp)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypxfrstat(XDR *xdrs, ypxfrstat *objp)
{
if (!xdr_enum(xdrs, (enum_t *)objp)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_domainname(XDR *xdrs, domainname *objp)
{
if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_mapname(XDR *xdrs, mapname *objp)
{
if (!xdr_string(xdrs, objp, YPMAXMAP)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_peername(XDR *xdrs, peername *objp)
{
if (!xdr_string(xdrs, objp, YPMAXPEER)) {
return (FALSE);
}
return (TRUE);
}
bool_t
xdr_keydat(XDR *xdrs, keydat *objp)
{
if (!xdr_bytes(xdrs, (char **)&objp->keydat_val, (u_int *)&objp->keydat_len, YPMAXRECORD)) {
return (FALSE);
}
return (TRUE);
}
bool_t
xdr_valdat(XDR *xdrs, valdat *objp)
{
if (!xdr_bytes(xdrs, (char **)&objp->valdat_val, (u_int *)&objp->valdat_len, YPMAXRECORD)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypmap_parms(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);
}
return (TRUE);
}
bool_t
__xdr_ypreq_key(XDR *xdrs, ypreq_key *objp)
{
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(XDR *xdrs, ypreq_nokey *objp)
{
if (!__xdr_domainname(xdrs, &objp->domain)) {
return (FALSE);
}
if (!__xdr_mapname(xdrs, &objp->map)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypreq_xfr(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)) {
return (FALSE);
}
if (!xdr_u_int(xdrs, &objp->port)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypresp_val(XDR *xdrs, ypresp_val *objp)
{
if (!__xdr_ypstat(xdrs, &objp->stat)) {
return (FALSE);
}
if (!xdr_valdat(xdrs, &objp->val)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypresp_key_val(XDR *xdrs, ypresp_key_val *objp)
{
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(XDR *xdrs, ypresp_master *objp)
{
if (!__xdr_ypstat(xdrs, &objp->stat)) {
return (FALSE);
}
if (!__xdr_peername(xdrs, &objp->peer)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypresp_order(XDR *xdrs, ypresp_order *objp)
{
if (!__xdr_ypstat(xdrs, &objp->stat)) {
return (FALSE);
}
if (!xdr_u_int(xdrs, &objp->ordernum)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypresp_all(XDR *xdrs, ypresp_all *objp)
{
int CallAgain = 0;
PRLINENO;
if (xdrs->x_op == XDR_DECODE) {
while(1) {
#if 1
int s=objp->ypresp_all_u.val.stat;
bzero((char *)objp, sizeof (*objp));
objp->ypresp_all_u.val.stat=s;
#endif
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);
}
if (CallAgain==0) {
CallAgain=(*(__xdr_ypall_callback->foreach.decoder))(
objp->ypresp_all_u.val.stat,
objp->ypresp_all_u.val.key.keydat_val,
objp->ypresp_all_u.val.key.keydat_len,
objp->ypresp_all_u.val.val.valdat_val,
objp->ypresp_all_u.val.val.valdat_len,
__xdr_ypall_callback->data);
}
break;
case FALSE:
return TRUE;
}
#if 0
xdrs->x_op=XDR_FREE;
if (!__xdr_ypresp_all(xdrs, objp)) {
return FALSE;
}
xdrs->x_op=XDR_DECODE;
#else
xdr_free(__xdr_ypresp_all, (char *)objp);
#endif
}
} else if (xdrs->x_op == XDR_ENCODE) {
while(1) {
if (!xdr_bool(xdrs, &(objp->more))) {
return (FALSE);
}
if (!__xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) {
printf("__xdr_ypresp_key_val failed\n");
return (FALSE);
}
if (objp->ypresp_all_u.val.stat!=YP_TRUE) {
objp->more=FALSE;
if (!xdr_bool(xdrs, &(objp->more))) {
return (FALSE);
}
return(TRUE);
}
objp->ypresp_all_u.val.stat =
(enum ypstat)(*(__xdr_ypall_callback->foreach.encoder))(
objp->ypresp_all_u.val.key.keydat_val,
objp->ypresp_all_u.val.key.keydat_len,
&(objp->ypresp_all_u.val.key.keydat_val),
&(objp->ypresp_all_u.val.key.keydat_len),
&(objp->ypresp_all_u.val.val.valdat_val),
&(objp->ypresp_all_u.val.val.valdat_len));
}
} else {
#if 0
bool_t more=objp->more;
if (more==TRUE) {
if (!xdr_bool(xdrs, &objp->more)) {
return FALSE;
}
if (!__xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) {
return (FALSE);
}
}
#endif
return(TRUE);
}
}
bool_t
__xdr_ypresp_xfr(XDR *xdrs, ypresp_xfr *objp)
{
if (!xdr_u_int(xdrs, &objp->transid)) {
return (FALSE);
}
if (!__xdr_ypxfrstat(xdrs, &objp->xfrstat)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypmaplist(XDR *xdrs, ypmaplist *objp)
{
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(XDR *xdrs, ypresp_maplist *objp)
{
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(XDR *xdrs, yppush_status *objp)
{
if (!xdr_enum(xdrs, (enum_t *)objp)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_yppushresp_xfr(XDR *xdrs, yppushresp_xfr *objp)
{
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(XDR *xdrs, ypbind_resptype *objp)
{
if (!xdr_enum(xdrs, (enum_t *)objp)) {
return (FALSE);
}
return (TRUE);
}
bool_t
__xdr_ypbind_binding(XDR *xdrs, ypbind_binding *objp)
{
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(XDR *xdrs, ypbind_resp *objp)
{
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(XDR *xdrs, ypbind_setdom *objp)
{
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);
}