summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/rpc_client/cli_pipe.c11
-rw-r--r--source3/rpc_client/ndr.c17
3 files changed, 11 insertions, 19 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index a7d8782497..cb01c38a30 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4849,7 +4849,7 @@ struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
struct event_context *ev,
struct rpc_pipe_client *cli,
uint8_t op_num,
- prs_struct *req_data);
+ DATA_BLOB *req_data);
NTSTATUS rpc_api_pipe_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
DATA_BLOB *reply_pdu);
struct tevent_req *rpc_pipe_bind_send(TALLOC_CTX *mem_ctx,
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 73aa3dc7a3..bda152c505 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2033,7 +2033,7 @@ struct rpc_api_pipe_req_state {
struct rpc_pipe_client *cli;
uint8_t op_num;
uint32_t call_id;
- prs_struct *req_data;
+ DATA_BLOB *req_data;
uint32_t req_data_sent;
DATA_BLOB rpc_out;
DATA_BLOB reply_pdu;
@@ -2048,7 +2048,7 @@ struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
struct event_context *ev,
struct rpc_pipe_client *cli,
uint8_t op_num,
- prs_struct *req_data)
+ DATA_BLOB *req_data)
{
struct tevent_req *req, *subreq;
struct rpc_api_pipe_req_state *state;
@@ -2122,7 +2122,7 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
NTSTATUS status;
union dcerpc_payload u;
- data_left = prs_offset(state->req_data) - state->req_data_sent;
+ data_left = state->req_data->length - state->req_data_sent;
data_sent_thistime = calculate_data_len_tosend(
state->cli, data_left, &frag_len, &auth_len, &ss_padding);
@@ -2139,7 +2139,7 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
ZERO_STRUCT(u.request);
- u.request.alloc_hint = prs_offset(state->req_data);
+ u.request.alloc_hint = state->req_data->length;
u.request.context_id = 0;
u.request.opnum = state->op_num;
@@ -2160,8 +2160,7 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
/* Copy in the data, plus any ss padding. */
if (!data_blob_append(NULL, &state->rpc_out,
- prs_data_p(state->req_data)
- + state->req_data_sent,
+ state->req_data->data + state->req_data_sent,
data_sent_thistime)) {
return NT_STATUS_NO_MEMORY;
}
diff --git a/source3/rpc_client/ndr.c b/source3/rpc_client/ndr.c
index 2fb9655207..a1642c03ff 100644
--- a/source3/rpc_client/ndr.c
+++ b/source3/rpc_client/ndr.c
@@ -24,7 +24,7 @@
struct cli_do_rpc_ndr_state {
const struct ndr_interface_call *call;
- prs_struct q_ps;
+ DATA_BLOB q_pdu;
DATA_BLOB r_pdu;
void *r;
};
@@ -41,9 +41,7 @@ struct tevent_req *cli_do_rpc_ndr_send(TALLOC_CTX *mem_ctx,
struct tevent_req *req, *subreq;
struct cli_do_rpc_ndr_state *state;
struct ndr_push *push;
- DATA_BLOB blob;
enum ndr_err_code ndr_err;
- bool ret;
req = tevent_req_create(mem_ctx, &state,
struct cli_do_rpc_ndr_state);
@@ -65,7 +63,7 @@ struct tevent_req *cli_do_rpc_ndr_send(TALLOC_CTX *mem_ctx,
state->call->name, NDR_IN, r);
}
- push = ndr_push_init_ctx(talloc_tos());
+ push = ndr_push_init_ctx(state);
if (tevent_req_nomem(push, req)) {
return tevent_req_post(req, ev);
}
@@ -77,16 +75,11 @@ struct tevent_req *cli_do_rpc_ndr_send(TALLOC_CTX *mem_ctx,
return tevent_req_post(req, ev);
}
- blob = ndr_push_blob(push);
- ret = prs_init_data_blob(&state->q_ps, &blob, state);
+ state->q_pdu = ndr_push_blob(push);
+ talloc_steal(mem_ctx, state->q_pdu.data);
TALLOC_FREE(push);
- if (!ret) {
- tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
- return tevent_req_post(req, ev);
- }
-
- subreq = rpc_api_pipe_req_send(state, ev, cli, opnum, &state->q_ps);
+ subreq = rpc_api_pipe_req_send(state, ev, cli, opnum, &state->q_pdu);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}