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