Beispiel #1
0
bool_t
xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp)
{
	struct rpcbs_addrlist **pnext;

	    if (!xdr_u_int32_t(xdrs, &objp->prog)) {
		return (FALSE);
	    }
	    if (!xdr_u_int32_t(xdrs, &objp->vers)) {
		return (FALSE);
	    }
	    if (!xdr_int(xdrs, &objp->success)) {
		return (FALSE);
	    }
	    if (!xdr_int(xdrs, &objp->failure)) {
		return (FALSE);
	    }
	    if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
		return (FALSE);
	    }

	    pnext = &objp->next;

	    if (!xdr_pointer(xdrs, (char **) pnext,
			sizeof (rpcbs_addrlist),
			(xdrproc_t)xdr_rpcbs_addrlist)) {
		return (FALSE);
	    }

	return (TRUE);
}
Beispiel #2
0
/*
 * XDR the MSG_DENIED part of a reply message union
 */
bool_t
xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr)
{
	enum reject_stat *prj_stat;
	enum auth_stat *prj_why;

	assert(xdrs != NULL);
	assert(rr != NULL);

	prj_stat = &rr->rj_stat;

	/* personalized union, rather than calling xdr_union */
	if (! xdr_enum(xdrs, (enum_t *) prj_stat))
		return (FALSE);
	switch (rr->rj_stat) {

	case RPC_MISMATCH:
		if (! xdr_u_int32_t(xdrs, &(rr->rj_vers.low)))
			return (FALSE);
		return (xdr_u_int32_t(xdrs, &(rr->rj_vers.high)));

	case AUTH_ERROR:
		prj_why = &rr->rj_why;
		return (xdr_enum(xdrs, (enum_t *) prj_why));
	}
	/* NOTREACHED */
	assert(0);
	return (FALSE);
}
Beispiel #3
0
/*
 * XDR the MSG_ACCEPTED part of a reply message union
 */
bool_t
xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar)
{
	enum accept_stat *par_stat;

	assert(xdrs != NULL);
	assert(ar != NULL);

	par_stat = &ar->ar_stat;

	/* personalized union, rather than calling xdr_union */
	if (! xdr_opaque_auth(xdrs, &(ar->ar_verf)))
		return (FALSE);
	if (! xdr_enum(xdrs, (enum_t *) par_stat))
		return (FALSE);
	switch (ar->ar_stat) {

	case SUCCESS:
		return ((*(ar->ar_results.proc))(xdrs, ar->ar_results.where));

	case PROG_MISMATCH:
		if (! xdr_u_int32_t(xdrs, &(ar->ar_vers.low)))
			return (FALSE);
		return (xdr_u_int32_t(xdrs, &(ar->ar_vers.high)));

	case GARBAGE_ARGS:
	case SYSTEM_ERR:
	case PROC_UNAVAIL:
	case PROG_UNAVAIL:
		break;
	}
	return (TRUE);  /* TRUE => open ended set of problems */
}
Beispiel #4
0
/*
 * Serializes the "static part" of a call message header.
 * The fields include: rm_xid, rm_direction, rpcvers, prog, and vers.
 * The rm_xid is not really static, but the user can easily munge on the fly.
 */
bool_t
xdr_callhdr(XDR *xdrs, struct rpc_msg *cmsg)
{

	cmsg->rm_direction = CALL;
	cmsg->rm_call.cb_rpcvers = RPC_MSG_VERSION;
	if (xdrs->x_op == XDR_ENCODE &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_xid)) &&
	    xdr_enum(xdrs, (enum_t *)&(cmsg->rm_direction)) &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_rpcvers)) &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_prog)))
		return (xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_vers)));
	return (FALSE);
}
Beispiel #5
0
bool_t
xdr_uint32(XDR *xdrs, uint32 *objp)
{

	if (!xdr_u_int32_t(xdrs, objp))
		return (FALSE);
	return (TRUE);
}
Beispiel #6
0
/*
 * XDR the MSG_DENIED part of a reply message union
 */
