]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:rpc_client: pass remote_{name,sockaddr} to rpccli_setup_netlogon_creds[_locked]()
authorStefan Metzmacher <metze@samba.org>
Fri, 27 Sep 2024 07:38:19 +0000 (09:38 +0200)
committerVolker Lendecke <vl@samba.org>
Sun, 29 Sep 2024 06:56:33 +0000 (06:56 +0000)
We shouldd not rely on cli_state to be a valid pointer
(at least not when NCACN_IP_TCP is used...)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/rpc_client/cli_netlogon.c
source3/rpc_client/cli_netlogon.h
source3/rpc_client/cli_pipe_schannel.c
source3/rpcclient/rpcclient.c

index 7f0ab7c82edc1ed636cca14772d18be3ce1fd08e..fe28e2669a2f59368cd90395cb202e70b094e5d4 100644 (file)
@@ -156,6 +156,8 @@ NTSTATUS rpccli_create_netlogon_creds_ctx(
 static NTSTATUS rpccli_setup_netlogon_creds_locked(
        struct cli_state *cli,
        enum dcerpc_transport_t transport,
+       const char *remote_name,
+       const struct sockaddr_storage *remote_sockaddr,
        struct netlogon_creds_cli_context *creds_ctx,
        bool force_reauth,
        struct cli_credentials *cli_creds,
@@ -170,8 +172,6 @@ static NTSTATUS rpccli_setup_netlogon_creds_locked(
        const struct samr_Password *nt_hashes[2] = { NULL, NULL };
        uint8_t idx_nt_hashes = 0;
        NTSTATUS status;
-       const char *remote_name = NULL;
-       const struct sockaddr_storage *remote_sockaddr = NULL;
 
        status = netlogon_creds_cli_get(creds_ctx, frame, &creds);
        if (NT_STATUS_IS_OK(status)) {
@@ -210,9 +210,6 @@ static NTSTATUS rpccli_setup_netlogon_creds_locked(
                num_nt_hashes = 2;
        }
 
-       remote_name = smbXcli_conn_remote_name(cli->conn);
-       remote_sockaddr = smbXcli_conn_remote_sockaddr(cli->conn);
-
        status = cli_rpc_pipe_open_noauth_transport(cli,
                                                    transport,
                                                    &ndr_table_netlogon,
@@ -266,6 +263,8 @@ done:
 NTSTATUS rpccli_setup_netlogon_creds(
        struct cli_state *cli,
        enum dcerpc_transport_t transport,
+       const char *remote_name,
+       const struct sockaddr_storage *remote_sockaddr,
        struct netlogon_creds_cli_context *creds_ctx,
        bool force_reauth,
        struct cli_credentials *cli_creds)
@@ -286,6 +285,8 @@ NTSTATUS rpccli_setup_netlogon_creds(
 
        status = rpccli_setup_netlogon_creds_locked(cli,
                                                    transport,
+                                                   remote_name,
+                                                   remote_sockaddr,
                                                    creds_ctx,
                                                    force_reauth,
                                                    cli_creds,
@@ -418,6 +419,8 @@ again:
 
        status = rpccli_setup_netlogon_creds_locked(cli,
                                                    transport,
+                                                   remote_name,
+                                                   remote_sockaddr,
                                                    creds_ctx,
                                                    true,
                                                    trust_creds,
index ce37d12318a82ffb85d2e75a6d76b86762829314..82c88b141302d1b8bf32fee2c4e5b446a590dc69 100644 (file)
@@ -42,6 +42,8 @@ NTSTATUS rpccli_create_netlogon_creds_ctx(
 NTSTATUS rpccli_setup_netlogon_creds(
        struct cli_state *cli,
        enum dcerpc_transport_t transport,
+       const char *remote_name,
+       const struct sockaddr_storage *remote_sockaddr,
        struct netlogon_creds_cli_context *creds_ctx,
        bool force_reauth,
        struct cli_credentials *cli_creds);
index abfdd8d5b5ac5d4676909110f62f8b8d5a892f41..a8f8bf4cef485c5a719acc63d9a9a25fb040d17c 100644 (file)
@@ -89,7 +89,10 @@ NTSTATUS cli_rpc_pipe_open_schannel(struct cli_state *cli,
                goto done;
        }
 
-       status = rpccli_setup_netlogon_creds(cli, transport,
+       status = rpccli_setup_netlogon_creds(cli,
+                                            transport,
+                                            remote_name,
+                                            remote_sockaddr,
                                             netlogon_creds,
                                             false, /* force_reauth */
                                             cli_creds);
index 95b6baf32b031fbf2122666bee4bc885cc1c9d67..c08a75d4359f79b025cce9dd79127e0ba4b40058 100644 (file)
@@ -1035,6 +1035,8 @@ static NTSTATUS do_cmd(struct cli_state *cli,
                                ntresult = rpccli_setup_netlogon_creds(
                                        cli,
                                        NCACN_NP,
+                                       remote_name,
+                                       remote_sockaddr,
                                        rpcclient_netlogon_creds,
                                        false, /* force_reauth */
                                        trust_creds);