summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-10-13 15:42:32 +0200
committerAndreas Schneider <asn@cryptomilk.org>2016-10-26 11:20:15 +0200
commit4e3823ae0429c376dda71bbbda46d5e5f1a0a7b6 (patch)
treea14e89427d8a20a5721cfc9ba4a05bedc2342c53 /source4/librpc
parent791186d8247fdce4870b4473f61a9265ffccd17d (diff)
downloadsamba-4e3823ae0429c376dda71bbbda46d5e5f1a0a7b6.tar.gz
s4:librpc/rpc: convert ncacn_pull_request_auth() into a generic ncacn_pull_pkt_auth()
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/rpc/dcerpc.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index dcc098cb628..45e6f680361 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -715,9 +715,15 @@ static struct ndr_pull *ndr_pull_init_flags(struct dcecli_connection *c,
/*
parse the authentication information on a dcerpc response packet
*/
-static NTSTATUS ncacn_pull_request_auth(struct dcecli_connection *c, TALLOC_CTX *mem_ctx,
- DATA_BLOB *raw_packet,
- struct ncacn_packet *pkt)
+static NTSTATUS ncacn_pull_pkt_auth(struct dcecli_connection *c,
+ TALLOC_CTX *mem_ctx,
+ enum dcerpc_pkt_type ptype,
+ uint8_t required_flags,
+ uint8_t optional_flags,
+ uint8_t payload_offset,
+ DATA_BLOB *payload_and_verifier,
+ DATA_BLOB *raw_packet,
+ const struct ncacn_packet *pkt)
{
const struct dcerpc_auth tmp_auth = {
.auth_type = c->security_state.auth_type,
@@ -729,12 +735,11 @@ static NTSTATUS ncacn_pull_request_auth(struct dcecli_connection *c, TALLOC_CTX
status = dcerpc_ncacn_pull_pkt_auth(&tmp_auth,
c->security_state.generic_state,
mem_ctx,
- DCERPC_PKT_RESPONSE,
- 0, /* required_flags */
- DCERPC_PFC_FLAG_FIRST |
- DCERPC_PFC_FLAG_LAST,
- DCERPC_REQUEST_LENGTH,
- &pkt->u.response.stub_and_verifier,
+ ptype,
+ required_flags,
+ optional_flags,
+ payload_offset,
+ payload_and_verifier,
raw_packet,
pkt);
if (NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROTOCOL_ERROR)) {
@@ -1432,8 +1437,19 @@ static void dcerpc_request_recv_data(struct dcecli_connection *c,
to run the auth routines so that we don't get the sign/seal
info out of step with the server
*/
- if (pkt->ptype == DCERPC_PKT_RESPONSE) {
- status = ncacn_pull_request_auth(c, raw_packet->data, raw_packet, pkt);
+ switch (pkt->ptype) {
+ case DCERPC_PKT_RESPONSE:
+ status = ncacn_pull_pkt_auth(c, raw_packet->data,
+ DCERPC_PKT_RESPONSE,
+ 0, /* required_flags */
+ DCERPC_PFC_FLAG_FIRST |
+ DCERPC_PFC_FLAG_LAST,
+ DCERPC_REQUEST_LENGTH,
+ &pkt->u.response.stub_and_verifier,
+ raw_packet, pkt);
+ break;
+ default:
+ break;
}
/* find the matching request */