Пример #1
0
bool_t
smb_token_xdr(XDR *xdrs, smb_token_t *objp)
{
	if (!smb_id_xdr(xdrs, &objp->tkn_user))
		return (FALSE);
	if (!smb_id_xdr(xdrs, &objp->tkn_owner))
		return (FALSE);
	if (!smb_id_xdr(xdrs, &objp->tkn_primary_grp))
		return (FALSE);
	if (!smb_ids_xdr(xdrs, &objp->tkn_win_grps))
		return (FALSE);
	if (!smb_privset_helper_xdr(xdrs, (char **)&objp->tkn_privileges))
		return (FALSE);
	if (!xdr_string(xdrs, &objp->tkn_account_name, ~0))
		return (FALSE);
	if (!xdr_string(xdrs, &objp->tkn_domain_name, ~0))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->tkn_flags))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->tkn_audit_sid))
		return (FALSE);
	if (!xdr_pointer(xdrs, (char **)&objp->tkn_session_key,
	    sizeof (smb_session_key_t), (xdrproc_t)smb_session_key_xdr))
		return (FALSE);
	if (!smb_posix_grps_helper_xdr(xdrs, (char **)&objp->tkn_posix_grps))
		return (FALSE);
	return (TRUE);
}
Пример #2
0
bool_t
dfs_info_xdr(XDR *xdrs, dfs_info_t *objp)
{
	if (!xdr_vector(xdrs, (char *)objp->i_uncpath, DFS_PATH_MAX,
	    sizeof (char), (xdrproc_t)xdr_char))
		return (FALSE);

	if (!xdr_vector(xdrs, (char *)objp->i_comment, DFS_COMMENT_MAX,
	    sizeof (char), (xdrproc_t)xdr_char))
		return (FALSE);

	if (!xdr_vector(xdrs, (char *)objp->i_guid,
	    UUID_PRINTABLE_STRING_LENGTH, sizeof (char), (xdrproc_t)xdr_char))
		return (FALSE);

	if (!xdr_uint32_t(xdrs, &objp->i_state))
		return (FALSE);

	if (!xdr_uint32_t(xdrs, &objp->i_timeout))
		return (FALSE);

	if (!xdr_uint32_t(xdrs, &objp->i_propflags))
		return (FALSE);

	if (!xdr_uint32_t(xdrs, &objp->i_type))
		return (FALSE);

	if (!xdr_array(xdrs, (char **)&objp->i_targets,
	    (uint32_t *)&objp->i_ntargets, ~0, sizeof (dfs_target_t),
	    (xdrproc_t)dfs_target_xdr))
		return (FALSE);

	return (TRUE);
}
Пример #3
0
/*
 * XDR encode/decode for smb_netuserinfo_t.
 */
bool_t
smb_netuserinfo_xdr(XDR *xdrs, smb_netuserinfo_t *objp)
{
	if (!xdr_uint64_t(xdrs, &objp->ui_session_id))
		return (FALSE);
	if (!xdr_uint16_t(xdrs, &objp->ui_smb_uid))
		return (FALSE);
	if (!xdr_uint16_t(xdrs, &objp->ui_domain_len))
		return (FALSE);
	if (!xdr_string(xdrs, &objp->ui_domain, ~0))
		return (FALSE);
	if (!xdr_uint16_t(xdrs, &objp->ui_account_len))
		return (FALSE);
	if (!xdr_string(xdrs, &objp->ui_account, ~0))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->ui_posix_uid))
		return (FALSE);
	if (!xdr_uint16_t(xdrs, &objp->ui_workstation_len))
		return (FALSE);
	if (!xdr_string(xdrs, &objp->ui_workstation, ~0))
		return (FALSE);
	if (!smb_inaddr_xdr(xdrs, &objp->ui_ipaddr))
		return (FALSE);
	if (!xdr_int32_t(xdrs, &objp->ui_native_os))
		return (FALSE);
	if (!xdr_int64_t(xdrs, &objp->ui_logon_time))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->ui_numopens))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->ui_flags))
		return (FALSE);
	return (TRUE);
}
Пример #4
0
bool_t
xdr_geo_sync_data_ret_t (XDR *xdrs, geo_sync_data_ret_t *objp)
{
	//register int32_t *buf;

	 if (!xdr_uint16_t (xdrs, &objp->eid))
		 return FALSE;
	 if (!xdr_uint16_t (xdrs, &objp->site_id))
		 return FALSE;
	 if (!xdr_uint64_t (xdrs, &objp->file_idx))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->local_ref))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->remote_ref))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->last))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->first_record))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->nb_records))
		 return FALSE;
	 if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, ~0))
		 return FALSE;
	return TRUE;
}
Пример #5
0
bool_t
xdr_nis_oid(XDR *xdrs, nis_oid *objp)
{
	if (!xdr_uint32_t(xdrs, &objp->ctime))
		return (FALSE);
	return (xdr_uint32_t(xdrs, &objp->mtime));
}
Пример #6
0
bool_t
_xdr_nis_result (XDR *xdrs, nis_result *objp)
{
  bool_t res = xdr_nis_error (xdrs, &objp->status);
  if (__builtin_expect (res, TRUE))
    {
      res = xdr_array (xdrs, (void *) &objp->objects.objects_val,
		       &objp->objects.objects_len, ~0,
		       sizeof (nis_object), (xdrproc_t) _xdr_nis_object);
      if (__builtin_expect (res, TRUE))
	{
	  res = xdr_netobj (xdrs, &objp->cookie);
	  if (__builtin_expect (res, TRUE))
	    {
	      res = xdr_uint32_t (xdrs, &objp->zticks);
	      if (__builtin_expect (res, TRUE))
		{
		  res = xdr_uint32_t (xdrs, &objp->dticks);
		  if (__builtin_expect (res, TRUE))
		    {
		      res = xdr_uint32_t (xdrs, &objp->aticks);
		      if (__builtin_expect (res, TRUE))
			res = xdr_uint32_t (xdrs, &objp->cticks);
		    }
		}
	    }
	}
    }
  return res;
}
Пример #7
0
/*
 * XDR the MSG_DENIED part of a reply message union
 */
