2005-07-02 15:12:33 +04:00
/*
Unix SMB / CIFS implementation .
ejs < - > rpc interface definitions
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
2006-03-18 18:42:57 +03:00
# include "librpc/gen_ndr/security.h"
# include "librpc/rpc/dcerpc.h"
2005-07-02 15:12:33 +04:00
struct ejs_rpc {
2005-07-07 12:20:57 +04:00
int eid ;
const char * callname ;
2005-07-08 07:10:30 +04:00
/* as ejs does only one pass, we can use a single var for switch
handling */
uint32_t switch_var ;
2005-07-02 15:12:33 +04:00
} ;
2005-07-07 10:25:04 +04:00
typedef NTSTATUS ( * ejs_pull_t ) ( struct ejs_rpc * , struct MprVar * , const char * , void * ) ;
typedef NTSTATUS ( * ejs_push_t ) ( struct ejs_rpc * , struct MprVar * , const char * , const void * ) ;
2005-07-02 15:12:33 +04:00
typedef NTSTATUS ( * ejs_pull_function_t ) ( struct ejs_rpc * , struct MprVar * , void * ) ;
typedef NTSTATUS ( * ejs_push_function_t ) ( struct ejs_rpc * , struct MprVar * , const void * ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_panic ( struct ejs_rpc * ejs , const char * why ) ;
2005-07-08 07:10:30 +04:00
void ejs_set_switch ( struct ejs_rpc * ejs , uint32_t switch_var ) ;
2005-07-07 12:20:57 +04:00
2005-07-15 11:18:23 +04:00
NTSTATUS smbcalls_register_ejs ( const char * name , MprCFunction fn ) ;
2005-07-09 15:48:59 +04:00
2005-07-10 10:51:00 +04:00
int ejs_rpc_call ( int eid , int argc , struct MprVar * * argv ,
const struct dcerpc_interface_table * iface , int callnum ,
2005-07-07 10:25:04 +04:00
ejs_pull_function_t ejs_pull , ejs_push_function_t ejs_push ) ;
2005-07-02 15:12:33 +04:00
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_struct_start ( struct ejs_rpc * ejs , struct MprVar * * v , const char * name ) ;
NTSTATUS ejs_push_struct_start ( struct ejs_rpc * ejs , struct MprVar * * v , const char * name ) ;
2005-07-04 05:31:34 +04:00
NTSTATUS ejs_pull_uint8 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint8_t * r ) ;
NTSTATUS ejs_push_uint8 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint8_t * r ) ;
2005-07-04 05:31:34 +04:00
NTSTATUS ejs_pull_uint16 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint16_t * r ) ;
NTSTATUS ejs_push_uint16 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint16_t * r ) ;
2005-07-02 15:12:33 +04:00
NTSTATUS ejs_pull_uint32 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint32_t * r ) ;
2005-07-09 16:53:50 +04:00
NTSTATUS ejs_push_int32 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const int32_t * r ) ;
NTSTATUS ejs_pull_int32 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , int32_t * r ) ;
2005-07-02 15:12:33 +04:00
NTSTATUS ejs_push_uint32 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint32_t * r ) ;
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_hyper ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_hyper ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint64_t * r ) ;
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_pull_dlong ( struct ejs_rpc * ejs ,
2005-12-02 10:11:43 +03:00
struct MprVar * v , const char * name , int64_t * r ) ;
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_push_dlong ( struct ejs_rpc * ejs ,
2005-12-02 10:11:43 +03:00
struct MprVar * v , const char * name , const int64_t * r ) ;
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_pull_udlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_udlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const uint64_t * r ) ;
NTSTATUS ejs_pull_NTTIME ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_NTTIME ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const uint64_t * r ) ;
2005-12-27 21:15:18 +03:00
NTSTATUS ejs_pull_time_t ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , time_t * r ) ;
NTSTATUS ejs_push_time_t ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const time_t * r ) ;
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_enum ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , unsigned * r ) ;
NTSTATUS ejs_push_enum ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const unsigned * r ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_pull_string ( struct ejs_rpc * ejs ,
2005-07-08 12:18:52 +04:00
struct MprVar * v , const char * name , const char * * s ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_push_string ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const char * s ) ;
2005-07-08 08:55:07 +04:00
void ejs_set_constant_int ( int eid , const char * name , int value ) ;
void ejs_set_constant_string ( int eid , const char * name , const char * value ) ;
2005-07-08 07:33:32 +04:00
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_pull_dom_sid ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , struct dom_sid * r ) ;
NTSTATUS ejs_push_dom_sid ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const struct dom_sid * r ) ;
2005-07-08 14:29:18 +04:00
NTSTATUS ejs_push_null ( struct ejs_rpc * ejs , struct MprVar * v , const char * name ) ;
BOOL ejs_pull_null ( struct ejs_rpc * ejs , struct MprVar * v , const char * name ) ;
2005-08-06 03:01:57 +04:00
NTSTATUS ejs_push_WERROR ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const WERROR * r ) ;
NTSTATUS ejs_push_NTSTATUS ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const NTSTATUS * r ) ;
2005-08-05 19:53:04 +04:00
NTSTATUS ejs_pull_DATA_BLOB ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , DATA_BLOB * r ) ;
NTSTATUS ejs_push_DATA_BLOB ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const DATA_BLOB * r ) ;
NTSTATUS ejs_pull_BOOL ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , BOOL * r ) ;
NTSTATUS ejs_push_BOOL ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const BOOL * r ) ;
2005-07-09 09:28:42 +04:00
2005-08-17 05:29:35 +04:00
NTSTATUS ejs_pull_array_uint8 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name ,
uint8_t * r , uint32_t length ) ;
NTSTATUS ejs_push_array_uint8 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name ,
const uint8_t * r , uint32_t length ) ;
2005-12-27 01:47:40 +03:00
NTSTATUS ejs_pull_GUID ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , struct GUID * r ) ;
NTSTATUS ejs_push_GUID ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const struct GUID * r ) ;
struct lsa_String ;
NTSTATUS ejs_pull_lsa_String ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , struct lsa_String * r ) ;
NTSTATUS ejs_push_lsa_String ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const struct lsa_String * r ) ;
struct winreg_String ;
NTSTATUS ejs_pull_winreg_String ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , struct winreg_String * r ) ;
NTSTATUS ejs_push_winreg_String ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const struct winreg_String * r ) ;
2006-08-28 21:17:39 +04:00
# define EJS_ALLOC(ejs, s) do { \
( s ) = talloc_ptrtype ( ejs , ( s ) ) ; \
2005-07-08 07:33:32 +04:00
if ( ! ( s ) ) return ejs_panic ( ejs , " out of memory " ) ; \
} while ( 0 )
2006-08-28 21:17:39 +04:00
# define EJS_ALLOC_N(ejs, s, n) do { \
( s ) = talloc_array_ptrtype ( ejs , ( s ) , n ) ; \
2005-07-08 07:33:32 +04:00
if ( ! ( s ) ) return ejs_panic ( ejs , " out of memory " ) ; \
} while ( 0 )
2005-07-08 12:18:52 +04:00
/* some types are equivalent for ejs */
# define ejs_pull_dom_sid2 ejs_pull_dom_sid
# define ejs_push_dom_sid2 ejs_push_dom_sid
2005-12-27 21:15:18 +03:00
# define ejs_pull_dom_sid28 ejs_pull_dom_sid
# define ejs_push_dom_sid28 ejs_push_dom_sid
2005-07-08 12:18:52 +04:00
# define ejs_pull_NTTIME_hyper ejs_pull_NTTIME
# define ejs_push_NTTIME_hyper ejs_push_NTTIME
2005-12-27 21:15:18 +03:00
# define ejs_pull_NTTIME_1sec ejs_pull_NTTIME
# define ejs_push_NTTIME_1sec ejs_push_NTTIME
2005-07-15 11:18:23 +04:00