Exemplo n.º 1
0
bool_t
xdr_array_in (XDR *xdrs, array_in *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, (1 +  100 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->value, 100,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->size))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->value;
					i < 100; ++i) {
					IXDR_PUT_LONG(buf, *genp++);
				}
			}
			IXDR_PUT_LONG(buf, objp->size);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, (1 +  100 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->value, 100,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->size))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->value;
					i < 100; ++i) {
					*genp++ = IXDR_GET_LONG(buf);
				}
			}
			objp->size = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_vector (xdrs, (char *)objp->value, 100,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->size))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 2
0
bool_t
xdr_num (XDR *xdrs, num *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, (1 +  20 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->arr, 20,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->count))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->arr;
					i < 20; ++i) {
					IXDR_PUT_LONG(buf, *genp++);
				}
			}
			IXDR_PUT_LONG(buf, objp->count);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, (1 +  20 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->arr, 20,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->count))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->arr;
					i < 20; ++i) {
					*genp++ = IXDR_GET_LONG(buf);
				}
			}
			objp->count = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_vector (xdrs, (char *)objp->arr, 20,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->count))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 3
0
bool_t
xdr_output (XDR *xdrs, output *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, (1 +  100 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->total))
				 return FALSE;
			 if (!xdr_vector (xdrs, (char *)objp->portno, 100,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
		} else {
			IXDR_PUT_LONG(buf, objp->total);
			{
				register int *genp;

				for (i = 0, genp = objp->portno;
					i < 100; ++i) {
					IXDR_PUT_LONG(buf, *genp++);
				}
			}
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, (1 +  100 )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->total))
				 return FALSE;
			 if (!xdr_vector (xdrs, (char *)objp->portno, 100,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
		} else {
			objp->total = IXDR_GET_LONG(buf);
			{
				register int *genp;

				for (i = 0, genp = objp->portno;
					i < 100; ++i) {
					*genp++ = IXDR_GET_LONG(buf);
				}
			}
		}
	 return TRUE;
	}

	 if (!xdr_int (xdrs, &objp->total))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->portno, 100,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 4
0
bool_t
xdr_gf1_cli_probe_rsp (XDR *xdrs, gf1_cli_probe_rsp *objp)
{
    register int32_t *buf;


    if (xdrs->x_op == XDR_ENCODE) {
        buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
        if (buf == NULL) {
            if (!xdr_int (xdrs, &objp->op_ret))
                return FALSE;
            if (!xdr_int (xdrs, &objp->op_errno))
                return FALSE;
            if (!xdr_int (xdrs, &objp->port))
                return FALSE;

        } else {
            IXDR_PUT_LONG(buf, objp->op_ret);
            IXDR_PUT_LONG(buf, objp->op_errno);
            IXDR_PUT_LONG(buf, objp->port);
        }
        if (!xdr_string (xdrs, &objp->hostname, ~0))
            return FALSE;
        return TRUE;
    } else if (xdrs->x_op == XDR_DECODE) {
        buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
        if (buf == NULL) {
            if (!xdr_int (xdrs, &objp->op_ret))
                return FALSE;
            if (!xdr_int (xdrs, &objp->op_errno))
                return FALSE;
            if (!xdr_int (xdrs, &objp->port))
                return FALSE;

        } else {
            objp->op_ret = IXDR_GET_LONG(buf);
            objp->op_errno = IXDR_GET_LONG(buf);
            objp->port = IXDR_GET_LONG(buf);
        }
        if (!xdr_string (xdrs, &objp->hostname, ~0))
            return FALSE;
        return TRUE;
    }

    if (!xdr_int (xdrs, &objp->op_ret))
        return FALSE;
    if (!xdr_int (xdrs, &objp->op_errno))
        return FALSE;
    if (!xdr_int (xdrs, &objp->port))
        return FALSE;
    if (!xdr_string (xdrs, &objp->hostname, ~0))
        return FALSE;
    return TRUE;
}
Exemplo n.º 5
0
bool_t
xdr_remote_client_query_tag_outcome (XDR *xdrs, remote_client_query_tag_outcome *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_bool (xdrs, &objp->valid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->state))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->cmd_exit_code))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->cmd_exit_signal))
				 return FALSE;
		} else {
			IXDR_PUT_BOOL(buf, objp->valid);
			IXDR_PUT_U_LONG(buf, objp->state);
			IXDR_PUT_LONG(buf, objp->cmd_exit_code);
			IXDR_PUT_LONG(buf, objp->cmd_exit_signal);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_bool (xdrs, &objp->valid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->state))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->cmd_exit_code))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->cmd_exit_signal))
				 return FALSE;
		} else {
			objp->valid = IXDR_GET_BOOL(buf);
			objp->state = IXDR_GET_U_LONG(buf);
			objp->cmd_exit_code = IXDR_GET_LONG(buf);
			objp->cmd_exit_signal = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_bool (xdrs, &objp->valid))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->state))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->cmd_exit_code))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->cmd_exit_signal))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 6
