2004-10-10 05:35:33 +04:00
/*
Unix SMB / CIFS implementation .
endpoint server for the drsuapi pipe
Copyright ( C ) Stefan Metzmacher 2004
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 .
*/
# include "includes.h"
# include "rpc_server/common/common.h"
# include "rpc_server/drsuapi/dcesrv_drsuapi.h"
/*
destroy a general handle .
*/
static void drsuapi_handle_destroy ( struct dcesrv_connection * conn , struct dcesrv_handle * h )
{
talloc_free ( h - > data ) ;
}
/*
drsuapi_DsBind
*/
static NTSTATUS drsuapi_DsBind ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct drsuapi_DsBind * r )
{
struct drsuapi_bind_state * b_state ;
struct dcesrv_handle * handle ;
r - > out . info = NULL ;
ZERO_STRUCTP ( r - > out . bind_handle ) ;
b_state = talloc_p ( dce_call - > conn , struct drsuapi_bind_state ) ;
if ( ! b_state ) {
return NT_STATUS_NO_MEMORY ;
}
/* TODO: fill b_state here */
handle = dcesrv_handle_new ( dce_call - > conn , DRSUAPI_BIND_HANDLE ) ;
if ( ! handle ) {
talloc_free ( b_state ) ;
return NT_STATUS_NO_MEMORY ;
}
handle - > data = b_state ;
handle - > destroy = drsuapi_handle_destroy ;
* r - > out . bind_handle = handle - > wire_handle ;
return NT_STATUS_OK ;
}
/*
drsuapi_DsUnbind
*/
static NTSTATUS drsuapi_DsUnbind ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct drsuapi_DsUnbind * r )
{
struct dcesrv_handle * h ;
* r - > out . bind_handle = * r - > in . bind_handle ;
DCESRV_PULL_HANDLE ( h , r - > in . bind_handle , DRSUAPI_BIND_HANDLE ) ;
/* this causes the callback drsuapi_handle_destroy() to be called by
the handle destroy code which destroys the state associated
with the handle */
dcesrv_handle_destroy ( dce_call - > conn , h ) ;
ZERO_STRUCTP ( r - > out . bind_handle ) ;
return NT_STATUS_OK ;
}
/*
DRSUAPI_REPLICA_SYNC
*/
static NTSTATUS DRSUAPI_REPLICA_SYNC ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REPLICA_SYNC * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_NC_CHANGES
*/
static NTSTATUS DRSUAPI_GET_NC_CHANGES ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_NC_CHANGES * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_UPDATE_REFS
*/
static NTSTATUS DRSUAPI_UPDATE_REFS ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_UPDATE_REFS * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REPLICA_ADD
*/
static NTSTATUS DRSUAPI_REPLICA_ADD ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REPLICA_ADD * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REPLICA_DEL
*/
static NTSTATUS DRSUAPI_REPLICA_DEL ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REPLICA_DEL * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REPLICA_MODIFY
*/
static NTSTATUS DRSUAPI_REPLICA_MODIFY ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REPLICA_MODIFY * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_VERIFY_NAMES
*/
static NTSTATUS DRSUAPI_VERIFY_NAMES ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_VERIFY_NAMES * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_MEMBERSHIPS
*/
static NTSTATUS DRSUAPI_GET_MEMBERSHIPS ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_MEMBERSHIPS * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_INTER_DOMAIN_MOVE
*/
static NTSTATUS DRSUAPI_INTER_DOMAIN_MOVE ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_INTER_DOMAIN_MOVE * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_NT4_CHANGELOG
*/
static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_NT4_CHANGELOG * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
2004-10-13 18:25:44 +04:00
drsuapi_DsCrackNames
2004-10-10 05:35:33 +04:00
*/
2004-10-13 18:25:44 +04:00
static NTSTATUS drsuapi_DsCrackNames ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct drsuapi_DsCrackNames * r )
2004-10-10 05:35:33 +04:00
{
2004-10-13 19:06:43 +04:00
struct dcesrv_handle * h ;
r - > out . level = r - > in . level ;
ZERO_STRUCT ( r - > out . out ) ;
DCESRV_PULL_HANDLE ( h , r - > in . bind_handle , DRSUAPI_BIND_HANDLE ) ;
switch ( r - > in . level ) {
case 1 : {
int i ;
r - > out . out . info1 = talloc_p ( mem_ctx , struct drsuapi_DsCrackNamesOutInfo1 ) ;
NTSTATUS_TALLOC_CHECK ( r - > out . out . info1 ) ;
r - > out . out . info1 - > names = talloc_array_p ( mem_ctx ,
struct drsuapi_DsCrackNamesOutInfo1Names ,
r - > in . in . info1 . count ) ;
NTSTATUS_TALLOC_CHECK ( r - > out . out . info1 - > names ) ;
r - > out . out . info1 - > count = r - > in . in . info1 . count ;
for ( i = 0 ; i < r - > out . out . info1 - > count ; i + + ) {
const char * name ;
r - > out . out . info1 - > names [ i ] . unknown1 = 2 ;
r - > out . out . info1 - > names [ i ] . name1 = NULL ;
r - > out . out . info1 - > names [ i ] . name2 = NULL ;
/* TODO: fill crack the right names! */
name = talloc_asprintf ( mem_ctx , " %s/ " , lp_realm ( ) ) ;
if ( strcmp ( name , r - > in . in . info1 . names [ i ] . str ) ! = 0 ) {
continue ;
}
r - > out . out . info1 - > names [ i ] . unknown1 = 0 ;
r - > out . out . info1 - > names [ i ] . name1 = talloc_asprintf ( mem_ctx , " %s " , lp_realm ( ) ) ;
r - > out . out . info1 - > names [ i ] . name2 = talloc_asprintf ( mem_ctx , " %s \\ " , lp_workgroup ( ) ) ;
}
return NT_STATUS_OK ;
}
}
return NT_STATUS_INVALID_LEVEL ;
2004-10-10 05:35:33 +04:00
}
/*
DRSUAPI_WRITE_SPN
*/
static NTSTATUS DRSUAPI_WRITE_SPN ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_WRITE_SPN * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REMOVE_DS_SERVER
*/
static NTSTATUS DRSUAPI_REMOVE_DS_SERVER ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REMOVE_DS_SERVER * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REMOVE_DS_DOMAIN
*/
static NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REMOVE_DS_DOMAIN * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_DOMAIN_CONTROLLER_INFO
*/
static NTSTATUS DRSUAPI_DOMAIN_CONTROLLER_INFO ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_DOMAIN_CONTROLLER_INFO * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_ADD_ENTRY
*/
static NTSTATUS DRSUAPI_ADD_ENTRY ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_ADD_ENTRY * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_EXECUTE_KCC
*/
static NTSTATUS DRSUAPI_EXECUTE_KCC ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_EXECUTE_KCC * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_REPL_INFO
*/
static NTSTATUS DRSUAPI_GET_REPL_INFO ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_REPL_INFO * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_ADD_SID_HISTORY
*/
static NTSTATUS DRSUAPI_ADD_SID_HISTORY ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_ADD_SID_HISTORY * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_MEMBERSHIPS2
*/
static NTSTATUS DRSUAPI_GET_MEMBERSHIPS2 ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_MEMBERSHIPS2 * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_REPLICA_VERIFY_OBJECTS
*/
static NTSTATUS DRSUAPI_REPLICA_VERIFY_OBJECTS ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_REPLICA_VERIFY_OBJECTS * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_GET_OBJECT_EXISTENCE
*/
static NTSTATUS DRSUAPI_GET_OBJECT_EXISTENCE ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_GET_OBJECT_EXISTENCE * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/*
DRSUAPI_QUERY_SITES_BY_COST
*/
static NTSTATUS DRSUAPI_QUERY_SITES_BY_COST ( struct dcesrv_call_state * dce_call , TALLOC_CTX * mem_ctx ,
struct DRSUAPI_QUERY_SITES_BY_COST * r )
{
DCESRV_FAULT ( DCERPC_FAULT_OP_RNG_ERROR ) ;
}
/* include the generated boilerplate */
# include "librpc/gen_ndr/ndr_drsuapi_s.c"