The branch, master has been updated via 96b5cfe4e6c s3:libsmb: Pass a memory context to get_ipc_connect() via 56426eda9bd s3:libsmb: Make get_ipc_connect() static via bf688e0d2af s3:libnet: Fix memory leak in libnet_join_connect_dc_ipc() via d2297b41a20 s3:libsmb: Pass memory context to cli_full_connection_creds() via 5c63d5bdab1 s3:libsmb: Pass memory context to cli_full_connection_creds_recv() via 8888f95947b s3:libsmb: Pass a memory context to cli_start_connection() via f3fda1e440c s3:libsmb: Pass a memory context to cli_start_connection_recv() via bbb21797bf6 s3:libsmb: Pass memory context to cli_connect_nb() via 4f62937dfab s3:torture: Remove trailing spaces in torture.c via c8eabee18bd s3:nmbd: Remove trailing spaces in nmbd_synclists.c via 2154bd37e41 s3:libsmb: Pass a memory context to cli_connect_nb_recv() from 73e3ffb8418 python:tests: Store keys as bytes rather than as lists of ints
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 96b5cfe4e6c4b727c286b0856446c1d5a31b920b Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 15:53:29 2023 +0100 s3:libsmb: Pass a memory context to get_ipc_connect() Indirect leak of 792 byte(s) in 1 object(s) allocated from: #0 0x7f261b8dc03f in malloc (/lib64/libasan.so.8+0xdc03f) (BuildId: 3e1694ad218c99a8b1b69231666a27df63cf19d0) #1 0x7f261b2c2bc2 in __talloc_with_prefix ../../lib/talloc/talloc.c:783 #2 0x7f261b2c473d in __talloc ../../lib/talloc/talloc.c:825 #3 0x7f261b2c473d in _talloc_named_const ../../lib/talloc/talloc.c:982 #4 0x7f261b2c473d in _talloc_zero ../../lib/talloc/talloc.c:2421 #5 0x7f2618cb42bc in smbXcli_conn_create ../../libcli/smb/smbXcli_base.c:350 #6 0x7f261a74acd3 in cli_state_create ../../source3/libsmb/clientgen.c:196 #7 0x7f261a751f0d in cli_connect_nb_done ../../source3/libsmb/cliconnect.c:2715 #8 0x7f261a69bacf in _tevent_req_notify_callback ../../lib/tevent/tevent_req.c:177 #9 0x7f261a69bd06 in tevent_req_finish ../../lib/tevent/tevent_req.c:234 #10 0x7f261a69bd6e in _tevent_req_done ../../lib/tevent/tevent_req.c:240 #11 0x7f261a752dde in cli_connect_sock_done ../../source3/libsmb/cliconnect.c:2624 #12 0x7f261a69bacf in _tevent_req_notify_callback ../../lib/tevent/tevent_req.c:177 #13 0x7f261a69bd06 in tevent_req_finish ../../lib/tevent/tevent_req.c:234 #14 0x7f261a69bd6e in _tevent_req_done ../../lib/tevent/tevent_req.c:240 #15 0x7f261a7ba2c4 in smbsock_any_connect_connected ../../source3/libsmb/smbsock_connect.c:788 #16 0x7f261a69bacf in _tevent_req_notify_callback ../../lib/tevent/tevent_req.c:177 #17 0x7f261a69bd06 in tevent_req_finish ../../lib/tevent/tevent_req.c:234 #18 0x7f261a69bd6e in _tevent_req_done ../../lib/tevent/tevent_req.c:240 #19 0x7f261a7b75ad in smbsock_connect_connected ../../source3/libsmb/smbsock_connect.c:524 #20 0x7f261a69bacf in _tevent_req_notify_callback ../../lib/tevent/tevent_req.c:177 #21 0x7f261a69bd06 in tevent_req_finish ../../lib/tevent/tevent_req.c:234 #22 0x7f261a69bd6e in _tevent_req_done ../../lib/tevent/tevent_req.c:240 #23 0x7f261b4b400a in open_socket_out_connected ../../source3/lib/util_sock.c:484 #24 0x7f261a69bacf in _tevent_req_notify_callback ../../lib/tevent/tevent_req.c:177 #25 0x7f261a69bd06 in tevent_req_finish ../../lib/tevent/tevent_req.c:234 #26 0x7f261a69be3e in tevent_req_trigger ../../lib/tevent/tevent_req.c:291 #27 0x7f261a699df4 in tevent_common_invoke_immediate_handler ../../lib/tevent/tevent_immediate.c:190 #28 0x7f261a699e31 in tevent_common_loop_immediate ../../lib/tevent/tevent_immediate.c:236 #29 0x7f261a6ad3ec in epoll_event_loop_once ../../lib/tevent/tevent_epoll.c:905 #30 0x7f261a6a679e in std_event_loop_once ../../lib/tevent/tevent_standard.c:110 #31 0x7f261a696538 in _tevent_loop_once ../../lib/tevent/tevent.c:820 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> Autobuild-User(master): Volker Lendecke <v...@samba.org> Autobuild-Date(master): Mon Apr 29 09:48:47 UTC 2024 on atb-devel-224 commit 56426eda9bdb0c530e3ae6c69a9ce261af5469a7 Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 15:52:05 2023 +0100 s3:libsmb: Make get_ipc_connect() static Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit bf688e0d2afb8e2d28ac06a306296fd071dd6128 Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 15:21:49 2023 +0100 s3:libnet: Fix memory leak in libnet_join_connect_dc_ipc() Direct leak of 885 byte(s) in 1 object(s) allocated from: #0 0x7f261b8dc03f in malloc (/lib64/libasan.so.8+0xdc03f) (BuildId: 3e1694ad218c99a8b1b69231666a27df63cf19d0) #1 0x7f261b2c2bc2 in __talloc_with_prefix ../../lib/talloc/talloc.c:783 #2 0x7f261b2c543c in _talloc_pool ../../lib/talloc/talloc.c:838 #3 0x7f261b2c543c in _talloc_pooled_object ../../lib/talloc/talloc.c:906 #4 0x7f261a69cac9 in __tevent_req_create ../../lib/tevent/tevent_req.c:98 #5 0x7f261a75bf55 in cli_full_connection_creds_send ../../source3/libsmb/cliconnect.c:3455 #6 0x7f261a75c4b7 in cli_full_connection_creds ../../source3/libsmb/cliconnect.c:3818 #7 0x7f261b70d39f in libnet_join_connect_dc_ipc ../../source3/libnet/libnet_join.c:1146 #8 0x7f261b715794 in libnet_join_lookup_dc_rpc ../../source3/libnet/libnet_join.c:1188 #9 0x7f261b715794 in libnet_DomainJoin ../../source3/libnet/libnet_join.c:2812 #10 0x7f261b715794 in libnet_Join ../../source3/libnet/libnet_join.c:3040 #11 0x555bd93671ea in net_ads_join ../../source3/utils/net_ads.c:1855 #12 0x555bd9415ca9 in net_join ../../source3/utils/net_join.c:45 #13 0x555bd940b972 in net_run_function ../../source3/utils/net_util.c:464 #14 0x555bd9363129 in main ../../source3/utils/net.c:1372 #15 0x7f2616a281af in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit d2297b41a20056ed44ed27fee10fab640a6fe7a3 Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 15:07:53 2023 +0100 s3:libsmb: Pass memory context to cli_full_connection_creds() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 5c63d5bdab156d1b14e07b56d02032f485530ff0 Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 14:57:42 2023 +0100 s3:libsmb: Pass memory context to cli_full_connection_creds_recv() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 8888f95947b67371696acfa9f76a61b55302d312 Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 23 14:51:48 2023 +0100 s3:libsmb: Pass a memory context to cli_start_connection() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit f3fda1e440cda83e091d0039a114ad7c15364787 Author: Andreas Schneider <a...@samba.org> Date: Tue Oct 31 15:05:35 2023 +0100 s3:libsmb: Pass a memory context to cli_start_connection_recv() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit bbb21797bf6b48857af85579240e30cbc00e3f7f Author: Andreas Schneider <a...@samba.org> Date: Tue Oct 31 15:13:04 2023 +0100 s3:libsmb: Pass memory context to cli_connect_nb() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 4f62937dfaba644755ff9f349145d1a5704e5f88 Author: Andreas Schneider <a...@samba.org> Date: Thu Apr 25 11:55:17 2024 +0200 s3:torture: Remove trailing spaces in torture.c Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit c8eabee18bd0c634f8b8b5ba878c395daea609b0 Author: Andreas Schneider <a...@samba.org> Date: Thu Apr 25 11:49:31 2024 +0200 s3:nmbd: Remove trailing spaces in nmbd_synclists.c Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> commit 2154bd37e41153676f29001b556698b09e4edff1 Author: Andreas Schneider <a...@samba.org> Date: Tue Oct 31 14:58:49 2023 +0100 s3:libsmb: Pass a memory context to cli_connect_nb_recv() Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> ----------------------------------------------------------------------- Summary of changes: examples/fuse/smb2mount.c | 15 ++-- examples/winexe/winexe.c | 2 + source3/client/client.c | 3 +- source3/client/smbspool.c | 10 ++- source3/libnet/libnet_join.c | 19 +++-- source3/libsmb/cliconnect.c | 67 ++++++++++------ source3/libsmb/clidfs.c | 18 ++++- source3/libsmb/libsmb_server.c | 39 ++++++--- source3/libsmb/passchange.c | 11 ++- source3/libsmb/proto.h | 22 +++-- source3/libsmb/pylibsmb.c | 2 +- source3/nmbd/nmbd_synclists.c | 30 ++++--- source3/rpc_server/spoolss/srv_spoolss_nt.c | 14 +++- source3/rpcclient/cmd_spoolss.c | 15 ++-- source3/rpcclient/rpcclient.c | 21 ++--- source3/torture/locktest2.c | 3 +- source3/torture/torture.c | 119 ++++++++++++++++------------ source3/utils/mdsearch.c | 3 +- source3/utils/net_ads.c | 15 ++-- source3/utils/net_rpc.c | 12 ++- source3/utils/net_time.c | 11 ++- source3/utils/net_util.c | 30 ++++--- source3/utils/netlookup.c | 15 ++-- source3/utils/smbcacls.c | 15 ++-- source3/utils/smbcquotas.c | 15 ++-- source3/utils/wspsearch.c | 19 ++--- 26 files changed, 352 insertions(+), 193 deletions(-) Changeset truncated at 500 lines: diff --git a/examples/fuse/smb2mount.c b/examples/fuse/smb2mount.c index 0594ced1308..69c14af9df1 100644 --- a/examples/fuse/smb2mount.c +++ b/examples/fuse/smb2mount.c @@ -34,11 +34,16 @@ static struct cli_state *connect_one(struct cli_credentials *creds, NTSTATUS nt_status; uint32_t flags = 0; - nt_status = cli_full_connection_creds(&c, lp_netbios_name(), server, - NULL, port, - share, "?????", - creds, - flags); + nt_status = cli_full_connection_creds(talloc_tos(), + &c, + lp_netbios_name(), + server, + NULL, + port, + share, + "?????", + creds, + flags); if (!NT_STATUS_IS_OK(nt_status)) { DBG_ERR("cli_full_connection failed! (%s)\n", nt_errstr(nt_status)); diff --git a/examples/winexe/winexe.c b/examples/winexe/winexe.c index 5c2529cb2de..774d07a14d0 100644 --- a/examples/winexe/winexe.c +++ b/examples/winexe/winexe.c @@ -295,6 +295,7 @@ static NTSTATUS winexe_svc_upload( const DATA_BLOB *binary = NULL; status = cli_full_connection_creds( + talloc_tos(), &cli, NULL, hostname, @@ -1857,6 +1858,7 @@ int main(int argc, char *argv[]) } status = cli_full_connection_creds( + talloc_tos(), &cli, lp_netbios_name(), options.hostname, diff --git a/source3/client/client.c b/source3/client/client.c index 267e3ebeb99..65012f51260 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -6407,7 +6407,8 @@ static int do_message_op(struct cli_credentials *creds) return 1; } - status = cli_connect_nb(desthost, have_ip ? &dest_ss : NULL, + status = cli_connect_nb(talloc_tos(), + desthost, have_ip ? &dest_ss : NULL, port ? port : NBT_SMB_PORT, name_type, lp_netbios_name(), SMB_SIGNING_OFF, diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c index b3da87556d2..363f14a085f 100644 --- a/source3/client/smbspool.c +++ b/source3/client/smbspool.c @@ -544,8 +544,14 @@ smb_complete_connection(struct cli_state **output_cli, struct cli_credentials *creds = NULL; /* Start the SMB connection */ - nt_status = cli_start_connection(&cli, myname, server, NULL, port, - SMB_SIGNING_DEFAULT, 0); + nt_status = cli_start_connection(talloc_tos(), + &cli, + myname, + server, + NULL, + port, + SMB_SIGNING_DEFAULT, + 0); if (!NT_STATUS_IS_OK(nt_status)) { fprintf(stderr, "ERROR: Connection failed: %s\n", nt_errstr(nt_status)); return nt_status; diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index d3194bd181b..89e5239fd9e 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -1110,7 +1110,8 @@ static bool libnet_join_joindomain_store_secrets(TALLOC_CTX *mem_ctx, Connect dc's IPC$ share ****************************************************************/ -static NTSTATUS libnet_join_connect_dc_ipc(const char *dc, +static NTSTATUS libnet_join_connect_dc_ipc(TALLOC_CTX *mem_ctx, + const char *dc, const char *user, const char *domain, const char *pass, @@ -1143,7 +1144,8 @@ static NTSTATUS libnet_join_connect_dc_ipc(const char *dc, return NT_STATUS_NO_MEMORY; } - status = cli_full_connection_creds(cli, + status = cli_full_connection_creds(mem_ctx, + cli, NULL, dc, NULL, 0, @@ -1184,7 +1186,8 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX *mem_ctx, use_kerberos = false; } - status = libnet_join_connect_dc_ipc(r->in.dc_name, + status = libnet_join_connect_dc_ipc(mem_ctx, + r->in.dc_name, account, domain, password, @@ -1773,7 +1776,9 @@ NTSTATUS libnet_join_ok(struct messaging_context *msg_ctx, CRED_SPECIFIED); } - status = cli_full_connection_creds(&cli, NULL, + status = cli_full_connection_creds(frame, + &cli, + NULL, dc_name, NULL, 0, "IPC$", "IPC", @@ -1789,7 +1794,8 @@ NTSTATUS libnet_join_ok(struct messaging_context *msg_ctx, return NT_STATUS_NO_MEMORY; } - status = cli_full_connection_creds(&cli, + status = cli_full_connection_creds(frame, + &cli, NULL, dc_name, NULL, 0, @@ -1930,7 +1936,8 @@ static NTSTATUS libnet_join_unjoindomain_rpc(TALLOC_CTX *mem_ctx, ZERO_STRUCT(domain_pol); ZERO_STRUCT(user_pol); - status = libnet_join_connect_dc_ipc(r->in.dc_name, + status = libnet_join_connect_dc_ipc(mem_ctx, + r->in.dc_name, r->in.admin_account, r->in.admin_domain, r->in.admin_password, diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index b8f06330260..724cdfb99ea 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -2737,6 +2737,7 @@ static void cli_connect_nb_done(struct tevent_req *subreq) } static NTSTATUS cli_connect_nb_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, struct cli_state **pcli) { struct cli_connect_nb_state *state = tevent_req_data( @@ -2746,19 +2747,25 @@ static NTSTATUS cli_connect_nb_recv(struct tevent_req *req, if (tevent_req_is_nterror(req, &status)) { return status; } - *pcli = talloc_move(NULL, &state->cli); + *pcli = talloc_move(mem_ctx, &state->cli); return NT_STATUS_OK; } -NTSTATUS cli_connect_nb(const char *host, const struct sockaddr_storage *dest_ss, - uint16_t port, int name_type, const char *myname, - enum smb_signing_setting signing_state, int flags, struct cli_state **pcli) +NTSTATUS cli_connect_nb(TALLOC_CTX *mem_ctx, + const char *host, + const struct sockaddr_storage *dest_ss, + uint16_t port, + int name_type, + const char *myname, + enum smb_signing_setting signing_state, + int flags, + struct cli_state **pcli) { struct tevent_context *ev; struct tevent_req *req; NTSTATUS status = NT_STATUS_NO_MEMORY; - ev = samba_tevent_context_init(talloc_tos()); + ev = samba_tevent_context_init(mem_ctx); if (ev == NULL) { goto fail; } @@ -2773,7 +2780,7 @@ NTSTATUS cli_connect_nb(const char *host, const struct sockaddr_storage *dest_ss if (!tevent_req_poll_ntstatus(req, ev, &status)) { goto fail; } - status = cli_connect_nb_recv(req, pcli); + status = cli_connect_nb_recv(req, mem_ctx, pcli); fail: TALLOC_FREE(ev); return status; @@ -2894,7 +2901,7 @@ static void cli_start_connection_connected(struct tevent_req *subreq) req, struct cli_start_connection_state); NTSTATUS status; - status = cli_connect_nb_recv(subreq, &state->cli); + status = cli_connect_nb_recv(subreq, state, &state->cli); TALLOC_FREE(subreq); if (tevent_req_nterror(req, status)) { return; @@ -2939,6 +2946,7 @@ static void cli_start_connection_done(struct tevent_req *subreq) } static NTSTATUS cli_start_connection_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, struct cli_state **output_cli) { struct cli_start_connection_state *state = tevent_req_data( @@ -2948,12 +2956,13 @@ static NTSTATUS cli_start_connection_recv(struct tevent_req *req, if (tevent_req_is_nterror(req, &status)) { return status; } - *output_cli = state->cli; + *output_cli = talloc_move(mem_ctx, &state->cli); return NT_STATUS_OK; } -NTSTATUS cli_start_connection(struct cli_state **output_cli, +NTSTATUS cli_start_connection(TALLOC_CTX *mem_ctx, + struct cli_state **output_cli, const char *my_name, const char *dest_host, const struct sockaddr_storage *dest_ss, int port, @@ -2963,7 +2972,7 @@ NTSTATUS cli_start_connection(struct cli_state **output_cli, struct tevent_req *req; NTSTATUS status = NT_STATUS_NO_MEMORY; - ev = samba_tevent_context_init(talloc_tos()); + ev = samba_tevent_context_init(mem_ctx); if (ev == NULL) { goto fail; } @@ -2975,7 +2984,7 @@ NTSTATUS cli_start_connection(struct cli_state **output_cli, if (!tevent_req_poll_ntstatus(req, ev, &status)) { goto fail; } - status = cli_start_connection_recv(req, output_cli); + status = cli_start_connection_recv(req, mem_ctx, output_cli); fail: TALLOC_FREE(ev); return status; @@ -3501,7 +3510,7 @@ static void cli_full_connection_creds_conn_done(struct tevent_req *subreq) req, struct cli_full_connection_creds_state); NTSTATUS status; - status = cli_start_connection_recv(subreq, &state->cli); + status = cli_start_connection_recv(subreq, state, &state->cli); TALLOC_FREE(subreq); if (tevent_req_nterror(req, status)) { return; @@ -3782,7 +3791,8 @@ static void cli_full_connection_creds_tcon_done(struct tevent_req *subreq) } NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req, - struct cli_state **output_cli) + TALLOC_CTX *mem_ctx, + struct cli_state **output_cli) { struct cli_full_connection_creds_state *state = tevent_req_data( req, struct cli_full_connection_creds_state); @@ -3791,12 +3801,13 @@ NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req, if (tevent_req_is_nterror(req, &status)) { return status; } - *output_cli = state->cli; + *output_cli = talloc_move(mem_ctx, &state->cli); talloc_set_destructor(state, NULL); return NT_STATUS_OK; } -NTSTATUS cli_full_connection_creds(struct cli_state **output_cli, +NTSTATUS cli_full_connection_creds(TALLOC_CTX *mem_ctx, + struct cli_state **output_cli, const char *my_name, const char *dest_host, const struct sockaddr_storage *dest_ss, int port, @@ -3808,7 +3819,7 @@ NTSTATUS cli_full_connection_creds(struct cli_state **output_cli, struct tevent_req *req; NTSTATUS status = NT_STATUS_NO_MEMORY; - ev = samba_tevent_context_init(talloc_tos()); + ev = samba_tevent_context_init(mem_ctx); if (ev == NULL) { goto fail; } @@ -3822,7 +3833,7 @@ NTSTATUS cli_full_connection_creds(struct cli_state **output_cli, if (!tevent_req_poll_ntstatus(req, ev, &status)) { goto fail; } - status = cli_full_connection_creds_recv(req, output_cli); + status = cli_full_connection_creds_recv(req, mem_ctx, output_cli); fail: TALLOC_FREE(ev); return status; @@ -3947,9 +3958,10 @@ fail: /* Return a cli_state pointing at the IPC$ share for the given server */ -struct cli_state *get_ipc_connect(char *server, - struct sockaddr_storage *server_ss, - struct cli_credentials *creds) +static struct cli_state *get_ipc_connect(TALLOC_CTX *mem_ctx, + char *server, + struct sockaddr_storage *server_ss, + struct cli_credentials *creds) { struct cli_state *cli; NTSTATUS nt_status; @@ -3958,9 +3970,16 @@ struct cli_state *get_ipc_connect(char *server, flags |= CLI_FULL_CONNECTION_FORCE_SMB1; flags |= CLI_FULL_CONNECTION_IPC; - nt_status = cli_full_connection_creds(&cli, NULL, server, server_ss, 0, "IPC$", "IPC", + nt_status = cli_full_connection_creds(mem_ctx, + &cli, + NULL, + server, + server_ss, + 0, + "IPC$", + "IPC", creds, - flags); + flags); if (NT_STATUS_IS_OK(nt_status)) { return cli; @@ -3970,7 +3989,7 @@ struct cli_state *get_ipc_connect(char *server, fstring remote_name; if (name_status_find("*", 0, 0, server_ss, remote_name)) { - cli = get_ipc_connect(remote_name, server_ss, creds); + cli = get_ipc_connect(mem_ctx, remote_name, server_ss, creds); if (cli) return cli; } @@ -4035,7 +4054,7 @@ struct cli_state *get_ipc_connect_master_ip(TALLOC_CTX *ctx, DEBUG(4, ("found master browser %s, %s\n", name, addr)); print_sockaddr(addr, sizeof(addr), &server_ss); - cli = get_ipc_connect(addr, &server_ss, creds); + cli = get_ipc_connect(ctx, addr, &server_ss, creds); return cli; } diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c index 939b3b0da09..de8ac4dc1ea 100644 --- a/source3/libsmb/clidfs.c +++ b/source3/libsmb/clidfs.c @@ -178,10 +178,20 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx, return NT_STATUS_INVALID_PARAMETER; } - status = cli_connect_nb( - server, dest_ss, port, name_type, NULL, - signing_state, - flags, &c); + /* + * The functions cli_resolve_path() and cli_cm_open() might not create a + * new cli context, but might return an already existing one. This + * forces us to have a long lived cli allocated on the NULL context. + */ + status = cli_connect_nb(NULL, + server, + dest_ss, + port, + name_type, + NULL, + signing_state, + flags, + &c); if (!NT_STATUS_IS_OK(status)) { if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) { diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c index 69b51b829f6..8808781d410 100644 --- a/source3/libsmb/libsmb_server.c +++ b/source3/libsmb/libsmb_server.c @@ -529,9 +529,15 @@ SMBC_server_internal(TALLOC_CTX *ctx, /* * Try 139 first for IPC$ */ - status = cli_connect_nb(server_n, NULL, NBT_SMB_PORT, 0x20, - smbc_getNetbiosName(context), - signing_state, flags, &c); + status = cli_connect_nb(NULL, + server_n, + NULL, + NBT_SMB_PORT, + 0x20, + smbc_getNetbiosName(context), + signing_state, + flags, + &c); } } @@ -539,9 +545,15 @@ SMBC_server_internal(TALLOC_CTX *ctx, /* * No IPC$ or 139 did not work */ - status = cli_connect_nb(server_n, NULL, port, 0x20, + status = cli_connect_nb(NULL, + server_n, + NULL, + port, + 0x20, smbc_getNetbiosName(context), - signing_state, flags, &c); + signing_state, + flags, + &c); } if (!NT_STATUS_IS_OK(status)) { @@ -832,12 +844,17 @@ SMBC_attr_server(TALLOC_CTX *ctx, return NULL; } - nt_status = cli_full_connection_creds(&ipc_cli, - lp_netbios_name(), server, - NULL, 0, "IPC$", "?????", - creds, - flags); - if (! NT_STATUS_IS_OK(nt_status)) { + nt_status = cli_full_connection_creds(NULL, + &ipc_cli, + lp_netbios_name(), + server, + NULL, + 0, + "IPC$", + "?????", + creds, + flags); + if (! NT_STATUS_IS_OK(nt_status)) { TALLOC_FREE(creds); DEBUG(1,("cli_full_connection failed! (%s)\n", nt_errstr(nt_status))); diff --git a/source3/libsmb/passchange.c b/source3/libsmb/passchange.c index b3304ed6fc5..3231d0bfff2 100644 --- a/source3/libsmb/passchange.c +++ b/source3/libsmb/passchange.c @@ -44,8 +44,15 @@ NTSTATUS remote_password_change(const char *remote_machine, *err_str = NULL; - result = cli_connect_nb(remote_machine, NULL, 0, 0x20, NULL, - SMB_SIGNING_IPC_DEFAULT, 0, &cli); + result = cli_connect_nb(talloc_tos(), + remote_machine, + NULL, + 0, + 0x20, + NULL, + SMB_SIGNING_IPC_DEFAULT, + 0, + &cli); if (!NT_STATUS_IS_OK(result)) { if (NT_STATUS_EQUAL(result, NT_STATUS_NOT_SUPPORTED)) { if (asprintf(err_str, "Unable to connect to SMB server on " diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 35b6577a4bd..afeea0f739e 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -82,10 +82,17 @@ NTSTATUS cli_tree_connect_creds(struct cli_state *cli, NTSTATUS cli_tree_connect(struct cli_state *cli, const char *share, const char *dev, const char *pass); NTSTATUS cli_tdis(struct cli_state *cli); -NTSTATUS cli_connect_nb(const char *host, const struct sockaddr_storage *dest_ss, - uint16_t port, int name_type, const char *myname, - enum smb_signing_setting signing_state, int flags, struct cli_state **pcli); -NTSTATUS cli_start_connection(struct cli_state **output_cli, +NTSTATUS cli_connect_nb(TALLOC_CTX *mem_ctx, + const char *host, + const struct sockaddr_storage *dest_ss, + uint16_t port, + int name_type, + const char *myname, + enum smb_signing_setting signing_state, + int flags, + struct cli_state **pcli); +NTSTATUS cli_start_connection(TALLOC_CTX *mem_ctx, + struct cli_state **output_cli, const char *my_name, const char *dest_host, const struct sockaddr_storage *dest_ss, int port, @@ -103,8 +110,10 @@ struct tevent_req *cli_full_connection_creds_send( int flags, struct smb2_negotiate_contexts *negotiate_contexts); NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, -- Samba Shared Repository