0001-01-01 02:30:17 +02:30
/*
0001-01-01 02:30:17 +02:30
Unix SMB / CIFS implementation .
RPC Pipe client
Copyright ( C ) Andrew Tridgell 1992 - 1998 ,
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1998 ,
Copyright ( C ) Paul Ashton 1997 - 1998.
Copyright ( C ) Jeremy Allison 1999.
Copyright ( C ) Simo Sorce 2001
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 0213 9 , USA .
*/
0001-01-01 02:30:17 +02:30
# include "includes.h"
0001-01-01 02:30:17 +02:30
/* Shutdown a server */
0001-01-01 02:30:17 +02:30
2005-01-10 23:33:41 +03:00
WERROR cli_reg_shutdown ( struct cli_state * cli , TALLOC_CTX * mem_ctx ,
0001-01-01 02:30:17 +02:30
const char * msg , uint32 timeout , BOOL do_reboot ,
0001-01-01 02:30:17 +02:30
BOOL force )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
prs_struct qbuf ;
prs_struct rbuf ;
REG_Q_SHUTDOWN q_s ;
REG_R_SHUTDOWN r_s ;
2005-01-10 23:33:41 +03:00
WERROR result = WERR_GENERAL_FAILURE ;
0001-01-01 02:30:17 +02:30
2005-01-10 23:33:41 +03:00
if ( msg = = NULL ) return WERR_INVALID_PARAM ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
ZERO_STRUCT ( q_s ) ;
ZERO_STRUCT ( r_s ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
prs_init ( & qbuf , MAX_PDU_FRAG_LEN , mem_ctx , MARSHALL ) ;
prs_init ( & rbuf , 0 , mem_ctx , UNMARSHALL ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
/* Marshall data and send request */
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
init_reg_q_shutdown ( & q_s , msg , timeout , do_reboot , force ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
if ( ! reg_io_q_shutdown ( " " , & q_s , & qbuf , 0 ) | |
2005-01-06 14:42:40 +03:00
! rpc_api_pipe_req ( cli , PI_WINREG , REG_SHUTDOWN , & qbuf , & rbuf ) )
0001-01-01 02:30:17 +02:30
goto done ;
/* Unmarshall response */
if ( reg_io_r_shutdown ( " " , & r_s , & rbuf , 0 ) )
result = r_s . status ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
done :
0001-01-01 02:30:17 +02:30
prs_mem_free ( & rbuf ) ;
0001-01-01 02:30:17 +02:30
prs_mem_free ( & qbuf ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
return result ;
0001-01-01 02:30:17 +02:30
}
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
/* Abort a server shutdown */
0001-01-01 02:30:17 +02:30
2005-01-10 23:33:41 +03:00
WERROR cli_reg_abort_shutdown ( struct cli_state * cli , TALLOC_CTX * mem_ctx )
0001-01-01 02:30:17 +02:30
{
prs_struct rbuf ;
0001-01-01 02:30:17 +02:30
prs_struct qbuf ;
REG_Q_ABORT_SHUTDOWN q_s ;
REG_R_ABORT_SHUTDOWN r_s ;
2005-01-10 23:33:41 +03:00
WERROR result = WERR_GENERAL_FAILURE ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
ZERO_STRUCT ( q_s ) ;
ZERO_STRUCT ( r_s ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
prs_init ( & qbuf , MAX_PDU_FRAG_LEN , mem_ctx , MARSHALL ) ;
prs_init ( & rbuf , 0 , mem_ctx , UNMARSHALL ) ;
/* Marshall data and send request */
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
init_reg_q_abort_shutdown ( & q_s ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
if ( ! reg_io_q_abort_shutdown ( " " , & q_s , & qbuf , 0 ) | |
2005-01-06 14:42:40 +03:00
! rpc_api_pipe_req ( cli , PI_WINREG , REG_ABORT_SHUTDOWN , & qbuf , & rbuf ) )
0001-01-01 02:30:17 +02:30
goto done ;
/* Unmarshall response */
if ( reg_io_r_abort_shutdown ( " " , & r_s , & rbuf , 0 ) )
result = r_s . status ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
done :
0001-01-01 02:30:17 +02:30
prs_mem_free ( & rbuf ) ;
0001-01-01 02:30:17 +02:30
prs_mem_free ( & qbuf ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
return result ;
0001-01-01 02:30:17 +02:30
}