0
bool_t
xdr_klm_holder (XDR *xdrs, klm_holder *objp)
{
    register int32_t *buf;


    if (xdrs->x_op == XDR_ENCODE) {
        buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);
        if (buf == NULL) {
            if (!xdr_bool (xdrs, &objp->exclusive))
                return FALSE;
            if (!xdr_int (xdrs, &objp->svid))
                return FALSE;
            if (!xdr_u_int (xdrs, &objp->l_offset))
                return FALSE;
            if (!xdr_u_int (xdrs, &objp->l_len))
                return FALSE;
        } else {
            IXDR_PUT_BOOL(buf, objp->exclusive);
            IXDR_PUT_LONG(buf, objp->svid);
            IXDR_PUT_U_LONG(buf, objp->l_offset);
            IXDR_PUT_U_LONG(buf, objp->l_len);
        }
        return TRUE;
    } else if (xdrs->x_op == XDR_DECODE) {
        buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);
        if (buf == NULL) {
            if (!xdr_bool (xdrs, &objp->exclusive))
                return FALSE;
            if (!xdr_int (xdrs, &objp->svid))
                return FALSE;
            if (!xdr_u_int (xdrs, &objp->l_offset))
                return FALSE;
            if (!xdr_u_int (xdrs, &objp->l_len))
                return FALSE;
        } else {
            objp->exclusive = IXDR_GET_BOOL(buf);
            objp->svid = IXDR_GET_LONG(buf);
            objp->l_offset = IXDR_GET_U_LONG(buf);
            objp->l_len = IXDR_GET_U_LONG(buf);
        }
        return TRUE;
    }

    if (!xdr_bool (xdrs, &objp->exclusive))
        return FALSE;
    if (!xdr_int (xdrs, &objp->svid))
        return FALSE;
    if (!xdr_u_int (xdrs, &objp->l_offset))
        return FALSE;
    if (!xdr_u_int (xdrs, &objp->l_len))
        return FALSE;
    return TRUE;
}
Exemplo n.º 7
0
static bool_t
svcauth_gss_validate(struct svc_req *rqst, struct svc_rpc_gss_data *gd, struct rpc_msg *msg)
{
	struct opaque_auth	*oa;
	gss_buffer_desc		 rpcbuf, checksum;
	OM_uint32		 maj_stat, min_stat, qop_state;
	u_char			 rpchdr[128];
	int32_t			*buf;

	log_debug("in svcauth_gss_validate()");

	memset(rpchdr, 0, sizeof(rpchdr));

	/* XXX - Reconstruct RPC header for signing (from xdr_callmsg). */
	oa = &msg->rm_call.cb_cred;
	if (oa->oa_length > MAX_AUTH_BYTES)
		return (FALSE);

	/* 8 XDR units from the IXDR macro calls. */
	if (sizeof(rpchdr) < (8 * BYTES_PER_XDR_UNIT +
			      RNDUP(oa->oa_length)))
		return (FALSE);

	buf = (int32_t *)(void *)rpchdr;
	IXDR_PUT_LONG(buf, msg->rm_xid);
	IXDR_PUT_ENUM(buf, msg->rm_direction);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_rpcvers);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_prog);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_vers);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_proc);
	IXDR_PUT_ENUM(buf, oa->oa_flavor);
	IXDR_PUT_LONG(buf, oa->oa_length);
	if (oa->oa_length) {
		memcpy((caddr_t)buf, oa->oa_base, oa->oa_length);
		buf += RNDUP(oa->oa_length) / sizeof(int32_t);
	}
	rpcbuf.value = rpchdr;
	rpcbuf.length = (u_char *)buf - rpchdr;

	checksum.value = msg->rm_call.cb_verf.oa_base;
	checksum.length = msg->rm_call.cb_verf.oa_length;

	maj_stat = gss_verify_mic(&min_stat, gd->ctx, &rpcbuf, &checksum,
				  &qop_state);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_verify_mic", maj_stat, min_stat);
		if (log_badverf != NULL)
			(*log_badverf)(gd->client_name,
			       svcauth_gss_name,
			       rqst, msg, log_badverf_data);
		return (FALSE);
	}
	return (TRUE);
}
Exemplo n.º 8
0
static int
svcauth_gss_validate(struct svc_req *req,
		     struct svc_rpc_gss_data *gd,
		     struct rpc_msg *msg)
{
	struct opaque_auth *oa;
	gss_buffer_desc rpcbuf, checksum;
	OM_uint32 maj_stat, min_stat, qop_state;
	u_char rpchdr[RPCHDR_LEN];
	int32_t *buf;

	memset(rpchdr, 0, RPCHDR_LEN);

	/* XXX - Reconstruct RPC header for signing (from xdr_callmsg). */
	oa = &msg->rm_call.cb_cred;
	if (oa->oa_length > MAX_AUTH_BYTES)
		return GSS_S_CALL_BAD_STRUCTURE;
	/* XXX since MAX_AUTH_BYTES is 400, the following code trivially
	 * overruns (up to 431 per Coverity, but compare RPCHDR_LEN with
	 * what is marshalled below). */

	buf = (int32_t *) rpchdr;
	IXDR_PUT_LONG(buf, msg->rm_xid);
	IXDR_PUT_ENUM(buf, msg->rm_direction);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_rpcvers);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_prog);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_vers);
	IXDR_PUT_LONG(buf, msg->rm_call.cb_proc);
	IXDR_PUT_ENUM(buf, oa->oa_flavor);
	IXDR_PUT_LONG(buf, oa->oa_length);
	if (oa->oa_length) {
		memcpy((caddr_t) buf, oa->oa_base, oa->oa_length);
		buf += RNDUP(oa->oa_length) / sizeof(int32_t);
	}
	rpcbuf.value = rpchdr;
	rpcbuf.length = (u_char *) buf - rpchdr;

	checksum.value = msg->rm_call.cb_verf.oa_base;
	checksum.length = msg->rm_call.cb_verf.oa_length;

	maj_stat =
	    gss_verify_mic(&min_stat, gd->ctx, &rpcbuf, &checksum, &qop_state);

	if (maj_stat != GSS_S_COMPLETE) {
		__warnx(TIRPC_DEBUG_FLAG_AUTH, "%s: %d %d", __func__, maj_stat,
			min_stat);
		return (maj_stat);
	}
	return GSS_S_COMPLETE;
}
Exemplo n.º 9
0
bool_t
xdr_ppathcnf (XDR *xdrs, ppathcnf *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->pc_link_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_max_canon))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_max_input))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_name_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_path_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_pipe_buf))
				 return FALSE;

		} else {
		IXDR_PUT_LONG(buf, objp->pc_link_max);
		IXDR_PUT_SHORT(buf, objp->pc_max_canon);
		IXDR_PUT_SHORT(buf, objp->pc_max_input);
		IXDR_PUT_SHORT(buf, objp->pc_name_max);
		IXDR_PUT_SHORT(buf, objp->pc_path_max);
		IXDR_PUT_SHORT(buf, objp->pc_pipe_buf);
		}
		 if (!xdr_u_char (xdrs, &objp->pc_vdisable))
			 return FALSE;
		 if (!xdr_char (xdrs, &objp->pc_xxx))
			 return FALSE;
		buf = XDR_INLINE (xdrs, ( 2 ) * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->pc_mask, 2,
				sizeof (short), (xdrproc_t) xdr_short))
				 return FALSE;
		} else {
			{
				register short *genp;

				for (i = 0, genp = objp->pc_mask;
					i < 2; ++i) {
					IXDR_PUT_SHORT(buf, *genp++);
				}
			}
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->pc_link_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_max_canon))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_max_input))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_name_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_path_max))
				 return FALSE;
			 if (!xdr_short (xdrs, &objp->pc_pipe_buf))
				 return FALSE;

		} else {
		objp->pc_link_max = IXDR_GET_LONG(buf);
		objp->pc_max_canon = IXDR_GET_SHORT(buf);
		objp->pc_max_input = IXDR_GET_SHORT(buf);
		objp->pc_name_max = IXDR_GET_SHORT(buf);
		objp->pc_path_max = IXDR_GET_SHORT(buf);
		objp->pc_pipe_buf = IXDR_GET_SHORT(buf);
		}
		 if (!xdr_u_char (xdrs, &objp->pc_vdisable))
			 return FALSE;
		 if (!xdr_char (xdrs, &objp->pc_xxx))
			 return FALSE;
		buf = XDR_INLINE (xdrs, ( 2 ) * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->pc_mask, 2,
				sizeof (short), (xdrproc_t) xdr_short))
				 return FALSE;
		} else {
			{
				register short *genp;

				for (i = 0, genp = objp->pc_mask;
					i < 2; ++i) {
					*genp++ = IXDR_GET_SHORT(buf);
				}
			}
		}
	 return TRUE;
	}

	 if (!xdr_int (xdrs, &objp->pc_link_max))
		 return FALSE;
	 if (!xdr_short (xdrs, &objp->pc_max_canon))
		 return FALSE;
	 if (!xdr_short (xdrs, &objp->pc_max_input))
		 return FALSE;
	 if (!xdr_short (xdrs, &objp->pc_name_max))
		 return FALSE;
	 if (!xdr_short (xdrs, &objp->pc_path_max))
		 return FALSE;
	 if (!xdr_short (xdrs, &objp->pc_pipe_buf))
		 return FALSE;
	 if (!xdr_u_char (xdrs, &objp->pc_vdisable))
		 return FALSE;
	 if (!xdr_char (xdrs, &objp->pc_xxx))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->pc_mask, 2,
		sizeof (short), (xdrproc_t) xdr_short))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 10
