1/*
2   Unix SMB/CIFS implementation.
3   RPC Pipe client
4
5   Copyright (C) Andrew Tridgell              1992-1998,
6   Copyright (C) Luke Kenneth Casson Leighton 1996-1998,
7   Copyright (C) Paul Ashton                  1997-1998.
8   Copyright (C) Jeremy Allison                    1999.
9   Copyright (C) Simo Sorce                        2001
10
11   This program is free software; you can redistribute it and/or modify
12   it under the terms of the GNU General Public License as published by
13   the Free Software Foundation; either version 2 of the License, or
14   (at your option) any later version.
15
16   This program is distributed in the hope that it will be useful,
17   but WITHOUT ANY WARRANTY; without even the implied warranty of
18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   GNU General Public License for more details.
20
21   You should have received a copy of the GNU General Public License
22   along with this program; if not, write to the Free Software
23   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24*/
25
26#include "includes.h"
27
28/* Shutdown a server */
29
30WERROR cli_reg_shutdown(struct cli_state * cli, TALLOC_CTX *mem_ctx,
31                          const char *msg, uint32 timeout, BOOL do_reboot,
32			  BOOL force)
33{
34	prs_struct qbuf;
35	prs_struct rbuf;
36	REG_Q_SHUTDOWN q_s;
37	REG_R_SHUTDOWN r_s;
38	WERROR result = WERR_GENERAL_FAILURE;
39
40	if (msg == NULL) return WERR_INVALID_PARAM;
41
42	ZERO_STRUCT (q_s);
43	ZERO_STRUCT (r_s);
44
45	prs_init(&qbuf , MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
46	prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
47
48	/* Marshall data and send request */
49
50	init_reg_q_shutdown(&q_s, msg, timeout, do_reboot, force);
51
52	if (!reg_io_q_shutdown("", &q_s, &qbuf, 0) ||
53	    !rpc_api_pipe_req(cli, PI_WINREG, REG_SHUTDOWN, &qbuf, &rbuf))
54		goto done;
55
56	/* Unmarshall response */
57
58	if(reg_io_r_shutdown("", &r_s, &rbuf, 0))
59		result = r_s.status;
60
61done:
62	prs_mem_free(&rbuf);
63	prs_mem_free(&qbuf);
64
65	return result;
66}
67
68
69/* Abort a server shutdown */
70
71WERROR cli_reg_abort_shutdown(struct cli_state * cli, TALLOC_CTX *mem_ctx)
72{
73	prs_struct rbuf;
74	prs_struct qbuf;
75	REG_Q_ABORT_SHUTDOWN q_s;
76	REG_R_ABORT_SHUTDOWN r_s;
77	WERROR result = WERR_GENERAL_FAILURE;
78
79	ZERO_STRUCT (q_s);
80	ZERO_STRUCT (r_s);
81
82	prs_init(&qbuf , MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
83	prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
84
85	/* Marshall data and send request */
86
87	init_reg_q_abort_shutdown(&q_s);
88
89	if (!reg_io_q_abort_shutdown("", &q_s, &qbuf, 0) ||
90	    !rpc_api_pipe_req(cli, PI_WINREG, REG_ABORT_SHUTDOWN, &qbuf, &rbuf))
91	    	goto done;
92
93		/* Unmarshall response */
94
95	if (reg_io_r_abort_shutdown("", &r_s, &rbuf, 0))
96		result = r_s.status;
97
98done:
99	prs_mem_free(&rbuf);
100	prs_mem_free(&qbuf );
101
102	return result;
103}
104