2006-09-20 16:32:29 +00:00
/*
* Unix SMB / CIFS implementation .
* server auto - generated by pidl . DO NOT MODIFY !
*/
# include "includes.h"
# include "librpc/gen_ndr/srv_svcctl.h"
2007-10-18 17:40:25 -07:00
static bool api_svcctl_CloseServiceHandle ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_CloseServiceHandle * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CLOSESERVICEHANDLE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_CloseServiceHandle ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_CloseServiceHandle , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . handle = r - > in . handle ;
r - > out . result = _svcctl_CloseServiceHandle ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_CloseServiceHandle , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_ControlService ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_ControlService * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CONTROLSERVICE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_ControlService ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_ControlService , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service_status = talloc_zero ( r , struct SERVICE_STATUS ) ;
if ( r - > out . service_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_ControlService ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_ControlService , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_DeleteService ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_DeleteService * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_DELETESERVICE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_DeleteService ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_DeleteService , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_DeleteService ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_DeleteService , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_LockServiceDatabase ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_LockServiceDatabase * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_LOCKSERVICEDATABASE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_LockServiceDatabase ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_LockServiceDatabase , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . lock = talloc_zero ( r , struct policy_handle ) ;
if ( r - > out . lock = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_LockServiceDatabase ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_LockServiceDatabase , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceObjectSecurity ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceObjectSecurity * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceObjectSecurity ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceObjectSecurity , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceObjectSecurity ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceObjectSecurity , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_SetServiceObjectSecurity ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_SetServiceObjectSecurity * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_SETSERVICEOBJECTSECURITY ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_SetServiceObjectSecurity ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_SetServiceObjectSecurity , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_SetServiceObjectSecurity ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_SetServiceObjectSecurity , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceStatus ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceStatus * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICESTATUS ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceStatus ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service_status = talloc_zero ( r , struct SERVICE_STATUS ) ;
if ( r - > out . service_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceStatus ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_SetServiceStatus ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_SetServiceStatus * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_SETSERVICESTATUS ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_SetServiceStatus ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_SetServiceStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_SetServiceStatus ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_SetServiceStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_UnlockServiceDatabase ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_UnlockServiceDatabase * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_UNLOCKSERVICEDATABASE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_UnlockServiceDatabase ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_UnlockServiceDatabase , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . lock = r - > in . lock ;
r - > out . result = _svcctl_UnlockServiceDatabase ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_UnlockServiceDatabase , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_NotifyBootConfigStatus ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_NotifyBootConfigStatus * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_NotifyBootConfigStatus ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_NotifyBootConfigStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_NotifyBootConfigStatus ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_NotifyBootConfigStatus , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_SCSetServiceBitsW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_SCSetServiceBitsW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_SCSETSERVICEBITSW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_SCSetServiceBitsW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_SCSetServiceBitsW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_SCSetServiceBitsW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_SCSetServiceBitsW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_ChangeServiceConfigW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_ChangeServiceConfigW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CHANGESERVICECONFIGW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_ChangeServiceConfigW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_ChangeServiceConfigW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . tag_id = talloc_zero ( r , uint32_t ) ;
if ( r - > out . tag_id = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_ChangeServiceConfigW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_ChangeServiceConfigW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_CreateServiceW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_CreateServiceW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CREATESERVICEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_CreateServiceW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_CreateServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . TagId = r - > in . TagId ;
r - > out . handle = talloc_zero ( r , struct policy_handle ) ;
if ( r - > out . handle = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_CreateServiceW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_CreateServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_EnumDependentServicesW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_EnumDependentServicesW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_ENUMDEPENDENTSERVICESW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_EnumDependentServicesW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_EnumDependentServicesW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service_status = talloc_zero ( r , struct ENUM_SERVICE_STATUS ) ;
if ( r - > out . service_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . services_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . services_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_EnumDependentServicesW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_EnumDependentServicesW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_EnumServicesStatusW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_EnumServicesStatusW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_ENUMSERVICESSTATUSW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_EnumServicesStatusW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_EnumServicesStatusW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . service = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . services_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . services_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . resume_handle = r - > in . resume_handle ;
r - > out . result = _svcctl_EnumServicesStatusW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_EnumServicesStatusW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_OpenSCManagerW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_OpenSCManagerW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_OPENSCMANAGERW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_OpenSCManagerW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_OpenSCManagerW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . handle = talloc_zero ( r , struct policy_handle ) ;
if ( r - > out . handle = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_OpenSCManagerW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_OpenSCManagerW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_OpenServiceW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_OpenServiceW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_OPENSERVICEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_OpenServiceW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_OpenServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . handle = talloc_zero ( r , struct policy_handle ) ;
if ( r - > out . handle = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_OpenServiceW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_OpenServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceConfigW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceConfigW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICECONFIGW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceConfigW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceConfigW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . query = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . query = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceConfigW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceConfigW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceLockStatusW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceLockStatusW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICELOCKSTATUSW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceLockStatusW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceLockStatusW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . lock_status = talloc_zero ( r , struct SERVICE_LOCK_STATUS ) ;
if ( r - > out . lock_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . required_buf_size = talloc_zero ( r , uint32_t ) ;
if ( r - > out . required_buf_size = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceLockStatusW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceLockStatusW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_StartServiceW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_StartServiceW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_STARTSERVICEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_StartServiceW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_StartServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_StartServiceW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_StartServiceW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_GetServiceDisplayNameW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_GetServiceDisplayNameW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_GETSERVICEDISPLAYNAMEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_GetServiceDisplayNameW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_GetServiceDisplayNameW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . display_name = talloc_zero ( r , const char * ) ;
if ( r - > out . display_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . display_name_length = r - > in . display_name_length ;
r - > out . result = _svcctl_GetServiceDisplayNameW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_GetServiceDisplayNameW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_GetServiceKeyNameW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_GetServiceKeyNameW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_GETSERVICEKEYNAMEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_GetServiceKeyNameW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_GetServiceKeyNameW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . key_name = talloc_zero ( r , const char * ) ;
if ( r - > out . key_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . display_name_length = r - > in . display_name_length ;
r - > out . result = _svcctl_GetServiceKeyNameW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_GetServiceKeyNameW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_SCSetServiceBitsA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_SCSetServiceBitsA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_SCSETSERVICEBITSA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_SCSetServiceBitsA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_SCSetServiceBitsA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_SCSetServiceBitsA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_SCSetServiceBitsA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_ChangeServiceConfigA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_ChangeServiceConfigA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CHANGESERVICECONFIGA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_ChangeServiceConfigA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_ChangeServiceConfigA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . tag_id = talloc_zero ( r , uint32_t ) ;
if ( r - > out . tag_id = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_ChangeServiceConfigA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_ChangeServiceConfigA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_CreateServiceA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_CreateServiceA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CREATESERVICEA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_CreateServiceA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_CreateServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . TagId = talloc_zero ( r , uint32_t ) ;
if ( r - > out . TagId = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_CreateServiceA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_CreateServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_EnumDependentServicesA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_EnumDependentServicesA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_ENUMDEPENDENTSERVICESA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_EnumDependentServicesA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_EnumDependentServicesA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service_status = talloc_zero ( r , struct ENUM_SERVICE_STATUS ) ;
if ( r - > out . service_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . services_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . services_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_EnumDependentServicesA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_EnumDependentServicesA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_EnumServicesStatusA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_EnumServicesStatusA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_ENUMSERVICESSTATUSA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_EnumServicesStatusA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_EnumServicesStatusA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . service = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . service = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . services_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . services_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . resume_handle = r - > in . resume_handle ;
r - > out . result = _svcctl_EnumServicesStatusA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_EnumServicesStatusA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_OpenSCManagerA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_OpenSCManagerA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_OPENSCMANAGERA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_OpenSCManagerA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_OpenSCManagerA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . handle = talloc_zero ( r , struct policy_handle ) ;
if ( r - > out . handle = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_OpenSCManagerA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_OpenSCManagerA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_OpenServiceA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_OpenServiceA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_OPENSERVICEA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_OpenServiceA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_OpenServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_OpenServiceA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_OpenServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceConfigA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceConfigA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICECONFIGA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceConfigA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceConfigA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . query = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . query = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceConfigA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceConfigA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceLockStatusA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceLockStatusA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICELOCKSTATUSA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceLockStatusA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceLockStatusA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . lock_status = talloc_zero ( r , struct SERVICE_LOCK_STATUS ) ;
if ( r - > out . lock_status = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . required_buf_size = talloc_zero ( r , uint32_t ) ;
if ( r - > out . required_buf_size = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceLockStatusA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceLockStatusA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_StartServiceA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_StartServiceA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_STARTSERVICEA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_StartServiceA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_StartServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_StartServiceA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_StartServiceA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_GetServiceDisplayNameA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_GetServiceDisplayNameA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_GETSERVICEDISPLAYNAMEA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_GetServiceDisplayNameA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_GetServiceDisplayNameA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . display_name = talloc_zero ( r , const char * ) ;
if ( r - > out . display_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . display_name_length = r - > in . display_name_length ;
r - > out . result = _svcctl_GetServiceDisplayNameA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_GetServiceDisplayNameA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_GetServiceKeyNameA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_GetServiceKeyNameA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_GETSERVICEKEYNAMEA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_GetServiceKeyNameA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_GetServiceKeyNameA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . key_name = talloc_zero ( r , const char * ) ;
if ( r - > out . key_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . display_name_length = r - > in . display_name_length ;
r - > out . result = _svcctl_GetServiceKeyNameA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_GetServiceKeyNameA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_GetCurrentGroupeStateW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_GetCurrentGroupeStateW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_GETCURRENTGROUPESTATEW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_GetCurrentGroupeStateW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_GetCurrentGroupeStateW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_GetCurrentGroupeStateW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_GetCurrentGroupeStateW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_EnumServiceGroupW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_EnumServiceGroupW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_ENUMSERVICEGROUPW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_EnumServiceGroupW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_EnumServiceGroupW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_EnumServiceGroupW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_EnumServiceGroupW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_ChangeServiceConfig2A ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_ChangeServiceConfig2A * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CHANGESERVICECONFIG2A ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_ChangeServiceConfig2A ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_ChangeServiceConfig2A , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_ChangeServiceConfig2A ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_ChangeServiceConfig2A , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_ChangeServiceConfig2W ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_ChangeServiceConfig2W * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_CHANGESERVICECONFIG2W ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_ChangeServiceConfig2W ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_ChangeServiceConfig2W , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_ChangeServiceConfig2W ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_ChangeServiceConfig2W , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceConfig2A ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceConfig2A * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICECONFIG2A ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceConfig2A ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceConfig2A , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . buffer = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . buffer = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceConfig2A ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceConfig2A , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceConfig2W ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceConfig2W * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICECONFIG2W ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceConfig2W ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceConfig2W , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . buffer = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . buffer = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceConfig2W ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceConfig2W , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_QueryServiceStatusEx ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_QueryServiceStatusEx * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_QUERYSERVICESTATUSEX ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_QueryServiceStatusEx ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_QueryServiceStatusEx , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . buffer = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . buffer = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_QueryServiceStatusEx ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_QueryServiceStatusEx , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_EnumServicesStatusExA ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct EnumServicesStatusExA * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_ENUMSERVICESSTATUSEXA ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct EnumServicesStatusExA ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( EnumServicesStatusExA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . services = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . services = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . service_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . service_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . resume_handle = r - > in . resume_handle ;
r - > out . group_name = talloc_zero ( r , const char * ) ;
if ( r - > out . group_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _EnumServicesStatusExA ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( EnumServicesStatusExA , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_EnumServicesStatusExW ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct EnumServicesStatusExW * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_ENUMSERVICESSTATUSEXW ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct EnumServicesStatusExW ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( EnumServicesStatusExW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
ZERO_STRUCT ( r - > out ) ;
r - > out . services = talloc_zero_array ( r , uint8_t , r - > in . buf_size ) ;
if ( r - > out . services = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . bytes_needed = talloc_zero ( r , uint32_t ) ;
if ( r - > out . bytes_needed = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . service_returned = talloc_zero ( r , uint32_t ) ;
if ( r - > out . service_returned = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . resume_handle = r - > in . resume_handle ;
r - > out . group_name = talloc_zero ( r , const char * ) ;
if ( r - > out . group_name = = NULL ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r - > out . result = _EnumServicesStatusExW ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( EnumServicesStatusExW , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
2007-10-18 17:40:25 -07:00
static bool api_svcctl_SCSendTSMessage ( pipes_struct * p )
2006-09-20 16:32:29 +00:00
{
2007-08-21 14:06:46 +00:00
const struct ndr_interface_call * call ;
2006-09-20 16:32:29 +00:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 14:38:47 +01:00
enum ndr_err_code ndr_err ;
2006-09-20 16:32:29 +00:00
DATA_BLOB blob ;
2007-08-21 14:06:46 +00:00
struct svcctl_SCSendTSMessage * r ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
call = & ndr_table_svcctl . calls [ NDR_SVCCTL_SCSENDTSMESSAGE ] ;
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
r = talloc ( NULL , struct svcctl_SCSendTSMessage ) ;
if ( r = = NULL ) {
2008-01-09 12:28:44 +01:00
return false ;
2007-08-21 14:06:46 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
pull = ndr_pull_init_blob ( & blob , r ) ;
2006-10-10 07:55:46 +00:00
if ( pull = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_IN_DEBUG ( svcctl_SCSendTSMessage , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
r - > out . result = _svcctl_SCSendTSMessage ( p , r ) ;
2008-01-09 12:28:44 +01:00
2006-10-10 07:55:46 +00:00
if ( p - > rng_fault_state ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2006-10-10 07:55:46 +00:00
}
2008-01-09 12:28:44 +01:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 14:06:46 +00:00
NDR_PRINT_OUT_DEBUG ( svcctl_SCSendTSMessage , r ) ;
2008-01-09 12:28:44 +01:00
}
2007-08-21 14:06:46 +00:00
push = ndr_push_init_ctx ( r ) ;
2006-09-20 16:32:29 +00:00
if ( push = = NULL ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-11-09 14:38:47 +01:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2006-09-20 16:32:29 +00:00
blob = ndr_push_blob ( push ) ;
2008-01-09 12:28:44 +01:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return false ;
2006-09-20 16:32:29 +00:00
}
2008-01-09 12:28:44 +01:00
2007-08-21 14:06:46 +00:00
talloc_free ( r ) ;
2008-01-09 12:28:44 +01:00
return true ;
2006-09-20 16:32:29 +00:00
}
/* Tables */
static struct api_struct api_svcctl_cmds [ ] =
{
2007-08-19 22:10:11 +00:00
{ " SVCCTL_CLOSESERVICEHANDLE " , NDR_SVCCTL_CLOSESERVICEHANDLE , api_svcctl_CloseServiceHandle } ,
{ " SVCCTL_CONTROLSERVICE " , NDR_SVCCTL_CONTROLSERVICE , api_svcctl_ControlService } ,
{ " SVCCTL_DELETESERVICE " , NDR_SVCCTL_DELETESERVICE , api_svcctl_DeleteService } ,
{ " SVCCTL_LOCKSERVICEDATABASE " , NDR_SVCCTL_LOCKSERVICEDATABASE , api_svcctl_LockServiceDatabase } ,
{ " SVCCTL_QUERYSERVICEOBJECTSECURITY " , NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY , api_svcctl_QueryServiceObjectSecurity } ,
{ " SVCCTL_SETSERVICEOBJECTSECURITY " , NDR_SVCCTL_SETSERVICEOBJECTSECURITY , api_svcctl_SetServiceObjectSecurity } ,
{ " SVCCTL_QUERYSERVICESTATUS " , NDR_SVCCTL_QUERYSERVICESTATUS , api_svcctl_QueryServiceStatus } ,
{ " SVCCTL_SETSERVICESTATUS " , NDR_SVCCTL_SETSERVICESTATUS , api_svcctl_SetServiceStatus } ,
{ " SVCCTL_UNLOCKSERVICEDATABASE " , NDR_SVCCTL_UNLOCKSERVICEDATABASE , api_svcctl_UnlockServiceDatabase } ,
{ " SVCCTL_NOTIFYBOOTCONFIGSTATUS " , NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS , api_svcctl_NotifyBootConfigStatus } ,
{ " SVCCTL_SCSETSERVICEBITSW " , NDR_SVCCTL_SCSETSERVICEBITSW , api_svcctl_SCSetServiceBitsW } ,
{ " SVCCTL_CHANGESERVICECONFIGW " , NDR_SVCCTL_CHANGESERVICECONFIGW , api_svcctl_ChangeServiceConfigW } ,
{ " SVCCTL_CREATESERVICEW " , NDR_SVCCTL_CREATESERVICEW , api_svcctl_CreateServiceW } ,
{ " SVCCTL_ENUMDEPENDENTSERVICESW " , NDR_SVCCTL_ENUMDEPENDENTSERVICESW , api_svcctl_EnumDependentServicesW } ,
{ " SVCCTL_ENUMSERVICESSTATUSW " , NDR_SVCCTL_ENUMSERVICESSTATUSW , api_svcctl_EnumServicesStatusW } ,
{ " SVCCTL_OPENSCMANAGERW " , NDR_SVCCTL_OPENSCMANAGERW , api_svcctl_OpenSCManagerW } ,
{ " SVCCTL_OPENSERVICEW " , NDR_SVCCTL_OPENSERVICEW , api_svcctl_OpenServiceW } ,
{ " SVCCTL_QUERYSERVICECONFIGW " , NDR_SVCCTL_QUERYSERVICECONFIGW , api_svcctl_QueryServiceConfigW } ,
{ " SVCCTL_QUERYSERVICELOCKSTATUSW " , NDR_SVCCTL_QUERYSERVICELOCKSTATUSW , api_svcctl_QueryServiceLockStatusW } ,
{ " SVCCTL_STARTSERVICEW " , NDR_SVCCTL_STARTSERVICEW , api_svcctl_StartServiceW } ,
{ " SVCCTL_GETSERVICEDISPLAYNAMEW " , NDR_SVCCTL_GETSERVICEDISPLAYNAMEW , api_svcctl_GetServiceDisplayNameW } ,
{ " SVCCTL_GETSERVICEKEYNAMEW " , NDR_SVCCTL_GETSERVICEKEYNAMEW , api_svcctl_GetServiceKeyNameW } ,
{ " SVCCTL_SCSETSERVICEBITSA " , NDR_SVCCTL_SCSETSERVICEBITSA , api_svcctl_SCSetServiceBitsA } ,
{ " SVCCTL_CHANGESERVICECONFIGA " , NDR_SVCCTL_CHANGESERVICECONFIGA , api_svcctl_ChangeServiceConfigA } ,
{ " SVCCTL_CREATESERVICEA " , NDR_SVCCTL_CREATESERVICEA , api_svcctl_CreateServiceA } ,
{ " SVCCTL_ENUMDEPENDENTSERVICESA " , NDR_SVCCTL_ENUMDEPENDENTSERVICESA , api_svcctl_EnumDependentServicesA } ,
{ " SVCCTL_ENUMSERVICESSTATUSA " , NDR_SVCCTL_ENUMSERVICESSTATUSA , api_svcctl_EnumServicesStatusA } ,
{ " SVCCTL_OPENSCMANAGERA " , NDR_SVCCTL_OPENSCMANAGERA , api_svcctl_OpenSCManagerA } ,
{ " SVCCTL_OPENSERVICEA " , NDR_SVCCTL_OPENSERVICEA , api_svcctl_OpenServiceA } ,
{ " SVCCTL_QUERYSERVICECONFIGA " , NDR_SVCCTL_QUERYSERVICECONFIGA , api_svcctl_QueryServiceConfigA } ,
{ " SVCCTL_QUERYSERVICELOCKSTATUSA " , NDR_SVCCTL_QUERYSERVICELOCKSTATUSA , api_svcctl_QueryServiceLockStatusA } ,
{ " SVCCTL_STARTSERVICEA " , NDR_SVCCTL_STARTSERVICEA , api_svcctl_StartServiceA } ,
{ " SVCCTL_GETSERVICEDISPLAYNAMEA " , NDR_SVCCTL_GETSERVICEDISPLAYNAMEA , api_svcctl_GetServiceDisplayNameA } ,
{ " SVCCTL_GETSERVICEKEYNAMEA " , NDR_SVCCTL_GETSERVICEKEYNAMEA , api_svcctl_GetServiceKeyNameA } ,
{ " SVCCTL_GETCURRENTGROUPESTATEW " , NDR_SVCCTL_GETCURRENTGROUPESTATEW , api_svcctl_GetCurrentGroupeStateW } ,
{ " SVCCTL_ENUMSERVICEGROUPW " , NDR_SVCCTL_ENUMSERVICEGROUPW , api_svcctl_EnumServiceGroupW } ,
{ " SVCCTL_CHANGESERVICECONFIG2A " , NDR_SVCCTL_CHANGESERVICECONFIG2A , api_svcctl_ChangeServiceConfig2A } ,
{ " SVCCTL_CHANGESERVICECONFIG2W " , NDR_SVCCTL_CHANGESERVICECONFIG2W , api_svcctl_ChangeServiceConfig2W } ,
{ " SVCCTL_QUERYSERVICECONFIG2A " , NDR_SVCCTL_QUERYSERVICECONFIG2A , api_svcctl_QueryServiceConfig2A } ,
{ " SVCCTL_QUERYSERVICECONFIG2W " , NDR_SVCCTL_QUERYSERVICECONFIG2W , api_svcctl_QueryServiceConfig2W } ,
{ " SVCCTL_QUERYSERVICESTATUSEX " , NDR_SVCCTL_QUERYSERVICESTATUSEX , api_svcctl_QueryServiceStatusEx } ,
{ " ENUMSERVICESSTATUSEXA " , NDR_ENUMSERVICESSTATUSEXA , api_EnumServicesStatusExA } ,
{ " ENUMSERVICESSTATUSEXW " , NDR_ENUMSERVICESSTATUSEXW , api_EnumServicesStatusExW } ,
{ " SVCCTL_SCSENDTSMESSAGE " , NDR_SVCCTL_SCSENDTSMESSAGE , api_svcctl_SCSendTSMessage } ,
2006-09-20 16:32:29 +00:00
} ;
void svcctl_get_pipe_fns ( struct api_struct * * fns , int * n_fns )
{
* fns = api_svcctl_cmds ;
* n_fns = sizeof ( api_svcctl_cmds ) / sizeof ( struct api_struct ) ;
}
NTSTATUS rpc_svcctl_init ( void )
{
return rpc_pipe_register_commands ( SMB_RPC_INTERFACE_VERSION , " svcctl " , " svcctl " , api_svcctl_cmds , sizeof ( api_svcctl_cmds ) / sizeof ( struct api_struct ) ) ;
}