From: Andreas Schneider Date: Thu, 23 Nov 2023 14:07:53 +0000 (+0100) Subject: s3:libsmb: Pass memory context to cli_full_connection_creds() X-Git-Tag: tdb-1.4.11~910 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2297b41a20056ed44ed27fee10fab640a6fe7a3;p=thirdparty%2Fsamba.git s3:libsmb: Pass memory context to cli_full_connection_creds() Signed-off-by: Andreas Schneider Reviewed-by: Volker Lendecke --- 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/libnet/libnet_join.c b/source3/libnet/libnet_join.c index d3194bd181b..b8c7256bd16 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -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, diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 6918a3ae6a5..43f6ac48086 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -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; diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c index 41957bb6eb7..8808781d410 100644 --- a/source3/libsmb/libsmb_server.c +++ b/source3/libsmb/libsmb_server.c @@ -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))); diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 088b7732bed..d32038d3029 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -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, diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index 5b75df823b6..2040a41b249 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -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", diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index f425e75f1ab..40ee3e7f874 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -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; diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index f59bf6b0c98..eed8e4654f2 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -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", diff --git a/source3/torture/locktest2.c b/source3/torture/locktest2.c index 851d77b55c8..7586bbde44d 100644 --- a/source3/torture/locktest2.c +++ b/source3/torture/locktest2.c @@ -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, diff --git a/source3/torture/torture.c b/source3/torture/torture.c index a154b528681..6476ae5c6e7 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -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 */ diff --git a/source3/utils/mdsearch.c b/source3/utils/mdsearch.c index 0f5b8873c68..99e67d54e0a 100644 --- a/source3/utils/mdsearch.c +++ b/source3/utils/mdsearch.c @@ -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, diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index d1a0b93469f..2eb62a3e4b9 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -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 " diff --git a/source3/utils/net_util.c b/source3/utils/net_util.c index f3b7755063b..9c7c74b5292 100644 --- a/source3/utils/net_util.c +++ b/source3/utils/net_util.c @@ -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; diff --git a/source3/utils/netlookup.c b/source3/utils/netlookup.c index aaf78b0977a..7efc3a3360f 100644 --- a/source3/utils/netlookup.c +++ b/source3/utils/netlookup.c @@ -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))); diff --git a/source3/utils/smbcacls.c b/source3/utils/smbcacls.c index 708e03a120a..2f688290a47 100644 --- a/source3/utils/smbcacls.c +++ b/source3/utils/smbcacls.c @@ -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; diff --git a/source3/utils/smbcquotas.c b/source3/utils/smbcquotas.c index 655da7dc647..deb4749bf3b 100644 --- a/source3/utils/smbcquotas.c +++ b/source3/utils/smbcquotas.c @@ -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; diff --git a/source3/utils/wspsearch.c b/source3/utils/wspsearch.c index 063b952d468..6cd6150c765 100644 --- a/source3/utils/wspsearch.c +++ b/source3/utils/wspsearch.c @@ -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",