summaryrefslogtreecommitdiffstats
path: root/source3/rpcclient/cmd_shutdown.c
blob: e42ec30ac13103d742771b1294e577cea0f9bba9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* 
   Unix SMB/CIFS implementation.
   NT Domain Authentication SMB / MSRPC client
   Copyright (C) Andrew Tridgell                 1994-1997,
   Copyright (C) Luke Kenneth Casson Leighton    1996-1997,
   Copyright (C) Simo Sorce                      2001,
   Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003.
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "includes.h"
#include "rpcclient.h"

/****************************************************************************
nt shutdown init
****************************************************************************/
static NTSTATUS cmd_shutdown_init(struct cli_state *cli, TALLOC_CTX *mem_ctx,
				  int argc, const char **argv)
{
	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
	fstring msg;
	uint32 timeout = 20;
	BOOL force = False;
	BOOL reboot = False;
	int opt;

	*msg = 0;
	optind = 0; /* TODO: test if this hack works on other systems too --simo */

	while ((opt = getopt(argc, argv, "m:t:rf")) != EOF)
	{
		/*fprintf (stderr, "[%s]\n", argv[argc-1]);*/
	
		switch (opt)
		{
			case 'm':
				fstrcpy(msg, optarg);
				/*fprintf (stderr, "[%s|%s]\n", optarg, msg);*/
				break;

			case 't':
				timeout = atoi(optarg);
				/*fprintf (stderr, "[%s|%d]\n", optarg, timeout);*/
				break;

			case 'r':
				reboot = True;
				break;

			case 'f':
				force = True;
				break;

		}
	}

	/* create an entry */
	result = cli_shutdown_init(cli, mem_ctx, msg, timeout, reboot, force);

	if (NT_STATUS_IS_OK(result))
		DEBUG(5,("cmd_shutdown_init: query succeeded\n"));
	else
		DEBUG(5,("cmd_shutdown_init: query failed\n"));

	return result;
}

/****************************************************************************
abort a shutdown
****************************************************************************/
static NTSTATUS cmd_shutdown_abort(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;
}


/* List of commands exported by this module */
struct cmd_set shutdown_commands[] = {

	{ "SHUTDOWN"  },

	{ "shutdowninit", RPC_RTYPE_NTSTATUS, cmd_shutdown_init, NULL, PI_SHUTDOWN, "Remote Shutdown (over shutdown pipe)",
				"syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)" },
				
	{ "shutdownabort", RPC_RTYPE_NTSTATUS, cmd_shutdown_abort, NULL, PI_SHUTDOWN, "Abort Shutdown (over shutdown pipe)",
				"syntax: shutdownabort" },
	{ NULL }
};