0
bool_t
xdr_rquota (XDR *xdrs, rquota *objp)
{
	register int32_t *buf ATTR_UNUSED;


	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, 10 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->rq_bsize))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->rq_active))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_bhardlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_curblocks))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_fhardlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_curfiles))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_btimeleft))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_ftimeleft))
				 return FALSE;
		} else {
			(void)IXDR_PUT_LONG(buf, objp->rq_bsize);
			(void)IXDR_PUT_BOOL(buf, objp->rq_active);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_bhardlimit);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_bsoftlimit);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_curblocks);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_fhardlimit);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_fsoftlimit);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_curfiles);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_btimeleft);
			(void)IXDR_PUT_U_LONG(buf, objp->rq_ftimeleft);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, 10 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->rq_bsize))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->rq_active))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_bhardlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_curblocks))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_fhardlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_curfiles))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_btimeleft))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->rq_ftimeleft))
				 return FALSE;
		} else {
			objp->rq_bsize = IXDR_GET_LONG(buf);
			objp->rq_active = IXDR_GET_BOOL(buf);
			objp->rq_bhardlimit = IXDR_GET_U_LONG(buf);
			objp->rq_bsoftlimit = IXDR_GET_U_LONG(buf);
			objp->rq_curblocks = IXDR_GET_U_LONG(buf);
			objp->rq_fhardlimit = IXDR_GET_U_LONG(buf);
			objp->rq_fsoftlimit = IXDR_GET_U_LONG(buf);
			objp->rq_curfiles = IXDR_GET_U_LONG(buf);
			objp->rq_btimeleft = IXDR_GET_U_LONG(buf);
			objp->rq_ftimeleft = IXDR_GET_U_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_int (xdrs, &objp->rq_bsize))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->rq_active))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_bhardlimit))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_bsoftlimit))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_curblocks))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_fhardlimit))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_fsoftlimit))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_curfiles))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_btimeleft))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->rq_ftimeleft))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 11
0
bool_t
xdr_remote_client_update_workqueue_status_args (XDR *xdrs, remote_client_update_workqueue_status_args *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
			 return FALSE;
		 if (!xdr_bool (xdrs, &objp->update_state))
			 return FALSE;
		 if (!xdr_command_state (xdrs, &objp->state))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_bool (xdrs, &objp->update_tag))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tag))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->update_pass))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->pass))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->update_end))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->msglevel))
				 return FALSE;
		} else {
			IXDR_PUT_BOOL(buf, objp->update_tag);
			IXDR_PUT_LONG(buf, objp->tag);
			IXDR_PUT_BOOL(buf, objp->update_pass);
			IXDR_PUT_LONG(buf, objp->pass);
			IXDR_PUT_BOOL(buf, objp->update_end);
			IXDR_PUT_LONG(buf, objp->msglevel);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
			 return FALSE;
		 if (!xdr_bool (xdrs, &objp->update_state))
			 return FALSE;
		 if (!xdr_command_state (xdrs, &objp->state))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_bool (xdrs, &objp->update_tag))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tag))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->update_pass))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->pass))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->update_end))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->msglevel))
				 return FALSE;
		} else {
			objp->update_tag = IXDR_GET_BOOL(buf);
			objp->tag = IXDR_GET_LONG(buf);
			objp->update_pass = IXDR_GET_BOOL(buf);
			objp->pass = IXDR_GET_LONG(buf);
			objp->update_end = IXDR_GET_BOOL(buf);
			objp->msglevel = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->update_state))
		 return FALSE;
	 if (!xdr_command_state (xdrs, &objp->state))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->update_tag))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tag))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->update_pass))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->pass))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->update_end))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->msglevel))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 12
