static BOOL api_srv_net_share_add(pipes_struct *p) { SRV_Q_NET_SHARE_ADD q_u; SRV_R_NET_SHARE_ADD r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* Unmarshall the net server add info. */ if(!srv_io_q_net_share_add("", &q_u, data, 0)) { DEBUG(0,("api_srv_net_share_add: Failed to unmarshall SRV_Q_NET_SHARE_ADD.\n")); return False; } r_u.status = _srv_net_share_add(p, &q_u, &r_u); if(!srv_io_r_net_share_add("", &r_u, rdata, 0)) { DEBUG(0,("api_srv_net_share_add: Failed to marshall SRV_R_NET_SHARE_ADD.\n")); return False; } return True; }
WERROR cli_srvsvc_net_share_add(struct cli_state *cli, TALLOC_CTX *mem_ctx, const char *netname, uint32 type, const char *remark, uint32 perms, uint32 max_uses, uint32 num_uses, const char *path, const char *passwd) { prs_struct qbuf, rbuf; SRV_Q_NET_SHARE_ADD q; SRV_R_NET_SHARE_ADD r; WERROR result = W_ERROR(ERRgeneral); ZERO_STRUCT(q); ZERO_STRUCT(r); /* Initialise parse structures */ prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); init_srv_q_net_share_add(&q,cli->srv_name_slash, netname, type, remark, perms, max_uses, num_uses, path, passwd); /* Marshall data and send request */ if (!srv_io_q_net_share_add("", &q, &qbuf, 0) || !rpc_api_pipe_req(cli, SRV_NET_SHARE_ADD, &qbuf, &rbuf)) goto done; /* Unmarshall response */ if (!srv_io_r_net_share_add("", &r, &rbuf, 0)) goto done; result = r.status; done: prs_mem_free(&qbuf); prs_mem_free(&rbuf); return result; }