diff options
-rw-r--r-- | source3/include/doserr.h | 1 | ||||
-rw-r--r-- | source3/libsmb/doserr.c | 1 | ||||
-rw-r--r-- | source3/utils/net_rpc.c | 34 |
3 files changed, 21 insertions, 15 deletions
diff --git a/source3/include/doserr.h b/source3/include/doserr.h index 593d5d99ee..a8e7a14bc1 100644 --- a/source3/include/doserr.h +++ b/source3/include/doserr.h @@ -196,6 +196,7 @@ #define WERR_REG_FILE_INVALID W_ERROR(1017) #define WERR_NO_SUCH_SERVICE W_ERROR(1060) #define WERR_INVALID_SERVICE_CONTROL W_ERROR(1052) +#define WERR_MACHINE_LOCKED W_ERROR(1271) #define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338) #define WERR_SERVER_UNAVAILABLE W_ERROR(1722) #define WERR_INVALID_FORM_NAME W_ERROR(1902) diff --git a/source3/libsmb/doserr.c b/source3/libsmb/doserr.c index ef71a883f7..dd0358f69a 100644 --- a/source3/libsmb/doserr.c +++ b/source3/libsmb/doserr.c @@ -66,6 +66,7 @@ werror_code_struct dos_errs[] = { "WERR_DFS_NO_SUCH_SERVER", WERR_DFS_NO_SUCH_SERVER }, { "WERR_DFS_INTERNAL_ERROR", WERR_DFS_INTERNAL_ERROR }, { "WERR_DFS_CANT_CREATE_JUNCT", WERR_DFS_CANT_CREATE_JUNCT }, + { "WERR_MACHINE_LOCKED", WERR_MACHINE_LOCKED }, { "WERR_INVALID_SECURITY_DESCRIPTOR", WERR_INVALID_SECURITY_DESCRIPTOR }, { "WERR_INVALID_OWNER", WERR_INVALID_OWNER }, { "WERR_SERVER_UNAVAILABLE", WERR_SERVER_UNAVAILABLE }, diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index f1522ef158..54af5c4df1 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -4610,9 +4610,9 @@ static NTSTATUS rpc_init_shutdown_internals(const DOM_SID *domain_sid, if (NT_STATUS_IS_OK(result)) { d_printf("\nShutdown of remote machine succeeded\n"); DEBUG(5,("Shutdown of remote machine succeeded\n")); - } else - DEBUG(0,("Shutdown of remote machine failed!\n")); - + } else { + DEBUG(1,("Shutdown of remote machine failed!\n")); + } return result; } @@ -4640,7 +4640,7 @@ static NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid, int argc, const char **argv) { - NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + WERROR result; const char *msg = "This machine will be shutdown shortly"; uint32 timeout = 20; #if 0 @@ -4676,16 +4676,19 @@ static NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid, } /* create an entry */ - result = werror_to_ntstatus(rpccli_reg_shutdown(pipe_hnd, mem_ctx, msg, timeout, opt_reboot, opt_force)); + result = rpccli_reg_shutdown(pipe_hnd, mem_ctx, msg, timeout, opt_reboot, opt_force); - if (NT_STATUS_IS_OK(result)) { + if (W_ERROR_IS_OK(result)) { d_printf("\nShutdown of remote machine succeeded\n"); - DEBUG(5,("Shutdown of remote machine succeeded\n")); + } else { + d_printf("\nShutdown of remote machine failed\n"); + if (W_ERROR_EQUAL(result,WERR_MACHINE_LOCKED)) + d_printf("\nMachine locked, use -f switch to force\n"); + else + d_printf("\nresult was: %s\n", dos_errstr(result)); } - else - DEBUG(0,("Shutdown of remote machine failed!\n")); - return result; + return werror_to_ntstatus(result); } /** @@ -4703,13 +4706,14 @@ static int rpc_shutdown(int argc, const char **argv) int rc = run_rpc_command(NULL, PI_SHUTDOWN, 0, rpc_init_shutdown_internals, argc, argv); - if (rc == 0) - return rc; - DEBUG(1, ("initshutdown pipe didn't work, trying winreg pipe\n")); + if (rc) { + DEBUG(1, ("initshutdown pipe failed, trying winreg pipe\n")); + rc = run_rpc_command(NULL, PI_WINREG, 0, + rpc_reg_shutdown_internals, argc, argv); + } - return run_rpc_command(NULL, PI_WINREG, 0, rpc_reg_shutdown_internals, - argc, argv); + return rc; } /*************************************************************************** |