2007-04-03 16:28:40 +04:00
/*
* Unix SMB / CIFS implementation .
* server auto - generated by pidl . DO NOT MODIFY !
*/
# include "includes.h"
2008-12-16 18:32:18 +03:00
# include "../librpc/gen_ndr/srv_epmapper.h"
2007-04-03 16:28:40 +04:00
2007-10-19 04:40:25 +04:00
static bool api_epm_Insert ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_Insert * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_INSERT ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_Insert ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_Insert , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_Insert ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_Insert , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_Delete ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_Delete * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_DELETE ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_Delete ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_Delete , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_Delete ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_Delete , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_Lookup ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_Lookup * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_LOOKUP ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_Lookup ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_Lookup , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . num_ents = talloc_zero ( r , uint32_t ) ;
if ( r - > out . num_ents = = NULL ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
r - > out . entries = talloc_zero_array ( r , struct epm_entry_t , r - > in . max_ents ) ;
if ( r - > out . entries = = NULL ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_Lookup ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_Lookup , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_Map ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_Map * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_MAP ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_Map ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_Map , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . num_towers = talloc_zero ( r , uint32_t ) ;
if ( r - > out . num_towers = = NULL ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
r - > out . towers = talloc_zero_array ( r , struct epm_twr_p_t , r - > in . max_towers ) ;
if ( r - > out . towers = = NULL ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_Map ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_Map , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_LookupHandleFree ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_LookupHandleFree * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_LOOKUPHANDLEFREE ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_LookupHandleFree ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_LookupHandleFree , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . result = _epm_LookupHandleFree ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_LookupHandleFree , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_InqObject ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_InqObject * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_INQOBJECT ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_InqObject ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_InqObject , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_InqObject ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_InqObject , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_MgmtDelete ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_MgmtDelete * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_MGMTDELETE ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_MgmtDelete ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_MgmtDelete , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_MgmtDelete ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_MgmtDelete , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
2007-10-19 04:40:25 +04:00
static bool api_epm_MapAuth ( pipes_struct * p )
2007-04-03 16:28:40 +04:00
{
2007-08-21 18:06:46 +04:00
const struct ndr_interface_call * call ;
2007-04-03 16:28:40 +04:00
struct ndr_pull * pull ;
struct ndr_push * push ;
2007-11-09 16:38:47 +03:00
enum ndr_err_code ndr_err ;
2007-04-03 16:28:40 +04:00
DATA_BLOB blob ;
2007-08-21 18:06:46 +04:00
struct epm_MapAuth * r ;
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
call = & ndr_table_epmapper . calls [ NDR_EPM_MAPAUTH ] ;
2008-01-09 14:28:44 +03:00
2008-02-11 11:15:30 +03:00
r = talloc ( talloc_tos ( ) , struct epm_MapAuth ) ;
2007-08-21 18:06:46 +04:00
if ( r = = NULL ) {
2008-01-09 14:28:44 +03:00
return false ;
2007-08-21 18:06:46 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
if ( ! prs_data_blob ( & p - > in_data . data , & blob , r ) ) {
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2008-09-23 22:59:30 +04:00
pull = ndr_pull_init_blob ( & blob , r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( pull = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
pull - > flags | = LIBNDR_FLAG_REF_ALLOC ;
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_pull ( pull , NDR_IN , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_IN_DEBUG ( epm_MapAuth , r ) ;
2008-01-09 14:28:44 +03:00
}
2007-08-21 18:06:46 +04:00
r - > out . result = _epm_MapAuth ( p , r ) ;
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
if ( p - > rng_fault_state ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
/* Return true here, srv_pipe_hnd.c will take care */
return true ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
if ( DEBUGLEVEL > = 10 ) {
2007-08-21 18:06:46 +04:00
NDR_PRINT_OUT_DEBUG ( epm_MapAuth , r ) ;
2008-01-09 14:28:44 +03:00
}
2008-10-12 21:05:46 +04:00
push = ndr_push_init_ctx ( r , NULL ) ;
2007-04-03 16:28:40 +04:00
if ( push = = NULL ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-11-09 16:38:47 +03:00
ndr_err = call - > ndr_push ( push , NDR_OUT , r ) ;
if ( ! NDR_ERR_CODE_IS_SUCCESS ( ndr_err ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-04-03 16:28:40 +04:00
blob = ndr_push_blob ( push ) ;
2008-01-09 14:28:44 +03:00
if ( ! prs_copy_data_in ( & p - > out_data . rdata , ( const char * ) blob . data , ( uint32_t ) blob . length ) ) {
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return false ;
2007-04-03 16:28:40 +04:00
}
2008-01-09 14:28:44 +03:00
2007-08-21 18:06:46 +04:00
talloc_free ( r ) ;
2008-01-09 14:28:44 +03:00
return true ;
2007-04-03 16:28:40 +04:00
}
/* Tables */
static struct api_struct api_epmapper_cmds [ ] =
{
2007-08-20 02:10:11 +04:00
{ " EPM_INSERT " , NDR_EPM_INSERT , api_epm_Insert } ,
{ " EPM_DELETE " , NDR_EPM_DELETE , api_epm_Delete } ,
{ " EPM_LOOKUP " , NDR_EPM_LOOKUP , api_epm_Lookup } ,
{ " EPM_MAP " , NDR_EPM_MAP , api_epm_Map } ,
{ " EPM_LOOKUPHANDLEFREE " , NDR_EPM_LOOKUPHANDLEFREE , api_epm_LookupHandleFree } ,
{ " EPM_INQOBJECT " , NDR_EPM_INQOBJECT , api_epm_InqObject } ,
{ " EPM_MGMTDELETE " , NDR_EPM_MGMTDELETE , api_epm_MgmtDelete } ,
{ " EPM_MAPAUTH " , NDR_EPM_MAPAUTH , api_epm_MapAuth } ,
2007-04-03 16:28:40 +04:00
} ;
void epmapper_get_pipe_fns ( struct api_struct * * fns , int * n_fns )
{
* fns = api_epmapper_cmds ;
* n_fns = sizeof ( api_epmapper_cmds ) / sizeof ( struct api_struct ) ;
}
2009-01-21 16:05:51 +03:00
NTSTATUS rpc_epmapper_dispatch ( struct rpc_pipe_client * cli , TALLOC_CTX * mem_ctx , const struct ndr_interface_table * table , uint32_t opnum , void * _r )
{
if ( cli - > pipes_struct = = NULL ) {
return NT_STATUS_INVALID_PARAMETER ;
}
switch ( opnum )
{
case NDR_EPM_INSERT : {
2009-01-22 03:19:38 +03:00
struct epm_Insert * r = ( struct epm_Insert * ) _r ;
2009-01-21 16:05:51 +03:00
r - > out . result = _epm_Insert ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_DELETE : {
2009-01-22 03:19:38 +03:00
struct epm_Delete * r = ( struct epm_Delete * ) _r ;
2009-01-21 16:05:51 +03:00
r - > out . result = _epm_Delete ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_LOOKUP : {
2009-01-22 03:19:38 +03:00
struct epm_Lookup * r = ( struct epm_Lookup * ) _r ;
2009-01-21 16:05:51 +03:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . num_ents = talloc_zero ( mem_ctx , uint32_t ) ;
if ( r - > out . num_ents = = NULL ) {
return NT_STATUS_NO_MEMORY ;
}
r - > out . entries = talloc_zero_array ( mem_ctx , struct epm_entry_t , r - > in . max_ents ) ;
if ( r - > out . entries = = NULL ) {
return NT_STATUS_NO_MEMORY ;
}
r - > out . result = _epm_Lookup ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_MAP : {
2009-01-22 03:19:38 +03:00
struct epm_Map * r = ( struct epm_Map * ) _r ;
2009-01-21 16:05:51 +03:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . num_towers = talloc_zero ( mem_ctx , uint32_t ) ;
if ( r - > out . num_towers = = NULL ) {
return NT_STATUS_NO_MEMORY ;
}
r - > out . towers = talloc_zero_array ( mem_ctx , struct epm_twr_p_t , r - > in . max_towers ) ;
if ( r - > out . towers = = NULL ) {
return NT_STATUS_NO_MEMORY ;
}
r - > out . result = _epm_Map ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_LOOKUPHANDLEFREE : {
2009-01-22 03:19:38 +03:00
struct epm_LookupHandleFree * r = ( struct epm_LookupHandleFree * ) _r ;
2009-01-21 16:05:51 +03:00
ZERO_STRUCT ( r - > out ) ;
r - > out . entry_handle = r - > in . entry_handle ;
r - > out . result = _epm_LookupHandleFree ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_INQOBJECT : {
2009-01-22 03:19:38 +03:00
struct epm_InqObject * r = ( struct epm_InqObject * ) _r ;
2009-01-21 16:05:51 +03:00
r - > out . result = _epm_InqObject ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_MGMTDELETE : {
2009-01-22 03:19:38 +03:00
struct epm_MgmtDelete * r = ( struct epm_MgmtDelete * ) _r ;
2009-01-21 16:05:51 +03:00
r - > out . result = _epm_MgmtDelete ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
case NDR_EPM_MAPAUTH : {
2009-01-22 03:19:38 +03:00
struct epm_MapAuth * r = ( struct epm_MapAuth * ) _r ;
2009-01-21 16:05:51 +03:00
r - > out . result = _epm_MapAuth ( cli - > pipes_struct , r ) ;
return NT_STATUS_OK ;
}
default :
return NT_STATUS_NOT_IMPLEMENTED ;
}
}
2007-04-03 16:28:40 +04:00
NTSTATUS rpc_epmapper_init ( void )
{
2009-01-07 01:29:25 +03:00
return rpc_srv_register ( SMB_RPC_INTERFACE_VERSION , " epmapper " , " epmapper " , & ndr_table_epmapper , api_epmapper_cmds , sizeof ( api_epmapper_cmds ) / sizeof ( struct api_struct ) ) ;
2007-04-03 16:28:40 +04:00
}