From: Stefan Metzmacher Date: Fri, 27 Sep 2024 07:38:19 +0000 (+0200) Subject: s3:rpc_client: pass remote_{name,sockaddr} to rpccli_setup_netlogon_creds[_locked]() X-Git-Tag: tdb-1.4.13~1039 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=628d7b6f2e626c9c530473d06c038dfec9cbd17a;p=thirdparty%2Fsamba.git s3:rpc_client: pass remote_{name,sockaddr} to rpccli_setup_netlogon_creds[_locked]() 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 Reviewed-by: Volker Lendecke --- diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index 7f0ab7c82ed..fe28e2669a2 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -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, diff --git a/source3/rpc_client/cli_netlogon.h b/source3/rpc_client/cli_netlogon.h index ce37d12318a..82c88b14130 100644 --- a/source3/rpc_client/cli_netlogon.h +++ b/source3/rpc_client/cli_netlogon.h @@ -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); diff --git a/source3/rpc_client/cli_pipe_schannel.c b/source3/rpc_client/cli_pipe_schannel.c index abfdd8d5b5a..a8f8bf4cef4 100644 --- a/source3/rpc_client/cli_pipe_schannel.c +++ b/source3/rpc_client/cli_pipe_schannel.c @@ -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); diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index 95b6baf32b0..c08a75d4359 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -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);