bool_t 
xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr)
{
	enum reject_stat *prj_stat;
	enum auth_stat *prj_why;

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

	prj_stat = &rr->rj_stat;

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

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

	case AUTH_ERROR:
		prj_why = &rr->rj_why;
		return (xdr_enum(xdrs, (enum_t *) prj_why));
	}
	/* NOTREACHED */
	assert(0);
	return (FALSE);
}
Пример #8
0
bool_t
xdr_disk_vol_t(
XDR *xdrs,
disk_vol_t *objp)
{

	if (!xdr_vsn_t(xdrs, objp->vol_name))
		return (FALSE);
	if (!xdr_host_t(xdrs, objp->host))
		return (FALSE);
	if (!xdr_upath_t(xdrs, objp->path))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->set_flags))
		return (FALSE);
	/* added in 4.4 release */
#ifdef SAMRPC_CLIENT
	if (xdrs->x_op == XDR_DECODE || xdrs->x_op == XDR_ENCODE) {
		if ((xdrs->x_public != NULL) &&
		    (strcmp(xdrs->x_public, "1.2") <= 0)) {

			return (TRUE); /* versions 1.2 or lower */
		}
	}
#endif /* samrpc_client */
	if (!xdr_fsize_t(xdrs, &objp->capacity))
		return (FALSE);
	if (!xdr_fsize_t(xdrs, &objp->free_space))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->status_flags))
		return (FALSE);
	return (TRUE);
}
Пример #9
0
static bool_t
xdr_nis_oid (XDR *xdrs, nis_oid *objp)
{
  bool_t res = xdr_uint32_t (xdrs, &objp->ctime);
  if  (__builtin_expect (res, TRUE))
    res = xdr_uint32_t (xdrs, &objp->mtime);
  return res;
}
Пример #10
0
static bool_t
smb_luid_xdr(XDR *xdrs, smb_luid_t *objp)
{
	if (!xdr_uint32_t(xdrs, &objp->lo_part))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->hi_part))
		return (FALSE);
	return (TRUE);
}
Пример #11
0
bool_t
xdr_storcli_read_no_data_ret_t (XDR *xdrs, storcli_read_no_data_ret_t *objp)
{
	//register int32_t *buf;

	 if (!xdr_uint32_t (xdrs, &objp->alignment))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->len))
		 return FALSE;
	return TRUE;
}
Пример #12
0
bool_t
xdr_kdbe_time_t (XDR *xdrs, kdbe_time_t *objp)
{
    int32_t *buf;

    if (!xdr_uint32_t (xdrs, &objp->seconds))
        return FALSE;
    if (!xdr_uint32_t (xdrs, &objp->useconds))
        return FALSE;
    return TRUE;
}
Пример #13
0
bool_t
xdr_pmap(
	XDR *xdrs,
	struct pmap *regs)
{