0
bool_t
xdr_stats (XDR *xdrs, stats *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, (10 +  CPUSTATES  + DK_NDRIVE )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->cp_time, CPUSTATES,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_vector (xdrs, (char *)objp->dk_xfer, DK_NDRIVE,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pgpgin))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pgpgout))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pswpin))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pswpout))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_intr))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_ipackets))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_ierrors))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_oerrors))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_collisions))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_opackets))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->cp_time;
					i < CPUSTATES; ++i) {
					IXDR_PUT_LONG(buf, *genp++);
				}
			}
			{
				register int *genp;

				for (i = 0, genp = objp->dk_xfer;
					i < DK_NDRIVE; ++i) {
					IXDR_PUT_LONG(buf, *genp++);
				}
			}
			IXDR_PUT_U_LONG(buf, objp->v_pgpgin);
			IXDR_PUT_U_LONG(buf, objp->v_pgpgout);
			IXDR_PUT_U_LONG(buf, objp->v_pswpin);
			IXDR_PUT_U_LONG(buf, objp->v_pswpout);
			IXDR_PUT_U_LONG(buf, objp->v_intr);
			IXDR_PUT_LONG(buf, objp->if_ipackets);
			IXDR_PUT_LONG(buf, objp->if_ierrors);
			IXDR_PUT_LONG(buf, objp->if_oerrors);
			IXDR_PUT_LONG(buf, objp->if_collisions);
			IXDR_PUT_LONG(buf, objp->if_opackets);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, (10 +  CPUSTATES  + DK_NDRIVE )* BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_vector (xdrs, (char *)objp->cp_time, CPUSTATES,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_vector (xdrs, (char *)objp->dk_xfer, DK_NDRIVE,
				sizeof (int), (xdrproc_t) xdr_int))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pgpgin))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pgpgout))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pswpin))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_pswpout))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->v_intr))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_ipackets))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_ierrors))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_oerrors))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_collisions))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->if_opackets))
				 return FALSE;
		} else {
			{
				register int *genp;

				for (i = 0, genp = objp->cp_time;
					i < CPUSTATES; ++i) {
					*genp++ = IXDR_GET_LONG(buf);
				}
			}
			{
				register int *genp;

				for (i = 0, genp = objp->dk_xfer;
					i < DK_NDRIVE; ++i) {
					*genp++ = IXDR_GET_LONG(buf);
				}
			}
			objp->v_pgpgin = IXDR_GET_U_LONG(buf);
			objp->v_pgpgout = IXDR_GET_U_LONG(buf);
			objp->v_pswpin = IXDR_GET_U_LONG(buf);
			objp->v_pswpout = IXDR_GET_U_LONG(buf);
			objp->v_intr = IXDR_GET_U_LONG(buf);
			objp->if_ipackets = IXDR_GET_LONG(buf);
			objp->if_ierrors = IXDR_GET_LONG(buf);
			objp->if_oerrors = IXDR_GET_LONG(buf);
			objp->if_collisions = IXDR_GET_LONG(buf);
			objp->if_opackets = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_vector (xdrs, (char *)objp->cp_time, CPUSTATES,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->dk_xfer, DK_NDRIVE,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->v_pgpgin))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->v_pgpgout))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->v_pswpin))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->v_pswpout))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->v_intr))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->if_ipackets))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->if_ierrors))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->if_oerrors))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->if_collisions))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->if_opackets))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 13
0
/*
 * XDR a call message
 */
bool_t
xdr_callmsg (XDR *xdrs, struct rpc_msg *cmsg)
{
  int32_t *buf;
  struct opaque_auth *oa;

  if (xdrs->x_op == XDR_ENCODE)
    {
      if (cmsg->rm_call.cb_cred.oa_length > MAX_AUTH_BYTES)
	{
	  return (FALSE);
	}
      if (cmsg->rm_call.cb_verf.oa_length > MAX_AUTH_BYTES)
	{
	  return (FALSE);
	}
      buf = XDR_INLINE (xdrs, 8 * BYTES_PER_XDR_UNIT
			+ RNDUP (cmsg->rm_call.cb_cred.oa_length)
			+ 2 * BYTES_PER_XDR_UNIT
			+ RNDUP (cmsg->rm_call.cb_verf.oa_length));
      if (buf != NULL)
	{
	  (void) IXDR_PUT_LONG (buf, cmsg->rm_xid);
	  (void) IXDR_PUT_ENUM (buf, cmsg->rm_direction);
	  if (cmsg->rm_direction != CALL)
	    return FALSE;
	  (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_rpcvers);
	  if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION)
	    return FALSE;
	  (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_prog);
	  (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_vers);
	  (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_proc);
	  oa = &cmsg->rm_call.cb_cred;
	  (void) IXDR_PUT_ENUM (buf, oa->oa_flavor);
	  (void) IXDR_PUT_INT32 (buf, oa->oa_length);
	  if (oa->oa_length)
	    {
	      memcpy ((caddr_t) buf, oa->oa_base, oa->oa_length);
	      buf = (int32_t *) ((char *) buf + RNDUP (oa->oa_length));
	    }
	  oa = &cmsg->rm_call.cb_verf;
	  (void) IXDR_PUT_ENUM (buf, oa->oa_flavor);
	  (void) IXDR_PUT_INT32 (buf, oa->oa_length);
	  if (oa->oa_length)
	    {
	      memcpy ((caddr_t) buf, oa->oa_base, oa->oa_length);
	      /* no real need....
	         buf = (long *) ((char *) buf + RNDUP(oa->oa_length));
	       */
	    }
	  return TRUE;
	}
    }
  if (xdrs->x_op == XDR_DECODE)
    {
      buf = XDR_INLINE (xdrs, 8 * BYTES_PER_XDR_UNIT);
      if (buf != NULL)
	{
	  cmsg->rm_xid = IXDR_GET_LONG (buf);
	  cmsg->rm_direction = IXDR_GET_ENUM (buf, enum msg_type);
	  if (cmsg->rm_direction != CALL)
	    {
	      return FALSE;
	    }
	  cmsg->rm_call.cb_rpcvers = IXDR_GET_LONG (buf);
	  if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION)
	    {
	      return FALSE;
	    }
	  cmsg->rm_call.cb_prog = IXDR_GET_LONG (buf);
	  cmsg->rm_call.cb_vers = IXDR_GET_LONG (buf);
	  cmsg->rm_call.cb_proc = IXDR_GET_LONG (buf);
	  oa = &cmsg->rm_call.cb_cred;
	  oa->oa_flavor = IXDR_GET_ENUM (buf, enum_t);
	  oa->oa_length = IXDR_GET_INT32 (buf);
	  if (oa->oa_length)
	    {
	      if (oa->oa_length > MAX_AUTH_BYTES)
		return FALSE;
	      if (oa->oa_base == NULL)
		{
		  oa->oa_base = (caddr_t)
		    mem_alloc (oa->oa_length);
		}
	      buf = XDR_INLINE (xdrs, RNDUP (oa->oa_length));
	      if (buf == NULL)
		{
		  if (INTUSE(xdr_opaque) (xdrs, oa->oa_base,
					  oa->oa_length) == FALSE)
		    return FALSE;
		}
	      else
		{
		  memcpy (oa->oa_base, (caddr_t) buf, oa->oa_length);
		  /* no real need....
		     buf = (long *) ((char *) buf
		     + RNDUP(oa->oa_length));
		   */
		}
	    }
	  oa = &cmsg->rm_call.cb_verf;
	  buf = XDR_INLINE (xdrs, 2 * BYTES_PER_XDR_UNIT);
	  if (buf == NULL)
	    {
	      if (INTUSE(xdr_enum) (xdrs, &oa->oa_flavor) == FALSE ||
		  INTUSE(xdr_u_int) (xdrs, &oa->oa_length) == FALSE)
		{
		  return FALSE;
		}
	    }
	  else
	    {
	      oa->oa_flavor = IXDR_GET_ENUM (buf, enum_t);
	      oa->oa_length = IXDR_GET_INT32 (buf);
	    }
	  if (oa->oa_length)
	    {
	      if (oa->oa_length > MAX_AUTH_BYTES)
		return FALSE;
	      if (oa->oa_base == NULL)
		{
		  oa->oa_base = (caddr_t)
		    mem_alloc (oa->oa_length);
		}
	      buf = XDR_INLINE (xdrs, RNDUP (oa->oa_length));
	      if (buf == NULL)
		{
		  if (INTUSE(xdr_opaque) (xdrs, oa->oa_base,
					  oa->oa_length) == FALSE)
		    return FALSE;
		}
	      else
		{
		  memcpy (oa->oa_base, (caddr_t) buf, oa->oa_length);
		  /* no real need...
		     buf = (long *) ((char *) buf
		     + RNDUP(oa->oa_length));
		   */
		}
	    }
	  return TRUE;
	}