bool_t 
xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr)
{

	/* personalized union, rather than calling xdr_union */
	if (! xdr_enum(xdrs, (enum_t *)&(rr->rj_stat)))
		return (FALSE);

	switch (rr->rj_stat) {
	case RPC_MISMATCH:
		if (!xdr_u_int32_t(xdrs, &(rr->rj_vers.low)))
			return (FALSE);
		return (xdr_u_int32_t(xdrs, &(rr->rj_vers.high)));
	case AUTH_ERROR:
		return (xdr_enum(xdrs, (enum_t *)&(rr->rj_why)));
	}
	return (FALSE);
}
Beispiel #7
0
/*
 * XDR a reply message
 */
bool_t
xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)
{
	if (xdr_u_int32_t(xdrs, &(rmsg->rm_xid)) && 
	    xdr_enum(xdrs, (enum_t *)&(rmsg->rm_direction)) &&
	    rmsg->rm_direction == REPLY)
		return (xdr_union(xdrs, (enum_t *)&(rmsg->rm_reply.rp_stat),
		   (caddr_t)&(rmsg->rm_reply.ru), reply_dscrm, NULL));
	return (FALSE);
}
Beispiel #8
0
bool_t
xdr_uvfs_fh(XDR *xdrs, uvfs_fh *objp)
{

	 register int32_t *buf;

	 if (!xdr_u_int32_t(xdrs, objp)) {
		 return (FALSE);
	 }
	return (TRUE);
}
Beispiel #9
0
/*
 * XDR the MSG_ACCEPTED part of a reply message union
 */
bool_t 
xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar)
{

	/* personalized union, rather than calling xdr_union */
	if (! xdr_opaque_auth(xdrs, &(ar->ar_verf)))
		return (FALSE);
	if (! xdr_enum(xdrs, (enum_t *)&(ar->ar_stat)))
		return (FALSE);

	switch (ar->ar_stat) {
	case SUCCESS:
		return ((*(ar->ar_results.proc))(xdrs, ar->ar_results.where));
	case PROG_MISMATCH:
		if (!xdr_u_int32_t(xdrs, &(ar->ar_vers.low)))
			return (FALSE);
		return (xdr_u_int32_t(xdrs, &(ar->ar_vers.high)));
	default:
		return (TRUE);  /* TRUE => open ended set of problems */
	}
}
Beispiel #10
0
/*
 * Serializes the "static part" of a call message header.
 * The fields include: rm_xid, rm_direction, rpcvers, prog, and vers.
 * The rm_xid is not really static, but the user can easily munge on the fly.
 */
bool_t
xdr_callhdr(XDR *xdrs, struct rpc_msg *cmsg)
{
	enum msg_type *prm_direction;

	assert(xdrs != NULL);
	assert(cmsg != NULL);

	prm_direction = &cmsg->rm_direction;

	cmsg->rm_direction = CALL;
	cmsg->rm_call.cb_rpcvers = RPC_MSG_VERSION;
	if (
	    (xdrs->x_op == XDR_ENCODE) &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_xid)) &&
	    xdr_enum(xdrs, (enum_t *) prm_direction) &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_rpcvers)) &&
	    xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_prog)) )
		return (xdr_u_int32_t(xdrs, &(cmsg->rm_call.cb_vers)));
	return (FALSE);
}
Beispiel #11
0
/*
 * XDR the MSG_DENIED part of a reply message union
 */
bool_t 
xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr)
{

	_DIAGASSERT(xdrs != NULL);
	_DIAGASSERT(rr != NULL);

	/* personalized union, rather than calling xdr_union */
	if (! xdr_enum(xdrs, (enum_t *)(void *)&(rr->rj_stat)))
		return (FALSE);
	switch (rr->rj_stat) {

	case RPC_MISMATCH:
		if (! xdr_u_int32_t(xdrs, &(rr->rj_vers.low)))
			return (FALSE);
		return (xdr_u_int32_t(xdrs, &(rr->rj_vers.high)));

	case AUTH_ERROR:
		return (xdr_enum(xdrs, (enum_t *)(void *)&(rr->rj_why)));
	}
	/* NOTREACHED */
	return (FALSE);
}
Beispiel #12
0
bool_t
xdr_uvfs_accessargs(XDR *xdrs, uvfs_accessargs *objp)
{

	 register int32_t *buf;

	 if (!xdr_uvfs_fh(xdrs, &objp->object)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int32_t(xdrs, &objp->access)) {
		 return (FALSE);
	 }
	return (TRUE);
}
Beispiel #13
0
/*
 * XDR a reply message
 */
