1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

Add shutdown abort try over initshutdown pipe first, then fall back to

winreg pipe if it doesn't work.  Fixes bug #534.

I will go back and add the same logic for the shutdown itself, even though
that works so far against win2k (haven't tested all win clients).
This commit is contained in:
Jim McDonough 0001-01-01 00:00:00 +00:00
parent 4e86243ea1
commit e660b04e8f

View File

@ -1461,7 +1461,7 @@ int net_rpc_file(int argc, const char **argv)
/**
* ABORT the shutdown of a remote RPC Server
* ABORT the shutdown of a remote RPC Server over, initshutdown pipe
*
* All parameters are provided by the run_rpc_command function, except for
* argc, argv which are passed through.
@ -1476,11 +1476,47 @@ int net_rpc_file(int argc, const char **argv)
* @return Normal NTSTATUS return.
**/
static NTSTATUS rpc_shutdown_abort_internals(const DOM_SID *domain_sid, struct cli_state *cli, TALLOC_CTX *mem_ctx,
static NTSTATUS rpc_shutdown_abort_internals(const DOM_SID *domain_sid,
struct cli_state *cli,
TALLOC_CTX *mem_ctx,
int argc, const char **argv)
{
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
result = cli_shutdown_abort(cli, mem_ctx);
if (NT_STATUS_IS_OK(result))
DEBUG(5,("cmd_shutdown_abort: query succeeded\n"));
else
DEBUG(5,("cmd_shutdown_abort: query failed\n"));
return result;
}
/**
* ABORT the shutdown of a remote RPC Server, over winreg pipe
*
* All parameters are provided by the run_rpc_command function, except for
* argc, argv which are passed through.
*
* @param domain_sid The domain sid aquired from the remote server
* @param cli A cli_state connected to the server.
* @param mem_ctx Talloc context, destoyed on compleation of the function.
* @param argc Standard main() style argc
* @param argv Standard main() style argv. Initial components are already
* stripped
*
* @return Normal NTSTATUS return.
**/
static NTSTATUS rpc_reg_shutdown_abort_internals(const DOM_SID *domain_sid,
struct cli_state *cli,
TALLOC_CTX *mem_ctx,
int argc, const char **argv)
{
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
result = cli_reg_abort_shutdown(cli, mem_ctx);
if (NT_STATUS_IS_OK(result))
@ -1491,7 +1527,6 @@ static NTSTATUS rpc_shutdown_abort_internals(const DOM_SID *domain_sid, struct c
return result;
}
/**
* ABORT the Shut down of a remote RPC server
*
@ -1504,7 +1539,17 @@ static NTSTATUS rpc_shutdown_abort_internals(const DOM_SID *domain_sid, struct c
static int rpc_shutdown_abort(int argc, const char **argv)
{
return run_rpc_command(NULL, PI_WINREG, 0, rpc_shutdown_abort_internals,
int rc = run_rpc_command(NULL, PI_SHUTDOWN, 0,
rpc_shutdown_abort_internals,
argc, argv);
if (rc == 0)
return rc;
DEBUG(1, ("initshutdown pipe didn't work, trying winreg pipe\n"));
return run_rpc_command(NULL, PI_WINREG, 0,
rpc_reg_shutdown_abort_internals,
argc, argv);
}