Exemplo n.º 14
0
bool_t
xdr_chronos_in (XDR *xdrs, chronos_in *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, 9 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->tm_sec))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_min))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_hour))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_mday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_mon))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_year))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_wday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_yday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_isdst))
				 return FALSE;
		} else {
			IXDR_PUT_LONG(buf, objp->tm_sec);
			IXDR_PUT_LONG(buf, objp->tm_min);
			IXDR_PUT_LONG(buf, objp->tm_hour);
			IXDR_PUT_LONG(buf, objp->tm_mday);
			IXDR_PUT_LONG(buf, objp->tm_mon);
			IXDR_PUT_LONG(buf, objp->tm_year);
			IXDR_PUT_LONG(buf, objp->tm_wday);
			IXDR_PUT_LONG(buf, objp->tm_yday);
			IXDR_PUT_LONG(buf, objp->tm_isdst);
		}
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, 9 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->tm_sec))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_min))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_hour))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_mday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_mon))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_year))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_wday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_yday))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->tm_isdst))
				 return FALSE;
		} else {
			objp->tm_sec = IXDR_GET_LONG(buf);
			objp->tm_min = IXDR_GET_LONG(buf);
			objp->tm_hour = IXDR_GET_LONG(buf);
			objp->tm_mday = IXDR_GET_LONG(buf);
			objp->tm_mon = IXDR_GET_LONG(buf);
			objp->tm_year = IXDR_GET_LONG(buf);
			objp->tm_wday = IXDR_GET_LONG(buf);
			objp->tm_yday = IXDR_GET_LONG(buf);
			objp->tm_isdst = IXDR_GET_LONG(buf);
		}
	 return TRUE;
	}

	 if (!xdr_int (xdrs, &objp->tm_sec))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_min))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_hour))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_mday))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_mon))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_year))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_wday))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_yday))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->tm_isdst))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 15
0
bool_t
xdr_gd1_mgmt_commit_op_rsp (XDR *xdrs, gd1_mgmt_commit_op_rsp *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		 if (!xdr_vector (xdrs, (char *)objp->uuid, 16,
			sizeof (u_char), (xdrproc_t) xdr_u_char))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->op))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->op_ret))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->op_errno))
				 return FALSE;

		} else {
		IXDR_PUT_LONG(buf, objp->op);
		IXDR_PUT_LONG(buf, objp->op_ret);
		IXDR_PUT_LONG(buf, objp->op_errno);
		}
		 if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->op_errstr, ~0))
			 return FALSE;
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		 if (!xdr_vector (xdrs, (char *)objp->uuid, 16,
			sizeof (u_char), (xdrproc_t) xdr_u_char))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->op))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->op_ret))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->op_errno))
				 return FALSE;

		} else {
		objp->op = IXDR_GET_LONG(buf);
		objp->op_ret = IXDR_GET_LONG(buf);
		objp->op_errno = IXDR_GET_LONG(buf);
		}
		 if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->op_errstr, ~0))
			 return FALSE;
	 return TRUE;
	}

	 if (!xdr_vector (xdrs, (char *)objp->uuid, 16,
		sizeof (u_char), (xdrproc_t) xdr_u_char))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->op))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->op_ret))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->op_errno))
		 return FALSE;
	 if (!xdr_bytes (xdrs, (char **)&objp->dict.dict_val, (u_int *) &objp->dict.dict_len, ~0))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->op_errstr, ~0))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 16
0
bool_t
xdr_cmd_log_entry (XDR *xdrs, cmd_log_entry *objp)
{
	register int32_t *buf;

	int i;

	if (xdrs->x_op == XDR_ENCODE) {
		 if (!xdr_u_int (xdrs, &objp->tag))
			 return FALSE;
		 if (!xdr_u_int (xdrs, &objp->pid))
			 return FALSE;
		 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_u_int (xdrs, &objp->state))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->status))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->start_time))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->end_time))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->timeout_at_time))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->fail_on_timeout))
				 return FALSE;

		} else {
		IXDR_PUT_U_LONG(buf, objp->state);
		IXDR_PUT_LONG(buf, objp->status);
		IXDR_PUT_U_LONG(buf, objp->start_time);
		IXDR_PUT_U_LONG(buf, objp->end_time);
		IXDR_PUT_U_LONG(buf, objp->timeout_at_time);
		IXDR_PUT_BOOL(buf, objp->fail_on_timeout);
		}
		 if (!xdr_vector (xdrs, (char *)objp->cmdstring, MAX_CMD_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_vector (xdrs, (char *)objp->identstring, MAX_IDENT_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_vector (xdrs, (char *)objp->agent_log_pathname, MAX_PATHNAME_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (cmd_log_entry), (xdrproc_t) xdr_cmd_log_entry))
			 return FALSE;
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		 if (!xdr_u_int (xdrs, &objp->tag))
			 return FALSE;
		 if (!xdr_u_int (xdrs, &objp->pid))
			 return FALSE;
		 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_u_int (xdrs, &objp->state))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->status))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->start_time))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->end_time))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->timeout_at_time))
				 return FALSE;
			 if (!xdr_bool (xdrs, &objp->fail_on_timeout))
				 return FALSE;

		} else {
		objp->state = IXDR_GET_U_LONG(buf);
		objp->status = IXDR_GET_LONG(buf);
		objp->start_time = IXDR_GET_U_LONG(buf);
		objp->end_time = IXDR_GET_U_LONG(buf);
		objp->timeout_at_time = IXDR_GET_U_LONG(buf);
		objp->fail_on_timeout = IXDR_GET_BOOL(buf);
		}
		 if (!xdr_vector (xdrs, (char *)objp->cmdstring, MAX_CMD_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_vector (xdrs, (char *)objp->identstring, MAX_IDENT_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_vector (xdrs, (char *)objp->agent_log_pathname, MAX_PATHNAME_LEN,
			sizeof (char), (xdrproc_t) xdr_char))
			 return FALSE;
		 if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (cmd_log_entry), (xdrproc_t) xdr_cmd_log_entry))
			 return FALSE;
	 return TRUE;
	}

	 if (!xdr_u_int (xdrs, &objp->tag))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->pid))
		 return FALSE;
	 if (!xdr_Iu32 (xdrs, &objp->workqueueID))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->state))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->status))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->start_time))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->end_time))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->timeout_at_time))
		 return FALSE;
	 if (!xdr_bool (xdrs, &objp->fail_on_timeout))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->cmdstring, MAX_CMD_LEN,
		sizeof (char), (xdrproc_t) xdr_char))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->identstring, MAX_IDENT_LEN,
		sizeof (char), (xdrproc_t) xdr_char))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->agent_log_pathname, MAX_PATHNAME_LEN,
		sizeof (char), (xdrproc_t) xdr_char))
		 return FALSE;
	 if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (cmd_log_entry), (xdrproc_t) xdr_cmd_log_entry))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 17
