[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Mon Apr 29 09:49:02 UTC 2024
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 <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Mon Apr 29 09:48:47 UTC 2024 on atb-devel-224
commit 56426eda9bdb0c530e3ae6c69a9ce261af5469a7
Author: Andreas Schneider <asn at samba.org>
Date: Thu Nov 23 15:52:05 2023 +0100
s3:libsmb: Make get_ipc_connect() static
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit bf688e0d2afb8e2d28ac06a306296fd071dd6128
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit d2297b41a20056ed44ed27fee10fab640a6fe7a3
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 5c63d5bdab156d1b14e07b56d02032f485530ff0
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 8888f95947b67371696acfa9f76a61b55302d312
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit f3fda1e440cda83e091d0039a114ad7c15364787
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit bbb21797bf6b48857af85579240e30cbc00e3f7f
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 4f62937dfaba644755ff9f349145d1a5704e5f88
Author: Andreas Schneider <asn at samba.org>
Date: Thu Apr 25 11:55:17 2024 +0200
s3:torture: Remove trailing spaces in torture.c
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit c8eabee18bd0c634f8b8b5ba878c395daea609b0
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 2154bd37e41153676f29001b556698b09e4edff1
Author: Andreas Schneider <asn at 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 <asn at samba.org>
Reviewed-by: Volker Lendecke <vl at 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
More information about the samba-cvs
mailing list