netlogon_creds_cli: Pass "capabilities" up from creds_cli_check
authorVolker Lendecke <vl@samba.org>
Tue, 19 Sep 2017 23:45:27 +0000 (16:45 -0700)
committerVolker Lendecke <vl@samba.org>
Mon, 25 Sep 2017 07:43:13 +0000 (09:43 +0200)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libcli/auth/netlogon_creds_cli.c
libcli/auth/netlogon_creds_cli.h
source3/rpc_client/cli_netlogon.c
source3/rpc_client/cli_pipe.c

index 31bd98ddc948aa0d92192007055825209a830538..cb3d6a9eeb4a8a6fa56602a138ddccd7e05e34b7 100644 (file)
@@ -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;
index 62d11ac283e0393dc34ec2110d1fc2e59db355e8..56a2dd9bc77bf653dc5f7ff0eb97da210c39d8c6 100644 (file)
@@ -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,
index c315e69a90244fe738b183e8389617fb3654e20b..19b81a5f5a93c96fff009ade395c540e085bbe48 100644 (file)
@@ -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));
index c7042947b24a705852987914ad3d366fe32b1b6b..d449a828b5a5a9a75c53a8d6c20e72958da51012 100644 (file)
@@ -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)));