0
bool_t
xdr_remote_client_start_scenario_outcome (XDR *xdrs, remote_client_start_scenario_outcome *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		 if (!xdr_remote_client_start_scenario_error_types (xdrs, &objp->valid_start_scenario))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->testerID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->scenarioID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->scenarioresultID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->testlevelID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->teststandID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->teststandrecordID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->testlevelrecordID))
				 return FALSE;

		} else {
		IXDR_PUT_LONG(buf, objp->testerID);
		IXDR_PUT_LONG(buf, objp->scenarioID);
		IXDR_PUT_LONG(buf, objp->scenarioresultID);
		IXDR_PUT_LONG(buf, objp->testlevelID);
		IXDR_PUT_LONG(buf, objp->teststandID);
		IXDR_PUT_LONG(buf, objp->teststandrecordID);
		IXDR_PUT_LONG(buf, objp->testlevelrecordID);
		}
		 if (!xdr_string (xdrs, &objp->errmsg, 256))
			 return FALSE;
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		 if (!xdr_remote_client_start_scenario_error_types (xdrs, &objp->valid_start_scenario))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->testerID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->scenarioID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->scenarioresultID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->testlevelID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->teststandID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->teststandrecordID))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->testlevelrecordID))
				 return FALSE;

		} else {
		objp->testerID = IXDR_GET_LONG(buf);
		objp->scenarioID = IXDR_GET_LONG(buf);
		objp->scenarioresultID = IXDR_GET_LONG(buf);
		objp->testlevelID = IXDR_GET_LONG(buf);
		objp->teststandID = IXDR_GET_LONG(buf);
		objp->teststandrecordID = IXDR_GET_LONG(buf);
		objp->testlevelrecordID = IXDR_GET_LONG(buf);
		}
		 if (!xdr_string (xdrs, &objp->errmsg, 256))
			 return FALSE;
	 return TRUE;
	}

	 if (!xdr_remote_client_start_scenario_error_types (xdrs, &objp->valid_start_scenario))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->testerID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->scenarioID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->scenarioresultID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->testlevelID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->teststandID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->teststandrecordID))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->testlevelrecordID))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->errmsg, 256))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 18
0
bool_t
xdr_auth_glusterfs_parms_v2 (XDR *xdrs, auth_glusterfs_parms_v2 *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->pid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->uid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->gid))
				 return FALSE;

		} else {
		IXDR_PUT_LONG(buf, objp->pid);
		IXDR_PUT_U_LONG(buf, objp->uid);
		IXDR_PUT_U_LONG(buf, objp->gid);
		}
		 if (!xdr_array (xdrs, (char **)&objp->groups.groups_val, (u_int *) &objp->groups.groups_len, ~0,
			sizeof (u_int), (xdrproc_t) xdr_u_int))
			 return FALSE;
		 if (!xdr_bytes (xdrs, (char **)&objp->lk_owner.lk_owner_val, (u_int *) &objp->lk_owner.lk_owner_len, ~0))
			 return FALSE;
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->pid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->uid))
				 return FALSE;
			 if (!xdr_u_int (xdrs, &objp->gid))
				 return FALSE;

		} else {
		objp->pid = IXDR_GET_LONG(buf);
		objp->uid = IXDR_GET_U_LONG(buf);
		objp->gid = IXDR_GET_U_LONG(buf);
		}
		 if (!xdr_array (xdrs, (char **)&objp->groups.groups_val, (u_int *) &objp->groups.groups_len, ~0,
			sizeof (u_int), (xdrproc_t) xdr_u_int))
			 return FALSE;
		 if (!xdr_bytes (xdrs, (char **)&objp->lk_owner.lk_owner_val, (u_int *) &objp->lk_owner.lk_owner_len, ~0))
			 return FALSE;
	 return TRUE;
	}

	 if (!xdr_int (xdrs, &objp->pid))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->uid))
		 return FALSE;
	 if (!xdr_u_int (xdrs, &objp->gid))
		 return FALSE;
	 if (!xdr_array (xdrs, (char **)&objp->groups.groups_val, (u_int *) &objp->groups.groups_len, ~0,
		sizeof (u_int), (xdrproc_t) xdr_u_int))
		 return FALSE;
	 if (!xdr_bytes (xdrs, (char **)&objp->lk_owner.lk_owner_val, (u_int *) &objp->lk_owner.lk_owner_len, ~0))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 19
