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; }
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; }
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; }
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; }
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; }
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; }
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); }
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; }
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; }
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; }
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; }
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; }
/* * 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; }
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; }
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; }
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; }
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; }
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; }
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; }
/* * 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); }
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); }