	if (xdr_uint32_t(xdrs, &regs->pm_prog) && 
		xdr_uint32_t(xdrs, &regs->pm_vers) && 
		xdr_uint32_t(xdrs, &regs->pm_prot))
		return (xdr_uint32_t(xdrs, &regs->pm_port));
	return (FALSE);
}
Пример #14
0
bool_t
_xdr_cp_result (XDR *xdrs, cp_result *objp)
{
  bool_t res = xdr_nis_error (xdrs, &objp->cp_status);
  if (__builtin_expect (res, TRUE))
    {
      res = xdr_uint32_t (xdrs, &objp->cp_zticks);
      if (__builtin_expect (res, TRUE))
	res = xdr_uint32_t (xdrs, &objp->cp_dticks);
    }
  return res;
}
Пример #15
0
/*
 * XDR a list_t list of elements
 * offset - offset of list_node_t in list element
 * elsize - size of list element
 * elproc - XDR function for the list element
 */
bool_t
smb_list_xdr(XDR *xdrs, list_t *list,  const size_t offset,
    const size_t elsize, const xdrproc_t elproc)
{
	void *node;
	uint32_t count = 0;

	switch (xdrs->x_op) {
	case XDR_ENCODE:
		node = list_head(list);
		while (node) {
			++count;
			node = list_next(list, node);
		}
		if (!xdr_uint32_t(xdrs, &count))
			return (FALSE);

		node = list_head(list);
		while (node) {
			if (!elproc(xdrs, node))
				return (FALSE);
			node = list_next(list, node);
		}
		return (TRUE);

	case XDR_DECODE:
		if (!xdr_uint32_t(xdrs, &count))
			return (FALSE);
		list_create(list, elsize, offset);
		while (count) {
			node = MEM_MALLOC("xdr", elsize);
			if (node == NULL)
				return (FALSE);
			if (!elproc(xdrs, node))
				return (FALSE);
			list_insert_tail(list, node);
			--count;
		}
		return (TRUE);

	case XDR_FREE:
		while ((node = list_head(list)) != NULL) {
			list_remove(list, node);
			(void) elproc(xdrs, node);
			MEM_FREE("xdr", node);
		}
		list_destroy(list);
		return (TRUE);
	}

	return (FALSE);
}
Пример #16
0
static bool_t
smb_privset_xdr(XDR *xdrs, smb_privset_t *objp)
{
	if (!xdr_uint32_t(xdrs, &objp->priv_cnt))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->control))
		return (FALSE);
	if (!xdr_vector(xdrs, (char *)objp->priv, objp->priv_cnt,
	    sizeof (smb_luid_attrs_t),
	    (xdrproc_t)smb_luid_attrs_xdr))
		return (FALSE);
	return (TRUE);
}
Пример #17
0
bool_t
_xdr_nis_object (XDR *xdrs, nis_object *objp)
{
  bool_t res = xdr_nis_oid (xdrs, &objp->zo_oid);
  if (__builtin_expect (res, TRUE))
    {
      res = xdr_nis_name (xdrs, &objp->zo_name);
      if (__builtin_expect (res, TRUE))
	{
	  res = xdr_nis_name (xdrs, &objp->zo_owner);
	  if (__builtin_expect (res, TRUE))
	    {
	      res = xdr_nis_name (xdrs, &objp->zo_group);
	      if (__builtin_expect (res, TRUE))
		{
		  res = xdr_nis_name (xdrs, &objp->zo_domain);
		  if (__builtin_expect (res, TRUE))
		    {
		      res = xdr_u_int (xdrs, &objp->zo_access);
		      if (__builtin_expect (res, TRUE))
			{
			  res = xdr_uint32_t (xdrs, &objp->zo_ttl);
			  if (__builtin_expect (res, TRUE))
			    res = xdr_objdata (xdrs, &objp->zo_data);
			}
		    }
		}
	    }
	}
    }
  return res;
}
Пример #18
0
bool_t
xdr_storcli_read_arg_t (XDR *xdrs, storcli_read_arg_t *objp)
{
	//register int32_t *buf;

	//int i;
	 if (!xdr_uint16_t (xdrs, &objp->cid))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->sid))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->layout))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->spare))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->dist_set, ROZOFS_SAFE_MAX,
		sizeof (uint8_t), (xdrproc_t) xdr_uint8_t))
		 return FALSE;
	 if (!xdr_storcli_uuid_t (xdrs, objp->fid))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->proj_id))
		 return FALSE;
	 if (!xdr_uint64_t (xdrs, &objp->bid))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->nb_proj))
		 return FALSE;
	return TRUE;
}
Пример #19
0
bool_t
xdr_storcli_write_arg_no_data_t (XDR *xdrs, storcli_write_arg_no_data_t *objp)
{
	//register int32_t *buf;

	//int i;
	 if (!xdr_uint16_t (xdrs, &objp->cid))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->sid))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->empty_file))
		 return FALSE;
	 if (!xdr_uint8_t (xdrs, &objp->layout))
		 return FALSE;
	 if (!xdr_vector (xdrs, (char *)objp->dist_set, ROZOFS_SAFE_MAX,
		sizeof (uint8_t), (xdrproc_t) xdr_uint8_t))
		 return FALSE;
	 if (!xdr_storcli_uuid_t (xdrs, objp->fid))
		 return FALSE;
	 if (!xdr_uint64_t (xdrs, &objp->off))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->len))
		 return FALSE;
	return TRUE;
}
Пример #20
0
bool_t
xdr_count4(XDR *xdrs, count4 *objp)
{
    if (!xdr_uint32_t(xdrs, objp))
        return (FALSE);
    return (TRUE);
}
Пример #21
0
bool_t
xdr_fsdb_client (XDR *xdrs, fsdb_client *objp)
{

	 if (!xdr_fsdb_client_id (xdrs, &objp->id))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->flags))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->sequence_id))
		 return FALSE;
	 if (!xdr_opaque (xdrs, objp->verifier, NFS_VERIFIER_SIZE))
		 return FALSE;
	 if (!xdr_bytes (xdrs, (char **)&objp->owner.owner_val, (u_int *) &objp->owner.owner_len, NFS_OPAQUE_LIMIT))
		 return FALSE;
	return TRUE;
}
Пример #22
0
static bool_t
smb_posix_grps_helper_xdr(XDR *xdrs, char **identity)
{
	uint32_t pos, len;
	uint32_t cnt;
	bool_t rc;

	if (xdrs->x_op == XDR_DECODE) {
		pos = xdr_getpos(xdrs);

		if (!xdr_bool(xdrs, &rc))
			return (FALSE);

		if (!xdr_uint32_t(xdrs, &cnt))
			return (FALSE);

		rc = xdr_setpos(xdrs, pos);
		if (rc == FALSE)
			return (FALSE);
	} else {
		if (*identity == NULL)
			return (FALSE);
		cnt = ((smb_posix_grps_t *)(uintptr_t)*identity)->pg_ngrps;
	}

	len = SMB_POSIX_GRPS_SIZE(cnt);

	if (!xdr_pointer(xdrs, identity, len, (xdrproc_t)smb_posix_grps_xdr))
		return (FALSE);
	return (TRUE);
}
Пример #23
0
bool_t
_xdr_directory_obj (XDR *xdrs, directory_obj *objp)
{
  bool_t res = xdr_nis_name (xdrs, &objp->do_name);
  if (__builtin_expect (res, TRUE))
    {
      res = xdr_nstype (xdrs, &objp->do_type);
      if (__builtin_expect (res, TRUE))
	{
	  res = xdr_array (xdrs, (void *) &objp->do_servers.do_servers_val,
			   &objp->do_servers.do_servers_len, ~0,
			   sizeof (nis_server), (xdrproc_t) _xdr_nis_server);
	  if (__builtin_expect (res, TRUE))
	    {
	      res = xdr_uint32_t (xdrs, &objp->do_ttl);
	      if (__builtin_expect (res, TRUE))
		res = xdr_array (xdrs,
				 (void *) &objp->do_armask.do_armask_val,
				 &objp->do_armask.do_armask_len, ~0,
				 sizeof (oar_mask), (xdrproc_t) xdr_oar_mask);
	    }
	}
    }
  return res;
}
Пример #24
0
/*
 * Custom XDR routine for our API structure fmd_stat_t.  This function must
 * match the definition of fmd_stat_t in <fm/fmd_api.h> and must also match
 * the corresponding routine in usr/src/cmd/fm/fmd/common/fmd_rpc_adm.c.
 */