0
bool_t
xdr_remote_client_query_scenarioresult_outcome (XDR *xdrs, remote_client_query_scenarioresult_outcome *objp)
{
	register int32_t *buf;


	if (xdrs->x_op == XDR_ENCODE) {
		 if (!xdr_bool (xdrs, &objp->valid))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->project, DAF_PROJECT_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->phase, DAF_PHASE_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->scenarioname, DAF_SCENARIO_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->jobname, DAF_JOBNAME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->state, DAF_STATE_LEN))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->actionsinscenario))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionsattempted))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionscompleted))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionspassed))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionsfailed))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->pass))
				 return FALSE;

		} else {
		IXDR_PUT_LONG(buf, objp->actionsinscenario);
		IXDR_PUT_LONG(buf, objp->actionsattempted);
		IXDR_PUT_LONG(buf, objp->actionscompleted);
		IXDR_PUT_LONG(buf, objp->actionspassed);
		IXDR_PUT_LONG(buf, objp->actionsfailed);
		IXDR_PUT_LONG(buf, objp->pass);
		}
		 if (!xdr_string (xdrs, &objp->start, DAF_DATETIME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->end, DAF_DATETIME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->teststand, DAF_TESTSTAND_LEN))
			 return FALSE;
		 if (!xdr_int (xdrs, &objp->teststandrecordID))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->testlevel, DAF_LEVEL_LEN))
			 return FALSE;
		 if (!xdr_int (xdrs, &objp->testlevelrecordID))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->tester, DAF_TESTER_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->loglocation, DAF_LOGLOCATION_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->scenariologfilename, DAF_FILENAME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->comments, DAF_COMMENTS_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->errmsg, 256))
			 return FALSE;
		return TRUE;
	} else if (xdrs->x_op == XDR_DECODE) {
		 if (!xdr_bool (xdrs, &objp->valid))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->project, DAF_PROJECT_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->phase, DAF_PHASE_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->scenarioname, DAF_SCENARIO_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->jobname, DAF_JOBNAME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->state, DAF_STATE_LEN))
			 return FALSE;
		buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
		if (buf == NULL) {
			 if (!xdr_int (xdrs, &objp->actionsinscenario))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionsattempted))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionscompleted))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionspassed))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->actionsfailed))
				 return FALSE;
			 if (!xdr_int (xdrs, &objp->pass))
				 return FALSE;

		} else {
		objp->actionsinscenario = IXDR_GET_LONG(buf);
		objp->actionsattempted = IXDR_GET_LONG(buf);
		objp->actionscompleted = IXDR_GET_LONG(buf);
		objp->actionspassed = IXDR_GET_LONG(buf);
		objp->actionsfailed = IXDR_GET_LONG(buf);
		objp->pass = IXDR_GET_LONG(buf);
		}
		 if (!xdr_string (xdrs, &objp->start, DAF_DATETIME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->end, DAF_DATETIME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->teststand, DAF_TESTSTAND_LEN))
			 return FALSE;
		 if (!xdr_int (xdrs, &objp->teststandrecordID))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->testlevel, DAF_LEVEL_LEN))
			 return FALSE;
		 if (!xdr_int (xdrs, &objp->testlevelrecordID))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->tester, DAF_TESTER_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->loglocation, DAF_LOGLOCATION_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->scenariologfilename, DAF_FILENAME_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->comments, DAF_COMMENTS_LEN))
			 return FALSE;
		 if (!xdr_string (xdrs, &objp->errmsg, 256))
			 return FALSE;
	 return TRUE;
	}

	 if (!xdr_bool (xdrs, &objp->valid))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->project, DAF_PROJECT_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->phase, DAF_PHASE_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->scenarioname, DAF_SCENARIO_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->jobname, DAF_JOBNAME_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->state, DAF_STATE_LEN))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->actionsinscenario))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->actionsattempted))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->actionscompleted))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->actionspassed))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->actionsfailed))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->pass))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->start, DAF_DATETIME_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->end, DAF_DATETIME_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->teststand, DAF_TESTSTAND_LEN))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->teststandrecordID))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->testlevel, DAF_LEVEL_LEN))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->testlevelrecordID))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->tester, DAF_TESTER_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->loglocation, DAF_LOGLOCATION_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->scenariologfilename, DAF_FILENAME_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->comments, DAF_COMMENTS_LEN))
		 return FALSE;
	 if (!xdr_string (xdrs, &objp->errmsg, 256))
		 return FALSE;
	return TRUE;
}
Exemplo n.º 20
0
/*
 * XDR a call message
 */
bool_t
xdr_callmsg(
	register XDR *xdrs,
	register struct rpc_msg *cmsg)
{
	register uint32_t *buf;
	register struct opaque_auth *oa;

	if (xdrs->x_op == XDR_ENCODE) {
		if (cmsg->rm_call.cb_cred.oa_length > MAX_AUTH_BYTES) {
			return (FALSE);
		}
		if (cmsg->rm_call.cb_verf.oa_length > MAX_AUTH_BYTES) {
			return (FALSE);
		}
		buf = XDR_INLINE(xdrs, 8 * BYTES_PER_XDR_UNIT
			+ RNDUP(cmsg->rm_call.cb_cred.oa_length)
			+ 2 * BYTES_PER_XDR_UNIT
			+ RNDUP(cmsg->rm_call.cb_verf.oa_length));
		if (buf != NULL) {
			IXDR_PUT_LONG(buf, (uint32_t)cmsg->rm_xid);
			IXDR_PUT_ENUM(buf, (uint32_t)cmsg->rm_direction);
			if (cmsg->rm_direction != CALL) {
				return (FALSE);
			}
			IXDR_PUT_LONG(buf, (uint32_t)cmsg->rm_call.cb_rpcvers);
			if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION) {
				return (FALSE);
			}
			IXDR_PUT_LONG(buf, (uint32_t)cmsg->rm_call.cb_prog);
			IXDR_PUT_LONG(buf, (uint32_t)cmsg->rm_call.cb_vers);
			IXDR_PUT_LONG(buf, (uint32_t)cmsg->rm_call.cb_proc);
			oa = &cmsg->rm_call.cb_cred;
			IXDR_PUT_ENUM(buf, oa->oa_flavor);
			IXDR_PUT_LONG(buf, oa->oa_length);
			if (oa->oa_length) {
				bcopy(oa->oa_base, (char*)buf, oa->oa_length);
				buf += RNDUP(oa->oa_length) / sizeof (*buf);
			}
			oa = &cmsg->rm_call.cb_verf;
			IXDR_PUT_ENUM(buf, oa->oa_flavor);
			IXDR_PUT_LONG(buf, oa->oa_length);
			if (oa->oa_length) {
				bcopy(oa->oa_base, (char*)buf, oa->oa_length);
				/* no real need....
				buf += RNDUP(oa->oa_length) / sizeof (*buf);
				*/
			}
			return (TRUE);
		}
	}
	if (xdrs->x_op == XDR_DECODE) {
		buf = XDR_INLINE(xdrs, 8 * BYTES_PER_XDR_UNIT);
		if (buf != NULL) {
			cmsg->rm_xid = IXDR_GET_LONG(buf);
			cmsg->rm_direction = IXDR_GET_ENUM(buf, enum msg_type);
			if (cmsg->rm_direction != CALL) {
				return (FALSE);
			}
			cmsg->rm_call.cb_rpcvers = IXDR_GET_LONG(buf);
			if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION) {
				return (FALSE);
			}
			cmsg->rm_call.cb_prog = IXDR_GET_LONG(buf);
			cmsg->rm_call.cb_vers = IXDR_GET_LONG(buf);
			cmsg->rm_call.cb_proc = IXDR_GET_LONG(buf);
			oa = &cmsg->rm_call.cb_cred;
			oa->oa_flavor = IXDR_GET_ENUM(buf, enum_t);
			oa->oa_length = IXDR_GET_LONG(buf);
			if (oa->oa_length) {
				if (oa->oa_length > MAX_AUTH_BYTES) {
					return (FALSE);
				}
				if (oa->oa_base == NULL) {
					oa->oa_base = (char*)
						mem_alloc(oa->oa_length);
				}
				buf = XDR_INLINE(xdrs, RNDUP(oa->oa_length));
				if (buf == NULL) {
					if (xdr_opaque(xdrs, oa->oa_base,
					    oa->oa_length) == FALSE) {
						return (FALSE);
					}
				} else {
					bcopy((char*)buf, oa->oa_base,
					    oa->oa_length);
					/* no real need....
					buf += RNDUP(oa->oa_length) /
						sizeof (*buf);
					*/
				}
			}
			oa = &cmsg->rm_call.cb_verf;
			buf = XDR_INLINE(xdrs, 2 * BYTES_PER_XDR_UNIT);
			if (buf == NULL) {
				if (xdr_enum(xdrs, &oa->oa_flavor) == FALSE ||
				    xdr_u_int(xdrs, &oa->oa_length) == FALSE) {
					return (FALSE);
				}
			} else {
				oa->oa_flavor = IXDR_GET_ENUM(buf, enum_t);
				oa->oa_length = IXDR_GET_LONG(buf);
			}
			if (oa->oa_length) {
				if (oa->oa_length > MAX_AUTH_BYTES) {
					return (FALSE);
				}
				if (oa->oa_base == NULL) {
					oa->oa_base = (char*)
						mem_alloc(oa->oa_length);
				}
				buf = XDR_INLINE(xdrs, RNDUP(oa->oa_length));
				if (buf == NULL) {
					if (xdr_opaque(xdrs, oa->oa_base,
					    oa->oa_length) == FALSE) {
						return (FALSE);
					}
				} else {
					bcopy((char*)buf, oa->oa_base,
					    oa->oa_length);
					/* no real need...
					buf += RNDUP(oa->oa_length) /
						sizeof (*buf);
					*/
				}
			}
			return (TRUE);
		}