bool_t
xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)
{
	_DIAGASSERT(xdrs != NULL);
	_DIAGASSERT(rmsg != NULL);

	if (
	    xdr_u_int32_t(xdrs, &(rmsg->rm_xid)) && 
	    xdr_enum(xdrs, (enum_t *)(void *)&(rmsg->rm_direction)) &&
	    (rmsg->rm_direction == REPLY) )
		return (xdr_union(xdrs, (enum_t *)(void *)&(rmsg->rm_reply.rp_stat),
		   (caddr_t)(void *)&(rmsg->rm_reply.ru), reply_dscrm,
		   NULL_xdrproc_t));
	return (FALSE);
}
bool_t
xdr_nlm4_holder(XDR *xdrs, nlm4_holder *objp)
{

	if (!xdr_bool(xdrs, &objp->exclusive))
		return (FALSE);
	if (!xdr_u_int32_t(xdrs, &objp->svid))
		return (FALSE);
	if (!xdr_netobj(xdrs, &objp->oh))
		return (FALSE);
	if (!xdr_u_int64_t(xdrs, &objp->l_offset))
		return (FALSE);
	if (!xdr_u_int64_t(xdrs, &objp->l_len))
		return (FALSE);
	return (TRUE);
}
Beispiel #15
0
bool_t
xdr_uvfs_commitargs(XDR *xdrs, uvfs_commitargs *objp)
{

	 register int32_t *buf;

	 if (!xdr_uvfs_fh(xdrs, &objp->file)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int64_t(xdrs, &objp->offset)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int32_t(xdrs, &objp->count)) {
		 return (FALSE);
	 }
	return (TRUE);
}
Beispiel #16
0
bool_t
xdr_uvfs_readdirargs(XDR *xdrs, uvfs_readdirargs *objp)
{

	 register int32_t *buf;

	 if (!xdr_uvfs_fh(xdrs, &objp->dir)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int64_t(xdrs, &objp->cookie)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int32_t(xdrs, &objp->count)) {
		 return (FALSE);
	 }
	return (TRUE);
}
bool_t
xdr_nlm4_lock(XDR *xdrs, nlm4_lock *objp)
{

	if (!xdr_string(xdrs, &objp->caller_name, MAXNAMELEN))
		return (FALSE);
	if (!xdr_netobj(xdrs, &objp->fh))
		return (FALSE);
	if (!xdr_netobj(xdrs, &objp->oh))
		return (FALSE);
	if (!xdr_u_int32_t(xdrs, &objp->svid))
		return (FALSE);
	if (!xdr_u_int64_t(xdrs, &objp->l_offset))
		return (FALSE);
	if (!xdr_u_int64_t(xdrs, &objp->l_len))
		return (FALSE);
	return (TRUE);
}
Beispiel #18
0
bool_t
xdr_uvfs_direntry(XDR *xdrs, uvfs_direntry *objp)
{

	 register int32_t *buf;

	 if (!xdr_u_int64_t(xdrs, &objp->fileid)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int64_t(xdrs, &objp->cookie)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int32_t(xdrs, &objp->type)) {
		 return (FALSE);
	 }
	 if (!xdr_uvfs_filename(xdrs, &objp->name)) {
		 return (FALSE);
	 }
	return (TRUE);
}
Beispiel #19
0
/*
 * XDR a reply message
 */
