summaryrefslogtreecommitdiff
path: root/librpc/rpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-10-28 12:27:43 +0100
committerAndreas Schneider <asn@cryptomilk.org>2016-10-26 11:20:13 +0200
commit1c34351afccc7e47bc931a9efd031304bf095a2c (patch)
tree4b44b242e74ae2a9ad01e5188de83d1905a24b41 /librpc/rpc
parentfc65e48cbef3a6fe2171fda069f77e7d561b6c3f (diff)
downloadsamba-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.c32
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;
}