summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2009-03-26 20:29:24 +0100
committerStefan Metzmacher <metze@samba.org>2009-04-17 21:46:46 +0200
commitc0dfe0cf80ee50f395912b7d6aec0d87febd34c0 (patch)
tree277182f70df96e6c1e9a9e243692f927c3e1a33c
parent6f90cdaf63b5b584c96b9ffc388c9e8df172db67 (diff)
downloadsamba-c0dfe0cf80ee50f395912b7d6aec0d87febd34c0.tar.gz
samba-c0dfe0cf80ee50f395912b7d6aec0d87febd34c0.tar.bz2
samba-c0dfe0cf80ee50f395912b7d6aec0d87febd34c0.zip
s3:net_rpc: don't shutdown a cli_state passed from the caller
This fixes a crash bug if we timeout in net rpc trustdom list. metze
-rw-r--r--source3/utils/net_rpc.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
index ed7b2f043e..0b662819ae 100644
--- a/source3/utils/net_rpc.c
+++ b/source3/utils/net_rpc.c
@@ -120,6 +120,7 @@ int run_rpc_command(struct net_context *c,
NTSTATUS nt_status;
DOM_SID *domain_sid;
const char *domain_name;
+ int ret = -1;
/* make use of cli_state handed over as an argument, if possible */
if (!cli_arg) {
@@ -141,15 +142,13 @@ int run_rpc_command(struct net_context *c,
if (!(mem_ctx = talloc_init("run_rpc_command"))) {
DEBUG(0, ("talloc_init() failed\n"));
- cli_shutdown(cli);
- return -1;
+ goto fail;
}
nt_status = net_get_remote_domain_sid(cli, mem_ctx, &domain_sid,
&domain_name);
if (!NT_STATUS_IS_OK(nt_status)) {
- cli_shutdown(cli);
- return -1;
+ goto fail;
}
if (!(conn_flags & NET_FLAGS_NO_PIPE)) {
@@ -164,8 +163,7 @@ int run_rpc_command(struct net_context *c,
if (!NT_STATUS_IS_OK(nt_status)) {
DEBUG(0, ("Could not initialise schannel netlogon pipe. Error was %s\n",
nt_errstr(nt_status) ));
- cli_shutdown(cli);
- return -1;
+ goto fail;
}
} else {
if (conn_flags & NET_FLAGS_SEAL) {
@@ -183,8 +181,7 @@ int run_rpc_command(struct net_context *c,
DEBUG(0, ("Could not initialise pipe %s. Error was %s\n",
get_pipe_name_from_iface(interface),
nt_errstr(nt_status) ));
- cli_shutdown(cli);
- return -1;
+ goto fail;
}
}
}
@@ -194,6 +191,7 @@ int run_rpc_command(struct net_context *c,
if (!NT_STATUS_IS_OK(nt_status)) {
DEBUG(1, ("rpc command function failed! (%s)\n", nt_errstr(nt_status)));
} else {
+ ret = 0;
DEBUG(5, ("rpc command function succedded\n"));
}
@@ -203,13 +201,14 @@ int run_rpc_command(struct net_context *c,
}
}
+fail:
/* close the connection only if it was opened here */
if (!cli_arg) {
cli_shutdown(cli);
}
talloc_destroy(mem_ctx);
- return (!NT_STATUS_IS_OK(nt_status));
+ return ret;
}
/**