From 32e823e08df305919ba0a001a389eb88b7d1be68 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 19 Sep 2017 16:45:27 -0700 Subject: [PATCH] netlogon_creds_cli: Pass "capabilities" up from creds_cli_check Signed-off-by: Volker Lendecke Reviewed-by: Andrew Bartlett --- libcli/auth/netlogon_creds_cli.c | 14 +++++++++++--- libcli/auth/netlogon_creds_cli.h | 6 ++++-- source3/rpc_client/cli_netlogon.c | 3 ++- source3/rpc_client/cli_pipe.c | 3 ++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/libcli/auth/netlogon_creds_cli.c b/libcli/auth/netlogon_creds_cli.c index 31bd98ddc94..cb3d6a9eeb4 100644 --- a/libcli/auth/netlogon_creds_cli.c +++ b/libcli/auth/netlogon_creds_cli.c @@ -1728,8 +1728,11 @@ static void netlogon_creds_cli_check_caps(struct tevent_req *subreq) tevent_req_done(req); } -NTSTATUS netlogon_creds_cli_check_recv(struct tevent_req *req) +NTSTATUS netlogon_creds_cli_check_recv(struct tevent_req *req, + union netr_Capabilities *capabilities) { + struct netlogon_creds_cli_check_state *state = tevent_req_data( + req, struct netlogon_creds_cli_check_state); NTSTATUS status; if (tevent_req_is_nterror(req, &status)) { @@ -1738,12 +1741,17 @@ NTSTATUS netlogon_creds_cli_check_recv(struct tevent_req *req) return status; } + if (capabilities != NULL) { + *capabilities = state->caps; + } + tevent_req_received(req); return NT_STATUS_OK; } NTSTATUS netlogon_creds_cli_check(struct netlogon_creds_cli_context *context, - struct dcerpc_binding_handle *b) + struct dcerpc_binding_handle *b, + union netr_Capabilities *capabilities) { TALLOC_CTX *frame = talloc_stackframe(); struct tevent_context *ev; @@ -1761,7 +1769,7 @@ NTSTATUS netlogon_creds_cli_check(struct netlogon_creds_cli_context *context, if (!tevent_req_poll_ntstatus(req, ev, &status)) { goto fail; } - status = netlogon_creds_cli_check_recv(req); + status = netlogon_creds_cli_check_recv(req, capabilities); fail: TALLOC_FREE(frame); return status; diff --git a/libcli/auth/netlogon_creds_cli.h b/libcli/auth/netlogon_creds_cli.h index 62d11ac283e..56a2dd9bc77 100644 --- a/libcli/auth/netlogon_creds_cli.h +++ b/libcli/auth/netlogon_creds_cli.h @@ -116,9 +116,11 @@ struct tevent_req *netlogon_creds_cli_check_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct netlogon_creds_cli_context *context, struct dcerpc_binding_handle *b); -NTSTATUS netlogon_creds_cli_check_recv(struct tevent_req *req); +NTSTATUS netlogon_creds_cli_check_recv(struct tevent_req *req, + union netr_Capabilities *capabilities); NTSTATUS netlogon_creds_cli_check(struct netlogon_creds_cli_context *context, - struct dcerpc_binding_handle *b); + struct dcerpc_binding_handle *b, + union netr_Capabilities *capabilities); struct tevent_req *netlogon_creds_cli_ServerPasswordSet_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index c315e69a902..19b81a5f5a9 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -446,7 +446,8 @@ again: goto fail; } - status = netlogon_creds_cli_check(creds_ctx, rpccli->binding_handle); + status = netlogon_creds_cli_check(creds_ctx, rpccli->binding_handle, + NULL); if (!NT_STATUS_IS_OK(status)) { DBG_WARNING("netlogon_creds_cli_check failed: %s\n", nt_errstr(status)); diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index c7042947b24..d449a828b5a 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -3370,7 +3370,8 @@ NTSTATUS cli_rpc_pipe_open_schannel_with_creds(struct cli_state *cli, if (ndr_syntax_id_equal(&table->syntax_id, &ndr_table_netlogon.syntax_id)) { status = netlogon_creds_cli_check(netlogon_creds, - rpccli->binding_handle); + rpccli->binding_handle, + NULL); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("netlogon_creds_cli_check failed with %s\n", nt_errstr(status))); -- 2.11.4.GIT