s3:libsmb: Pass memory context to cli_full_connection_creds()
authorAndreas Schneider <asn@samba.org>
Thu, 23 Nov 2023 14:07:53 +0000 (15:07 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 29 Apr 2024 08:43:32 +0000 (08:43 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
18 files changed:
examples/fuse/smb2mount.c
examples/winexe/winexe.c
source3/libnet/libnet_join.c
source3/libsmb/cliconnect.c
source3/libsmb/libsmb_server.c
source3/libsmb/proto.h
source3/rpc_server/spoolss/srv_spoolss_nt.c
source3/rpcclient/cmd_spoolss.c
source3/rpcclient/rpcclient.c
source3/torture/locktest2.c
source3/torture/torture.c
source3/utils/mdsearch.c
source3/utils/net_ads.c
source3/utils/net_util.c
source3/utils/netlookup.c
source3/utils/smbcacls.c
source3/utils/smbcquotas.c
source3/utils/wspsearch.c

index 0594ced1308d9b6d7613f97ec1b143576a0df70d..69c14af9df1726a1415950e20cb4135099fe699a 100644 (file)
@@ -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));
index 5c2529cb2de220e46cdf2ad99724a2fd7358f670..774d07a14d08412f54d738ff91f64174cb4579ef 100644 (file)
@@ -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,
index d3194bd181b815f87cd1295e0b081e89f7f5eb10..b8c7256bd1674ab7e828128aee389cbf4176acca 100644 (file)
@@ -1143,7 +1143,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(NULL,
+                                          cli,
                                           NULL,
                                           dc,
                                           NULL, 0,
@@ -1773,7 +1774,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 +1792,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,
index 6918a3ae6a53bf9763fb3c53d2426f1495c95bb1..43f6ac48086478e2f2fccdd4e625ed070edc887a 100644 (file)
@@ -3806,7 +3806,8 @@ NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req,
        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,
@@ -3818,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;
        }
@@ -3832,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, NULL, output_cli);
+       status = cli_full_connection_creds_recv(req, mem_ctx, output_cli);
  fail:
        TALLOC_FREE(ev);
        return status;
@@ -3968,9 +3969,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(NULL,
+                                             &cli,
+                                             NULL,
+                                             server,
+                                             server_ss,
+                                             0,
+                                             "IPC$",
+                                             "IPC",
                                              creds,
-                                       flags);
+                                             flags);
 
        if (NT_STATUS_IS_OK(nt_status)) {
                return cli;
index 41957bb6eb7231b6e5198a2adc68844d66d44356..8808781d4107487dc15a46e355ac5f35353ee938 100644 (file)
@@ -844,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)));
index 088b7732beda6b50f7f0fa5640cf6e32c0cd5423..d32038d30294f24ee8355dd85f4db4676c43becb 100644 (file)
@@ -112,7 +112,8 @@ struct tevent_req *cli_full_connection_creds_send(
 NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req,
                                        TALLOC_CTX *mem_ctx,
                                        struct cli_state **output_cli);
-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,
index 5b75df823b6cdfdc61595a404d7012afa468502d..2040a41b2498d29231f1cc77b3cfee23d8f7dfe4 100644 (file)
@@ -2491,10 +2491,16 @@ static bool spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe, struct c
        }
 
        /* setup the connection */