bool_t
xdr_fmd_stat(XDR *xp, fmd_stat_t *sp)
{
	bool_t rv = TRUE;

	rv &= xdr_opaque(xp, sp->fmds_name, sizeof (sp->fmds_name));
	rv &= xdr_u_int(xp, &sp->fmds_type);
	rv &= xdr_opaque(xp, sp->fmds_desc, sizeof (sp->fmds_desc));

	switch (sp->fmds_type) {
	case FMD_TYPE_BOOL:
		rv &= xdr_int(xp, &sp->fmds_value.bool);
		break;
	case FMD_TYPE_INT32:
		rv &= xdr_int32_t(xp, &sp->fmds_value.i32);
		break;
	case FMD_TYPE_UINT32:
		rv &= xdr_uint32_t(xp, &sp->fmds_value.ui32);
		break;
	case FMD_TYPE_INT64:
		rv &= xdr_int64_t(xp, &sp->fmds_value.i64);
		break;
	case FMD_TYPE_UINT64:
	case FMD_TYPE_TIME:
	case FMD_TYPE_SIZE:
		rv &= xdr_uint64_t(xp, &sp->fmds_value.ui64);
		break;
	case FMD_TYPE_STRING:
		rv &= xdr_string(xp, &sp->fmds_value.str, ~0);
		break;
	}

	return (rv);
}
Пример #25
0
bool_t
xdr_uint32 (XDR *xdrs, uint32 *objp)
{
	 if (!xdr_uint32_t (xdrs, objp))
		 return FALSE;
	return TRUE;
}
Пример #26
0
bool_t
xdr_geo_sync_delete_req_arg_t (XDR *xdrs, geo_sync_delete_req_arg_t *objp)
{
	//register int32_t *buf;

	 if (!xdr_uint16_t (xdrs, &objp->eid))
		 return FALSE;
	 if (!xdr_uint16_t (xdrs, &objp->site_id))
		 return FALSE;
	 if (!xdr_uint64_t (xdrs, &objp->file_idx))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->local_ref))
		 return FALSE;
	 if (!xdr_uint32_t (xdrs, &objp->remote_ref))
		 return FALSE;
	return TRUE;
}
Пример #27
0
bool_t
_xdr_ping_args (XDR *xdrs, ping_args *objp)
{
  bool_t res = xdr_nis_name (xdrs, &objp->dir);
  if (__builtin_expect (res, TRUE))
    res = xdr_uint32_t (xdrs, &objp->stamp);
  return res;
}
Пример #28
0
static bool_t
smb_luid_attrs_xdr(XDR *xdrs, smb_luid_attrs_t *objp)
{
	if (!smb_luid_xdr(xdrs, &objp->luid))
		return (FALSE);
	if (!xdr_uint32_t(xdrs, &objp->attrs))
		return (FALSE);
	return (TRUE);
}
Пример #29
0
bool_t
xdr_kdb_sno_t (XDR *xdrs, kdb_sno_t *objp)
{
    int32_t *buf;

    if (!xdr_uint32_t (xdrs, objp))
        return FALSE;
    return TRUE;
}
Пример #30
0
static int
send_file_chunk (guestfs_h *g, int cancel, const char *buf, size_t buflen)
{
  u_int32_t len;
  int r;
  guestfs_chunk chunk;
  XDR xdr;
  char *msg_out;
  size_t msg_out_size;

  /* Allocate the chunk buffer.  Don't use the stack to avoid
   * excessive stack usage and unnecessary copies.
   */
  msg_out = safe_malloc (g, GUESTFS_MAX_CHUNK_SIZE + 4 + 48);
  xdrmem_create (&xdr, msg_out + 4, GUESTFS_MAX_CHUNK_SIZE + 48, XDR_ENCODE);

  /* Serialize the chunk. */
  chunk.cancel = cancel;
  chunk.data.data_len = buflen;
  chunk.data.data_val = (char *) buf;

  if (!xdr_guestfs_chunk (&xdr, &chunk)) {
    error (g, _("xdr_guestfs_chunk failed (buf = %p, buflen = %zu)"),
           buf, buflen);
    xdr_destroy (&xdr);
    goto cleanup1;
  }

  len = xdr_getpos (&xdr);
  xdr_destroy (&xdr);

  /* Reduce the size of the outgoing message buffer to the real length. */
  msg_out = safe_realloc (g, msg_out, len + 4);
  msg_out_size = len + 4;

  xdrmem_create (&xdr, msg_out, 4, XDR_ENCODE);
  xdr_uint32_t (&xdr, &len);

  r = guestfs___send_to_daemon (g, msg_out, msg_out_size);

  /* Did the daemon send a cancellation message? */
  if (r == -2) {
    debug (g, "got daemon cancellation");
    return -2;
  }

  if (r == -1)
    goto cleanup1;

  free (msg_out);

  return 0;

 cleanup1:
  free (msg_out);
  return -1;
}