2004-07-13 22:05:02 +04:00
/*
Unix SMB / CIFS implementation .
DRSUapi tests
Copyright ( C ) Andrew Tridgell 2003
Copyright ( C ) Stefan ( metze ) 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"
2004-08-04 13:33:41 +04:00
# define TEST_MACHINE_NAME "torturetest"
2004-09-17 14:44:28 +04:00
static BOOL test_Bind ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
struct policy_handle * handle )
2004-07-13 22:05:02 +04:00
{
NTSTATUS status ;
2004-09-17 14:44:28 +04:00
struct drsuapi_Bind r ;
BOOL ret = True ;
2004-07-13 22:05:02 +04:00
2004-09-17 14:44:28 +04:00
ZERO_STRUCT ( r ) ;
r . out . handle = handle ;
2004-07-13 22:05:02 +04:00
2004-09-17 14:44:28 +04:00
status = dcerpc_drsuapi_Bind ( p , mem_ctx , & r ) ;
2004-07-13 22:05:02 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2004-09-17 14:44:28 +04:00
const char * errstr = nt_errstr ( status ) ;
2004-07-13 22:05:02 +04:00
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NET_WRITE_FAULT ) ) {
2004-09-17 14:44:28 +04:00
errstr = dcerpc_errstr ( mem_ctx , p - > last_fault_code ) ;
2004-07-13 22:05:02 +04:00
}
2004-09-17 14:44:28 +04:00
printf ( " drsuapi_Bind level failed - %s \n " , errstr ) ;
ret = False ;
2004-07-13 22:05:02 +04:00
}
2004-09-17 14:44:28 +04:00
return ret ;
2004-07-13 22:05:02 +04:00
}
2004-09-17 14:44:28 +04:00
static BOOL test_Unbind ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
struct policy_handle * handle )
2004-07-13 22:05:02 +04:00
{
NTSTATUS status ;
2004-09-17 14:44:28 +04:00
struct drsuapi_Unbind r ;
2004-07-13 22:05:02 +04:00
BOOL ret = True ;
2004-09-17 14:44:28 +04:00
r . in . handle = handle ;
2004-09-17 18:30:17 +04:00
r . out . handle = handle ;
2004-07-13 22:05:02 +04:00
2004-09-17 14:44:28 +04:00
status = dcerpc_drsuapi_Unbind ( p , mem_ctx , & r ) ;
2004-07-13 22:05:02 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2004-08-20 19:00:22 +04:00
const char * errstr = nt_errstr ( status ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_NET_WRITE_FAULT ) ) {
2004-08-30 07:10:43 +04:00
errstr = dcerpc_errstr ( mem_ctx , p - > last_fault_code ) ;
2004-08-20 19:00:22 +04:00
}
2004-09-17 14:44:28 +04:00
printf ( " drsuapi_Unbind level failed - %s \n " , errstr ) ;
2004-07-13 22:05:02 +04:00
ret = False ;
}
return ret ;
}
BOOL torture_rpc_drsuapi ( int dummy )
{
NTSTATUS status ;
struct dcerpc_pipe * p ;
TALLOC_CTX * mem_ctx ;
BOOL ret = True ;
2004-09-17 14:44:28 +04:00
struct policy_handle handle ;
2004-08-04 13:33:41 +04:00
2004-09-17 14:44:28 +04:00
status = torture_rpc_connection ( & p ,
DCERPC_DRSUAPI_NAME ,
DCERPC_DRSUAPI_UUID ,
DCERPC_DRSUAPI_VERSION ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) {
2004-08-04 13:33:41 +04:00
return False ;
}
2004-07-13 22:05:02 +04:00
2004-09-17 14:44:28 +04:00
printf ( " Connected to DRAUAPI pipe \n " ) ;
2004-08-04 13:33:41 +04:00
2004-09-17 14:44:28 +04:00
mem_ctx = talloc_init ( " torture_rpc_drsuapi " ) ;
2004-07-13 22:05:02 +04:00
2004-09-17 14:44:28 +04:00
if ( ! test_Bind ( p , mem_ctx , & handle ) ) {
ret = False ;
2004-07-13 22:05:02 +04:00
}
2004-09-17 14:44:28 +04:00
if ( ! test_Unbind ( p , mem_ctx , & handle ) ) {
2004-07-13 22:05:02 +04:00
ret = False ;
}
2004-08-04 13:33:41 +04:00
#if 0
2004-07-13 22:05:02 +04:00
if ( ! test_scan ( p , mem_ctx ) ) {
ret = False ;
}
2004-08-04 13:33:41 +04:00
# endif
2004-07-13 22:05:02 +04:00
talloc_destroy ( mem_ctx ) ;
torture_rpc_close ( p ) ;
return ret ;
}