Ejemplo n.º 1
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;
}
Ejemplo n.º 2
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;
        }
Ejemplo n.º 3
0
/*
 * 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);
		}
Ejemplo n.º 4
0
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;
}