Exemplo n.º 21
0
static bool_t
Svcauth_gss_validate(struct svc_req *rqst, struct svc_rpc_gss_data *gd,
                     struct rpc_msg *msg)
{
  struct opaque_auth *oa;
  gss_buffer_desc rpcbuf, checksum;
  OM_uint32 maj_stat, min_stat, qop_state;
  u_char rpchdr[128];
  int32_t *buf;
  char GssError[256];

  memset(rpchdr, 0, sizeof(rpchdr));

  /* XXX - Reconstruct RPC header for signing (from xdr_callmsg). */
  oa = &msg->rm_call.cb_cred;

  LogFullDebug(COMPONENT_RPCSEC_GSS,
               "Call to Svcauth_gss_validate --> xid=%u dir=%u rpcvers=%u prog=%u vers=%u proc=%u flavor=%u len=%u base=%p ckeck.len=%u check.val=%p",
               msg->rm_xid,
               msg->rm_direction,
               msg->rm_call.cb_rpcvers,
               msg->rm_call.cb_prog,
               msg->rm_call.cb_vers,
               msg->rm_call.cb_proc,
               oa->oa_flavor,
               oa->oa_length,
               oa->oa_base,
               msg->rm_call.cb_verf.oa_length,
               msg->rm_call.cb_verf.oa_base);

  if(oa->oa_length > MAX_AUTH_BYTES)
    {
      LogCrit(COMPONENT_RPCSEC_GSS,
              "Svcauth_gss_validate oa->oa_length (%u) > MAX_AUTH_BYTES (%u)",
              oa->oa_length, MAX_AUTH_BYTES);
      return (FALSE);
    }
  
  /* 8 XDR units from the IXDR macro calls. */
  if(sizeof(rpchdr) < (8 * BYTES_PER_XDR_UNIT +
     RNDUP(oa->oa_length)))
    {
      LogCrit(COMPONENT_RPCSEC_GSS,
              "Svcauth_gss_validate sizeof(rpchdr) (%d) < (8 * BYTES_PER_XDR_UNIT (%d) + RNDUP(oa->oa_length (%u))) (%d)",
              (int) sizeof(rpchdr),
              (int) (8 * BYTES_PER_XDR_UNIT),
              oa->oa_length,
              (int) (8 * BYTES_PER_XDR_UNIT + RNDUP(oa->oa_length)));
      return (FALSE);
    }

  buf = (int32_t *) (void *)rpchdr;
  IXDR_PUT_LONG(buf, msg->rm_xid);
  IXDR_PUT_ENUM(buf, msg->rm_direction);
  IXDR_PUT_LONG(buf, msg->rm_call.cb_rpcvers);
  IXDR_PUT_LONG(buf, msg->rm_call.cb_prog);
  IXDR_PUT_LONG(buf, msg->rm_call.cb_vers);
  IXDR_PUT_LONG(buf, msg->rm_call.cb_proc);
  IXDR_PUT_ENUM(buf, oa->oa_flavor);
  IXDR_PUT_LONG(buf, oa->oa_length);
  if(oa->oa_length)
    {
      memcpy((caddr_t) buf, oa->oa_base, oa->oa_length);
      buf += RNDUP(oa->oa_length) / sizeof(int32_t);
    }
  rpcbuf.value = rpchdr;
  rpcbuf.length = (u_char *) buf - rpchdr;

  checksum.value = msg->rm_call.cb_verf.oa_base;
  checksum.length = msg->rm_call.cb_verf.oa_length;

  if(isFullDebug(COMPONENT_RPCSEC_GSS))
    {
      char ctx_str[64];
      sprint_ctx(ctx_str, (unsigned char *)gd->ctx, sizeof(gss_union_ctx_id_desc));
      LogFullDebug(COMPONENT_RPCSEC_GSS,
                   "Svcauth_gss_validate context %s rpcbuf=%p:%u checksum=%p:$%u)",
                   ctx_str, rpcbuf.value, (unsigned int) rpcbuf.length,
                   checksum.value, (unsigned int) checksum.length);
    }

  maj_stat = gss_verify_mic(&min_stat, gd->ctx, &rpcbuf, &checksum, &qop_state);

  if(maj_stat != GSS_S_COMPLETE)
    {
      log_sperror_gss(GssError, maj_stat, min_stat);
      LogCrit(COMPONENT_RPCSEC_GSS, "Error in gss_verify_mic: %s", GssError);
      return (FALSE);
    }
  return (TRUE);
}