-       ret = cli_full_connection_creds( pp_cli, lp_netbios_name(), remote_machine,
-               &rm_addr, 0, "IPC$", "IPC",
-               anon_creds,
-               CLI_FULL_CONNECTION_IPC);
+       ret = cli_full_connection_creds(NULL,
+                                       pp_cli,
+                                       lp_netbios_name(),
+                                       remote_machine,
+                                       &rm_addr,
+                                       0,
+                                       "IPC$",
+                                       "IPC",
+                                       anon_creds,
+                                       CLI_FULL_CONNECTION_IPC);
        TALLOC_FREE(anon_creds);
        if ( !NT_STATUS_IS_OK( ret ) ) {
                DEBUG(2,("spoolss_connect_to_client: connection to [%s] failed!\n",
index f425e75f1aba376edfd8e94de4f46c2e7f49dd8b..40ee3e7f87454b417fea40defc9be0d4d120dc4d 100644 (file)
@@ -3516,11 +3516,16 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli,
 
        /* first get the connection to the remote server */
 
-       nt_status = cli_full_connection_creds(&cli_server2, lp_netbios_name(), argv[2],
-                               NULL, 0,
-                               "IPC$", "IPC",
-                               creds,
-                               CLI_FULL_CONNECTION_IPC);
+       nt_status = cli_full_connection_creds(mem_ctx,
+                                             &cli_server2,
+                                             lp_netbios_name(),
+                                             argv[2],
+                                             NULL,
+                                             0,
+                                             "IPC$",
+                                             "IPC",
+                                             creds,
+                                             CLI_FULL_CONNECTION_IPC);
        if ( !NT_STATUS_IS_OK(nt_status) )
                return WERR_GEN_FAILURE;
 
index f59bf6b0c982a5b77c798f2df63a23a7f46fd67c..eed8e4654f2414fdf2c3ad87d196e059855731ee 100644 (file)
@@ -1305,16 +1305,17 @@ out_free:
        }
 
        if (transport == NCACN_NP) {
-               nt_status = cli_full_connection_creds(
-                       &cli,
-                       lp_netbios_name(),
-                       host,
-                       opt_ipaddr ? &server_ss : NULL,
-                       opt_port,
-                       "IPC$",
-                       "IPC",
-                       creds,
-                       flags);
+               nt_status = cli_full_connection_creds(frame,
+                                                     &cli,
+                                                     lp_netbios_name(),
+                                                     host,
+                                                     opt_ipaddr ? &server_ss
+                                                                : NULL,
+                                                     opt_port,
+                                                     "IPC$",
+                                                     "IPC",
+                                                     creds,
+                                                     flags);
 
                if (!NT_STATUS_IS_OK(nt_status)) {
                        DEBUG(0, ("Cannot connect to server.  Error was %s\n",
index 851d77b55c8de470a9ac761dcc55c52c902285e9..7586bbde44d51bac3fcf142dca7c29fc44573e34 100644 (file)
@@ -219,7 +219,8 @@ static struct cli_state *connect_one(char *share)
 
        slprintf(myname,sizeof(myname), "lock-%lu-%u", (unsigned long)getpid(), count++);
 
-       nt_status = cli_full_connection_creds(&c,
+       nt_status = cli_full_connection_creds(NULL,
+                                             &c,
                                              myname,
                                              server_n,
                                              NULL,
index a154b5286816ad18e058129f1ed5121424484635..6476ae5c6e7631f225da0fb557806ac1b7526d83 100644 (file)
@@ -349,7 +349,8 @@ static bool torture_open_connection_share(struct cli_state **c,
 {
        NTSTATUS status;
 
-       status = cli_full_connection_creds(c,
+       status = cli_full_connection_creds(NULL,
+                                          c,
                                           myname,
                                           hostname,
                                           NULL, /* dest_ss */
@@ -1708,7 +1709,8 @@ static bool run_tcon_devtype_test(int dummy)
        NTSTATUS status;
        bool ret = True;
 
-       status = cli_full_connection_creds(&cli1,
+       status = cli_full_connection_creds(NULL,
+                                          &cli1,
                                           myname,
                                           host,
                                           NULL, /* dest_ss */
index 0f5b8873c688922175bc87109162751d5f32053e..99e67d54e0a22cadb007afd1581a73b7a3d4e202 100644 (file)
@@ -135,7 +135,8 @@ int main(int argc, char **argv)
 
        creds = samba_cmdline_get_creds();
 
-       status = cli_full_connection_creds(&cli,
+       status = cli_full_connection_creds(frame,
+                                          &cli,
                                           lp_netbios_name(),
                                           server,
                                           NULL,
index d1a0b93469fbf11198dd3c63d5f7a3bf2b4ee96c..2eb62a3e4b9113d4e2dda6db7ebeef90f6420240 100644 (file)
@@ -2393,11 +2393,16 @@ static int net_ads_printer_publish(struct net_context *c,
                                           CRED_USE_KERBEROS_REQUIRED,
                                           CRED_SPECIFIED);
 
-       nt_status = cli_full_connection_creds(&cli, lp_netbios_name(), servername,
-                                       &server_ss, 0,
-                                       "IPC$", "IPC",
-                                       c->creds,
-                                       CLI_FULL_CONNECTION_IPC);
+       nt_status = cli_full_connection_creds(c,
+                                             &cli,
+                                             lp_netbios_name(),
+                                             servername,
+                                             &server_ss,
+                                             0,
+                                             "IPC$",
+                                             "IPC",
+                                             c->creds,
+                                             CLI_FULL_CONNECTION_IPC);
 
        if (NT_STATUS_IS_ERR(nt_status)) {
                d_fprintf(stderr, _("Unable to open a connection to %s to "
index f3b7755063bfed23dad910a7934363eeddf02824..9c7c74b52926a17b8c26335c87faad354ef7df69 100644 (file)
@@ -116,11 +116,16 @@ NTSTATUS connect_to_service(struct net_context *c,
                flags |= CLI_FULL_CONNECTION_IPC;
        }
 
-       nt_status = cli_full_connection_creds(cli_ctx, NULL, server_name,
-                                       server_ss, c->opt_port,
-                                       service_name, service_type,
-                                       c->creds,
-                                       flags);
+       nt_status = cli_full_connection_creds(c,
+                                             cli_ctx,
+                                             NULL,
+                                             server_name,
+                                             server_ss,
+                                             c->opt_port,
+                                             service_name,
+                                             service_type,
+                                             c->creds,
+                                             flags);
        if (!NT_STATUS_IS_OK(nt_status)) {
                d_fprintf(stderr, _("Could not connect to server %s\n"),
                          server_name);
@@ -177,11 +182,16 @@ NTSTATUS connect_to_ipc_anonymous(struct net_context *c,
                return NT_STATUS_NO_MEMORY;
        }
 
-       nt_status = cli_full_connection_creds(cli_ctx, c->opt_requester_name,
-                                       server_name, server_ss, c->opt_port,
-                                       "IPC$", "IPC",
-                                       anon_creds,
-                                       CLI_FULL_CONNECTION_IPC);
+       nt_status = cli_full_connection_creds(c,
+                                             cli_ctx,
+                                             c->opt_requester_name,
+                                             server_name,
+                                             server_ss,
+                                             c->opt_port,
+                                             "IPC$",
+                                             "IPC",
+                                             anon_creds,
+                                             CLI_FULL_CONNECTION_IPC);
 
        if (NT_STATUS_IS_OK(nt_status)) {
                return nt_status;
index aaf78b0977aff562c8c029770d5fba63167b9fbf..7efc3a3360f6690062b63654082b518564435668 100644 (file)
@@ -95,11 +95,16 @@ static struct con_struct *create_cs(struct net_context *c,
        ZERO_STRUCTP(cs);
        talloc_set_destructor(cs, cs_destructor);
 
-       nt_status = cli_full_connection_creds(&cs->cli, lp_netbios_name(), lp_netbios_name(),
-                                       &loopback_ss, 0,
-                                       "IPC$", "IPC",
-                                       anon_creds,
-                                       CLI_FULL_CONNECTION_IPC);
+       nt_status = cli_full_connection_creds(c,
+                                             &cs->cli,
+                                             lp_netbios_name(),
+                                             lp_netbios_name(),
+                                             &loopback_ss,
+                                             0,
+                                             "IPC$",
+                                             "IPC",
+                                             anon_creds,
+                                             CLI_FULL_CONNECTION_IPC);
 
        if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(2,("create_cs: Connect failed. Error was %s\n", nt_errstr(nt_status)));
index 708e03a120a96e6bead45115a07273f955354d71..2f688290a471ab013a0716511ec7cc354b24c8aa 100644 (file)
@@ -846,11 +846,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, 0,
-                               share, "?????",
-                               creds,
-                               flags);
+       nt_status = cli_full_connection_creds(talloc_tos(),
+                                             &c,
+                                             lp_netbios_name(),
+                                             server,
+                                             NULL,
+                                             0,
+                                             share,
+                                             "?????",
+                                             creds,
+                                             flags);
        if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(0,("cli_full_connection failed! (%s)\n", nt_errstr(nt_status)));
                return NULL;
index 655da7dc64700c6f4397e34e25f150676da7a038..deb4749bf3b7148bc26cfaf445ed51ba23428e9b 100644 (file)
@@ -523,11 +523,16 @@ static struct cli_state *connect_one(const char *share)
        NTSTATUS nt_status;
        uint32_t flags = 0;
 
-       nt_status = cli_full_connection_creds(&c, lp_netbios_name(), server,
-                                           NULL, 0,
-                                           share, "?????",
-                                           samba_cmdline_get_creds(),
-                                           flags);
+       nt_status = cli_full_connection_creds(talloc_tos(),
+                                             &c,
+                                             lp_netbios_name(),
+                                             server,
+                                             NULL,
+                                             0,
+                                             share,
+                                             "?????",
+                                             samba_cmdline_get_creds(),
+                                             flags);
        if (!NT_STATUS_IS_OK(nt_status)) {
                DEBUG(0,("cli_full_connection failed! (%s)\n", nt_errstr(nt_status)));
                return NULL;
index 063b952d4683c7e979d7fd9834b3f017a77275a3..6cd6150c765a345da34a2362b1d5ea2e4d6810a3 100644 (file)
@@ -720,15 +720,16 @@ int main(int argc, char **argv)
                        talloc_strdup(select_stmt->cols, default_column);
        }
 
-       status =  cli_full_connection_creds(&c,
-                                  lp_netbios_name(),
-                                  server,
-                                  NULL,
-                                  0,
-                                  "IPC$",
-                                  "IPC",
-                                  samba_cmdline_get_creds(),
-                                  flags);
+       status = cli_full_connection_creds(talloc_tos(),
+                                          &c,
+                                          lp_netbios_name(),
+                                          server,
+                                          NULL,
+                                          0,
+                                          "IPC$",
+                                          "IPC",
+                                          samba_cmdline_get_creds(),
+                                          flags);
 
        if (!NT_STATUS_IS_OK(status)) {
                DBG_ERR("failed to connect to IPC$: %s\n",