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

Reply via email to