diff options
author | Stefan Metzmacher <metze@samba.org> | 2015-10-28 12:27:43 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2016-10-26 11:20:13 +0200 |
commit | 1c34351afccc7e47bc931a9efd031304bf095a2c (patch) | |
tree | 4b44b242e74ae2a9ad01e5188de83d1905a24b41 /librpc/rpc | |
parent | fc65e48cbef3a6fe2171fda069f77e7d561b6c3f (diff) | |
download | samba-1c34351afccc7e47bc931a9efd031304bf095a2c.tar.gz |
librpc/rpc: make use of dcerpc_pull_ncacn_packet() in dcerpc_read_ncacn_packet_done()
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'librpc/rpc')
-rw-r--r-- | librpc/rpc/dcerpc_util.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/librpc/rpc/dcerpc_util.c b/librpc/rpc/dcerpc_util.c index e978b7ef17d..6f032878c05 100644 --- a/librpc/rpc/dcerpc_util.c +++ b/librpc/rpc/dcerpc_util.c @@ -390,8 +390,7 @@ struct tevent_req *dcerpc_read_ncacn_packet_send(TALLOC_CTX *mem_ctx, return NULL; } - state->buffer = data_blob_const(NULL, 0); - state->pkt = talloc(state, struct ncacn_packet); + state->pkt = talloc_zero(state, struct ncacn_packet); if (tevent_req_nomem(state->pkt, req)) { goto post; } @@ -489,8 +488,6 @@ static void dcerpc_read_ncacn_packet_done(struct tevent_req *subreq) struct dcerpc_read_ncacn_packet_state); int ret; int sys_errno; - struct ndr_pull *ndr; - enum ndr_err_code ndr_err; NTSTATUS status; ret = tstream_readv_pdu_recv(subreq, &sys_errno); @@ -501,29 +498,10 @@ static void dcerpc_read_ncacn_packet_done(struct tevent_req *subreq) return; } - ndr = ndr_pull_init_blob(&state->buffer, state->pkt); - if (tevent_req_nomem(ndr, req)) { - return; - } - - if (!(CVAL(ndr->data, DCERPC_DREP_OFFSET) & DCERPC_DREP_LE)) { - ndr->flags |= LIBNDR_FLAG_BIGENDIAN; - } - - if (CVAL(ndr->data, DCERPC_PFC_OFFSET) & DCERPC_PFC_FLAG_OBJECT_UUID) { - ndr->flags |= LIBNDR_FLAG_OBJECT_PRESENT; - } - - ndr_err = ndr_pull_ncacn_packet(ndr, NDR_SCALARS|NDR_BUFFERS, state->pkt); - TALLOC_FREE(ndr); - if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - status = ndr_map_error2ntstatus(ndr_err); - tevent_req_nterror(req, status); - return; - } - - if (state->pkt->frag_length != state->buffer.length) { - tevent_req_nterror(req, NT_STATUS_RPC_PROTOCOL_ERROR); + status = dcerpc_pull_ncacn_packet(state->pkt, + &state->buffer, + state->pkt); + if (tevent_req_nterror(req, status)) { return; } |