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; }
/* * 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; }
/* * XDR a call message */ bool_t xdr_callmsg(register XDR *xdrs, register struct rpc_msg *cmsg) { register rpc_inline_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 = (rpc_inline_t *) XDR_INLINE(xdrs, (int) ( 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, cmsg->rm_xid); IXDR_PUT_ENUM(buf, cmsg->rm_direction); if (cmsg->rm_direction != CALL) { return (FALSE); } IXDR_PUT_LONG(buf, cmsg->rm_call.cb_rpcvers); if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION) { return (FALSE); } IXDR_PUT_LONG(buf, cmsg->rm_call.cb_prog); IXDR_PUT_LONG(buf, cmsg->rm_call.cb_vers); IXDR_PUT_LONG(buf, 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) { memmove((caddr_t)buf, oa->oa_base, oa->oa_length); buf += RNDUP(oa->oa_length) / BYTES_PER_XDR_UNIT; } oa = &cmsg->rm_call.cb_verf; IXDR_PUT_ENUM(buf, oa->oa_flavor); IXDR_PUT_LONG(buf, oa->oa_length); if (oa->oa_length) { memmove((caddr_t)buf, oa->oa_base, oa->oa_length); /* no real need.... buf += RNDUP(oa->oa_length) / BYTES_PER_XDR_UNIT; */ } return (TRUE); } } if (xdrs->x_op == XDR_DECODE) { buf = (rpc_inline_t *) 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 = (caddr_t) mem_alloc(oa->oa_length); } buf = (rpc_inline_t *) XDR_INLINE(xdrs, (int)RNDUP(oa->oa_length)); if (buf == NULL) { if (xdr_opaque(xdrs, oa->oa_base, oa->oa_length) == FALSE) { return (FALSE); } } else { memmove(oa->oa_base, (caddr_t)buf, oa->oa_length); /* no real need.... buf += RNDUP(oa->oa_length) / BYTES_PER_XDR_UNIT; */ } } oa = &cmsg->rm_call.cb_verf; buf = (rpc_inline_t *) 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 = (caddr_t) mem_alloc(oa->oa_length); } buf = (rpc_inline_t *) XDR_INLINE(xdrs, (int)RNDUP(oa->oa_length)); if (buf == NULL) { if (xdr_opaque(xdrs, oa->oa_base, oa->oa_length) == FALSE) { return (FALSE); } } else { memmove(oa->oa_base, (caddr_t) buf, oa->oa_length); /* no real need... buf += RNDUP(oa->oa_length) / BYTES_PER_XDR_UNIT; */ } } return (TRUE); }
bool_t xdr_auth_glusterfs_parms_v2 (XDR *xdrs, auth_glusterfs_parms_v2 *objp) { register int32_t *buf; buf = NULL; 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; }