summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/rpc_client/cli_pipe.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index e793575c26..3c79c70d49 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2124,7 +2124,6 @@ static NTSTATUS create_rpc_bind_req(struct rpc_pipe_client *cli,
********************************************************************/
static NTSTATUS add_ntlmssp_auth_footer(struct rpc_pipe_client *cli,
- RPC_HDR *phdr,
uint32 ss_padding_len,
prs_struct *outgoing_pdu)
{
@@ -2210,7 +2209,6 @@ static NTSTATUS add_ntlmssp_auth_footer(struct rpc_pipe_client *cli,
********************************************************************/
static NTSTATUS add_schannel_auth_footer(struct rpc_pipe_client *cli,
- RPC_HDR *phdr,
uint32 ss_padding_len,
prs_struct *outgoing_pdu)
{
@@ -2442,8 +2440,6 @@ struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
bool *is_last_frag)
{
- RPC_HDR hdr;
- RPC_HDR_REQ hdr_req;
uint32_t data_sent_thistime;
uint16_t auth_len;
uint16_t frag_len;
@@ -2452,6 +2448,8 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
uint32_t data_left;
char pad[8] = { 0, };
NTSTATUS status;
+ union dcerpc_payload u;
+ DATA_BLOB blob;
data_left = prs_offset(state->req_data) - state->req_data_sent;
@@ -2470,20 +2468,25 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
return NT_STATUS_NO_MEMORY;
}
- /* Create and marshall the header and request header. */
- init_rpc_hdr(&hdr, DCERPC_PKT_REQUEST, flags, state->call_id, frag_len,
- auth_len);
+ ZERO_STRUCT(u.request);
- if (!smb_io_rpc_hdr("hdr ", &hdr, &state->outgoing_frag, 0)) {
- return NT_STATUS_NO_MEMORY;
- }
+ u.request.alloc_hint = prs_offset(state->req_data);
+ u.request.context_id = 0;
+ u.request.opnum = state->op_num;
- /* Create the rpc request RPC_HDR_REQ */
- init_rpc_hdr_req(&hdr_req, prs_offset(state->req_data),
- state->op_num);
+ status = dcerpc_push_ncacn_packet(prs_get_mem_context(&state->outgoing_frag),
+ DCERPC_PKT_REQUEST,
+ flags,
+ frag_len,
+ auth_len,
+ state->call_id,
+ u,
+ &blob);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
- if (!smb_io_rpc_hdr_req("hdr_req", &hdr_req,
- &state->outgoing_frag, 0)) {
+ if (!prs_copy_data_in(&state->outgoing_frag, (const char *)blob.data, blob.length)) {
return NT_STATUS_NO_MEMORY;
}
@@ -2506,11 +2509,11 @@ static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
break;
case PIPE_AUTH_TYPE_NTLMSSP:
case PIPE_AUTH_TYPE_SPNEGO_NTLMSSP:
- status = add_ntlmssp_auth_footer(state->cli, &hdr, ss_padding,
+ status = add_ntlmssp_auth_footer(state->cli, ss_padding,
&state->outgoing_frag);
break;
case PIPE_AUTH_TYPE_SCHANNEL:
- status = add_schannel_auth_footer(state->cli, &hdr, ss_padding,
+ status = add_schannel_auth_footer(state->cli, ss_padding,
&state->outgoing_frag);
break;
default: