2004-07-08 16:41:10 +00:00
/*
Unix SMB / CIFS implementation .
test suite for various RAP operations
Copyright ( C ) Volker Lendecke 2004
2005-01-25 01:21:59 +00:00
Copyright ( C ) Tim Potter 2005
2008-01-05 19:03:36 -06:00
Copyright ( C ) Jelmer Vernooij 2007
2010-07-05 16:39:44 +02:00
Copyright ( C ) Guenther Deschner 2010
2004-07-08 16:41:10 +00:00
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
2007-07-10 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2004-07-08 16:41:10 +00:00
( 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
2007-07-10 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-07-08 16:41:10 +00:00
*/
# include "includes.h"
2006-03-17 17:59:58 +00:00
# include "libcli/libcli.h"
2008-04-27 14:02:46 +01:00
# include "torture/smbtorture.h"
2006-03-17 17:59:58 +00:00
# include "torture/util.h"
2007-12-13 22:46:09 +01:00
# include "param/param.h"
2011-03-15 17:28:51 +01:00
# include "libcli/rap/rap.h"
2010-03-25 18:36:12 +01:00
# include "torture/rap/proto.h"
2004-07-08 16:41:10 +00:00
2008-01-05 19:03:36 -06:00
static bool test_netshareenum ( struct torture_context * tctx ,
struct smbcli_state * cli )
2004-07-08 16:41:10 +00:00
{
struct rap_NetShareEnum r ;
int i ;
r . in . level = 1 ;
r . in . bufsize = 8192 ;
2008-01-05 19:03:36 -06:00
torture_assert_ntstatus_ok ( tctx ,
2010-05-09 17:20:01 +02:00
smbcli_rap_netshareenum ( cli - > tree , tctx , & r ) , " " ) ;
2004-07-08 16:41:10 +00:00
for ( i = 0 ; i < r . out . count ; i + + ) {
2010-04-26 22:06:47 +02:00
printf ( " %s %d %s \n " , r . out . info [ i ] . info1 . share_name ,
r . out . info [ i ] . info1 . share_type ,
2004-07-08 16:41:10 +00:00
r . out . info [ i ] . info1 . comment ) ;
}
2007-10-06 22:28:14 +00:00
return true ;
2004-07-08 16:41:10 +00:00
}
2008-01-05 19:03:36 -06:00
static bool test_netserverenum ( struct torture_context * tctx ,
struct smbcli_state * cli )
2004-07-08 16:41:10 +00:00
{
struct rap_NetServerEnum2 r ;
int i ;
r . in . level = 0 ;
r . in . bufsize = 8192 ;
r . in . servertype = 0xffffffff ;
r . in . servertype = 0x80000000 ;
r . in . domain = NULL ;
2008-01-05 19:03:36 -06:00
torture_assert_ntstatus_ok ( tctx ,
2010-05-09 17:20:01 +02:00
smbcli_rap_netserverenum2 ( cli - > tree , tctx , & r ) , " " ) ;
2004-07-08 16:41:10 +00:00
for ( i = 0 ; i < r . out . count ; i + + ) {
switch ( r . in . level ) {
case 0 :
printf ( " %s \n " , r . out . info [ i ] . info0 . name ) ;
break ;
case 1 :
printf ( " %s %x %s \n " , r . out . info [ i ] . info1 . name ,
r . out . info [ i ] . info1 . servertype ,
r . out . info [ i ] . info1 . comment ) ;
break ;
}
}
2007-10-06 22:28:14 +00:00
return true ;
2004-07-08 16:41:10 +00:00
}
2008-01-05 19:03:36 -06:00
static bool test_netservergetinfo ( struct torture_context * tctx ,
struct smbcli_state * cli )
2004-07-08 16:41:10 +00:00
{
2006-10-09 11:19:30 +00:00
struct rap_WserverGetInfo r ;
2007-10-06 22:28:14 +00:00
bool res = true ;
2006-10-09 11:19:30 +00:00
r . in . bufsize = 0xffff ;
r . in . level = 0 ;
2010-03-19 10:54:12 +01:00
torture_assert_ntstatus_ok ( tctx ,
2010-05-09 17:20:01 +02:00
smbcli_rap_netservergetinfo ( cli - > tree , tctx , & r ) ,
2010-03-19 10:54:12 +01:00
" rap_netservergetinfo level 0 failed " ) ;
2010-05-11 13:39:37 +02:00
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" rap_netservergetinfo level 0 failed " ) ;
2010-03-19 10:54:12 +01:00
2006-10-09 11:19:30 +00:00
r . in . level = 1 ;
2010-03-19 10:54:12 +01:00
torture_assert_ntstatus_ok ( tctx ,
2010-05-09 17:20:01 +02:00
smbcli_rap_netservergetinfo ( cli - > tree , tctx , & r ) ,
2010-03-19 10:54:12 +01:00
" rap_netservergetinfo level 1 failed " ) ;
2010-05-11 13:39:37 +02:00
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" rap_netservergetinfo level 1 failed " ) ;
2004-07-08 16:41:10 +00:00
return res ;
}
2011-03-02 10:57:26 +01:00
static bool test_netsessionenum ( struct torture_context * tctx ,
struct smbcli_state * cli )
{
struct rap_NetSessionEnum r ;
2011-03-15 16:35:58 +01:00
int i , n ;
2011-03-02 10:57:26 +01:00
uint16_t levels [ ] = { 2 } ;
for ( i = 0 ; i < ARRAY_SIZE ( levels ) ; i + + ) {
r . in . level = levels [ i ] ;
r . in . bufsize = 8192 ;
torture_comment ( tctx ,
" Testing rap_NetSessionEnum level %d \n " , r . in . level ) ;
torture_assert_ntstatus_ok ( tctx ,
smbcli_rap_netsessionenum ( cli - > tree , tctx , & r ) ,
" smbcli_rap_netsessionenum failed " ) ;
2011-03-18 01:23:29 +01:00
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" smbcli_rap_netsessionenum failed " ) ;
2011-03-15 16:35:58 +01:00
for ( n = 0 ; n < r . out . count ; n + + ) {
switch ( r . in . level ) {
case 2 :
torture_comment ( tctx , " ComputerName: %s \n " ,
r . out . info [ n ] . info2 . ComputerName ) ;
torture_comment ( tctx , " UserName: %s \n " ,
r . out . info [ n ] . info2 . UserName ) ;
torture_assert ( tctx , r . out . info [ n ] . info2 . ComputerName ,
" ComputerName empty " ) ;
torture_assert ( tctx , r . out . info [ n ] . info2 . UserName ,
" UserName empty " ) ;
break ;
default :
break ;
}
}
2011-03-02 10:57:26 +01:00
}
return true ;
}
2011-03-18 01:23:53 +01:00
static bool test_netsessiongetinfo_bysession ( struct torture_context * tctx ,
struct smbcli_state * cli ,
const char * session )
{
struct rap_NetSessionGetInfo r ;
int i ;
uint16_t levels [ ] = { 2 } ;
if ( session & & session [ 0 ] = = ' \\ ' & & session [ 1 ] = = ' \\ ' ) {
r . in . SessionName = session ;
} else {
r . in . SessionName = talloc_asprintf ( tctx , " \\ \\ %s " , session ) ;
}
r . in . bufsize = 0xffff ;
for ( i = 0 ; i < ARRAY_SIZE ( levels ) ; i + + ) {
r . in . level = levels [ i ] ;
torture_assert_ntstatus_ok ( tctx ,
smbcli_rap_netsessiongetinfo ( cli - > tree , tctx , & r ) ,
" rap_netsessiongetinfo failed " ) ;
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" rap_netsessiongetinfo failed " ) ;
}
return true ;
}
static bool test_netsessiongetinfo ( struct torture_context * tctx ,
struct smbcli_state * cli )
{
struct rap_NetSessionEnum r ;
int i , n ;
uint16_t levels [ ] = { 2 } ;
for ( i = 0 ; i < ARRAY_SIZE ( levels ) ; i + + ) {
r . in . level = levels [ i ] ;
r . in . bufsize = 8192 ;
torture_assert_ntstatus_ok ( tctx ,
smbcli_rap_netsessionenum ( cli - > tree , tctx , & r ) ,
" smbcli_rap_netsessionenum failed " ) ;
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" smbcli_rap_netsessionenum failed " ) ;
for ( n = 0 ; n < r . out . count ; n + + ) {
torture_assert ( tctx ,
test_netsessiongetinfo_bysession ( tctx , cli , r . out . info [ n ] . info2 . ComputerName ) ,
" failed to query sessioninfo " ) ;
}
}
return true ;
}
2011-05-11 23:50:23 +02:00
static bool test_netremotetod ( struct torture_context * tctx ,
struct smbcli_state * cli )
{
struct rap_NetRemoteTOD r ;
r . in . bufsize = 8192 ;
torture_assert_ntstatus_ok ( tctx ,
smbcli_rap_netremotetod ( cli - > tree , tctx , & r ) ,
" smbcli_rap_netremotetod failed " ) ;
torture_assert_werr_ok ( tctx , W_ERROR ( r . out . status ) ,
" smbcli_rap_netremotetod failed " ) ;
return true ;
}
2011-03-18 01:23:53 +01:00
2008-01-05 19:03:36 -06:00
bool torture_rap_scan ( struct torture_context * torture , struct smbcli_state * cli )
2004-07-08 16:41:10 +00:00
{
2005-01-25 10:03:57 +00:00
int callno ;
2005-01-25 01:21:59 +00:00
for ( callno = 0 ; callno < 0xffff ; callno + + ) {
2010-05-09 17:20:01 +02:00
struct rap_call * call = new_rap_cli_call ( torture , callno ) ;
2005-01-25 01:21:59 +00:00
NTSTATUS result ;
2010-05-09 17:20:01 +02:00
result = rap_cli_do_call ( cli - > tree , call ) ;
2005-01-25 01:21:59 +00:00
2005-01-25 10:03:57 +00:00
if ( ! NT_STATUS_EQUAL ( result , NT_STATUS_INVALID_PARAMETER ) )
continue ;
printf ( " callno %d is RAP call \n " , callno ) ;
2005-01-25 01:21:59 +00:00
}
2007-10-06 22:28:14 +00:00
return true ;
2005-01-25 01:21:59 +00:00
}
2006-06-17 02:20:39 +00:00
2017-04-20 12:24:43 -07:00
NTSTATUS torture_rap_init ( TALLOC_CTX * ctx )
2006-06-17 02:20:39 +00:00
{
2017-04-24 14:41:26 -07:00
struct torture_suite * suite = torture_suite_create ( ctx , " rap " ) ;
2010-12-11 03:26:31 +01:00
struct torture_suite * suite_basic = torture_suite_create ( suite , " basic " ) ;
2008-01-05 19:03:36 -06:00
torture_suite_add_suite ( suite , suite_basic ) ;
2010-03-25 13:17:05 +01:00
torture_suite_add_suite ( suite , torture_rap_rpc ( suite ) ) ;
2010-04-24 00:45:40 +02:00
torture_suite_add_suite ( suite , torture_rap_printing ( suite ) ) ;
2010-05-07 15:45:23 +02:00
torture_suite_add_suite ( suite , torture_rap_sam ( suite ) ) ;
2008-01-05 19:03:36 -06:00
torture_suite_add_1smb_test ( suite_basic , " netserverenum " ,
test_netserverenum ) ;
torture_suite_add_1smb_test ( suite_basic , " netshareenum " ,
test_netshareenum ) ;
torture_suite_add_1smb_test ( suite_basic , " netservergetinfo " ,
test_netservergetinfo ) ;
2011-03-02 10:57:26 +01:00
torture_suite_add_1smb_test ( suite_basic , " netsessionenum " ,
test_netsessionenum ) ;
2011-03-18 01:23:53 +01:00
torture_suite_add_1smb_test ( suite_basic , " netsessiongetinfo " ,
test_netsessiongetinfo ) ;
2011-05-11 23:50:23 +02:00
torture_suite_add_1smb_test ( suite_basic , " netremotetod " ,
test_netremotetod ) ;
2006-10-16 13:06:41 +00:00
2010-12-11 03:26:31 +01:00
torture_suite_add_1smb_test ( suite , " scan " , torture_rap_scan ) ;
2006-10-16 13:06:41 +00:00
suite - > description = talloc_strdup ( suite ,
" Remote Administration Protocol tests " ) ;
2017-04-24 14:41:26 -07:00
torture_register_suite ( ctx , suite ) ;
2006-06-17 02:20:39 +00:00
return NT_STATUS_OK ;
}