bool_t
xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)
{
	enum msg_type *prm_direction;
	enum reply_stat *prp_stat;

	assert(xdrs != NULL);
	assert(rmsg != NULL);

	prm_direction = &rmsg->rm_direction;
	prp_stat = &rmsg->rm_reply.rp_stat;

	if (
	    xdr_u_int32_t(xdrs, &(rmsg->rm_xid)) &&
	    xdr_enum(xdrs, (enum_t *) prm_direction) &&
	    (rmsg->rm_direction == REPLY) )
		return (xdr_union(xdrs, (enum_t *) prp_stat,
		   (caddr_t)(void *)&(rmsg->rm_reply.ru), reply_dscrm,
		   NULL_xdrproc_t));
	return (FALSE);
}
Beispiel #20
0
bool_t
xdr_uvfs_writeargs(XDR *xdrs, uvfs_writeargs *objp)
{

	 register int32_t *buf;

	 if (!xdr_uvfs_fh(xdrs, &objp->file)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int64_t(xdrs, &objp->offset)) {
		 return (FALSE);
	 }
	 if (!xdr_u_int32_t(xdrs, &objp->count)) {
		 return (FALSE);
	 }
	 if (!xdr_stable_how(xdrs, &objp->stable)) {
		 return (FALSE);
	 }
	 if (!xdr_bytes(xdrs, (char **)&objp->data.val, (u_int *)&objp->data.len, ~0)) {
		 return (FALSE);
	 }
	return (TRUE);
}
Beispiel #21
0
bool_t
xdr_rpcbs_rmtcalllist(XDR *xdrs, rpcbs_rmtcalllist *objp)
{
	int32_t *buf;
	struct rpcbs_rmtcalllist **pnext;

	if (xdrs->x_op == XDR_ENCODE) {
	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
	if (buf == NULL) {
		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
			return (FALSE);
		}
		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
			return (FALSE);
		}
		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->success)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->failure)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->indirect)) {
			return (FALSE);
		}
	} else {
		IXDR_PUT_U_INT32(buf, objp->prog);
		IXDR_PUT_U_INT32(buf, objp->vers);
		IXDR_PUT_U_INT32(buf, objp->proc);
		IXDR_PUT_INT32(buf, objp->success);
		IXDR_PUT_INT32(buf, objp->failure);
		IXDR_PUT_INT32(buf, objp->indirect);
	}
	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
		return (FALSE);
	}
	pnext = &objp->next;
	if (!xdr_pointer(xdrs, (char **) pnext,
			sizeof (rpcbs_rmtcalllist),
			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
		return (FALSE);
	}
	return (TRUE);
	} else if (xdrs->x_op == XDR_DECODE) {
	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
	if (buf == NULL) {
		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
			return (FALSE);
		}
		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
			return (FALSE);
		}
		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->success)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->failure)) {
			return (FALSE);
		}
		if (!xdr_int(xdrs, &objp->indirect)) {
			return (FALSE);
		}
	} else {
		objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
		objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
		objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
		objp->success = (int)IXDR_GET_INT32(buf);
		objp->failure = (int)IXDR_GET_INT32(buf);
		objp->indirect = (int)IXDR_GET_INT32(buf);
	}
	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
		return (FALSE);
	}
	if (!xdr_pointer(xdrs, (char **) pnext,
			sizeof (rpcbs_rmtcalllist),
			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
		return (FALSE);
	}
	return (TRUE);
	}
	if (!xdr_u_int32_t(xdrs, &objp->prog)) {
		return (FALSE);
	}
	if (!xdr_u_int32_t(xdrs, &objp->vers)) {
		return (FALSE);
	}
	if (!xdr_u_int32_t(xdrs, &objp->proc)) {
		return (FALSE);
	}
	if (!xdr_int(xdrs, &objp->success)) {
		return (FALSE);
	}
	if (!xdr_int(xdrs, &objp->failure)) {
		return (FALSE);
	}
	if (!xdr_int(xdrs, &objp->indirect)) {
		return (FALSE);
	}
	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
		return (FALSE);
	}
	if (!xdr_pointer(xdrs, (char **) pnext,
			sizeof (rpcbs_rmtcalllist),
			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
		return (FALSE);
	}
	return (TRUE);
}