2005-04-19 19:11:58 +04:00
/*
Unix SMB / CIFS implementation .
Test suite for libnet calls .
Copyright ( C ) Rafal Szczesniak 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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-04-19 19:11:58 +04: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 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-04-19 19:11:58 +04:00
*/
# include "includes.h"
2006-03-14 18:02:05 +03:00
# include "torture/rpc/rpc.h"
2006-09-19 23:15:36 +04:00
# include "torture/libnet/usertest.h"
2005-12-28 18:38:36 +03:00
# include "libnet/libnet.h"
2006-03-15 02:35:30 +03:00
# include "librpc/gen_ndr/ndr_samr_c.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2007-10-07 02:28:14 +04:00
2007-09-27 19:51:07 +04:00
# include "torture/libnet/utils.h"
2005-04-19 19:11:58 +04:00
2007-10-07 02:28:14 +04:00
static bool test_useradd ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
2005-04-19 19:11:58 +04:00
struct policy_handle * domain_handle ,
const char * name )
{
NTSTATUS status ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2005-06-11 14:33:31 +04:00
struct libnet_rpc_useradd user ;
2005-04-19 19:11:58 +04:00
user . in . domain_handle = * domain_handle ;
user . in . username = name ;
2005-06-11 14:33:31 +04:00
printf ( " Testing libnet_rpc_useradd \n " ) ;
2005-05-10 22:17:40 +04:00
2005-06-11 14:33:31 +04:00
status = libnet_rpc_useradd ( p , mem_ctx , & user ) ;
2005-04-19 19:11:58 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2007-09-27 19:51:07 +04:00
printf ( " Failed to call libnet_rpc_useradd - %s \n " , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-04-19 19:11:58 +04:00
}
return ret ;
}
2007-10-07 02:28:14 +04:00
static bool test_useradd_async ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
2005-05-10 22:17:40 +04:00
struct policy_handle * handle , const char * username )
{
NTSTATUS status ;
struct composite_context * c ;
2005-06-11 14:33:31 +04:00
struct libnet_rpc_useradd user ;
2005-05-10 22:17:40 +04:00
user . in . domain_handle = * handle ;
user . in . username = username ;
2005-06-11 14:33:31 +04:00
printf ( " Testing async libnet_rpc_useradd \n " ) ;
2005-05-10 22:17:40 +04:00
2005-06-11 14:33:31 +04:00
c = libnet_rpc_useradd_send ( p , & user , msg_handler ) ;
2005-05-10 22:17:40 +04:00
if ( ! c ) {
2005-06-11 14:33:31 +04:00
printf ( " Failed to call async libnet_rpc_useradd \n " ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-05-10 22:17:40 +04:00
}
2005-06-11 14:33:31 +04:00
status = libnet_rpc_useradd_recv ( c , mem_ctx , & user ) ;
2005-05-10 22:17:40 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2005-06-11 14:33:31 +04:00
printf ( " Calling async libnet_rpc_useradd failed - %s \n " , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-05-10 22:17:40 +04:00
}
2007-10-07 02:28:14 +04:00
return true ;
2005-05-10 22:17:40 +04:00
}
2007-10-07 02:28:14 +04:00
static bool test_usermod ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
2006-09-19 23:15:36 +04:00
struct policy_handle * handle , int num_changes ,
2006-09-21 03:42:58 +04:00
struct libnet_rpc_usermod * mod , char * * username )
2005-04-21 11:25:16 +04:00
{
2006-09-19 23:15:36 +04:00
const char * logon_scripts [ ] = { " start_login.cmd " , " login.bat " , " start.cmd " } ;
const char * home_dirs [ ] = { " \\ \\ srv \\ home " , " \\ \\ homesrv \\ home \\ user " , " \\ \\ pdcsrv \\ domain " } ;
const char * home_drives [ ] = { " H: " , " z: " , " I: " , " J: " , " n: " } ;
const char * homedir , * homedrive , * logonscript ;
2006-10-02 10:00:14 +04:00
const uint32_t flags [ ] = { ( ACB_DISABLED | ACB_NORMAL ) ,
( ACB_NORMAL | ACB_PWNOEXP ) ,
2006-11-28 00:56:44 +03:00
( ACB_NORMAL ) } ;
2006-09-19 23:15:36 +04:00
2005-04-21 11:25:16 +04:00
NTSTATUS status ;
2006-09-19 23:15:36 +04:00
struct timeval now ;
enum test_fields testfld ;
int i ;
2006-09-21 03:42:58 +04:00
ZERO_STRUCT ( * mod ) ;
2006-09-19 23:15:36 +04:00
srandom ( ( unsigned ) time ( NULL ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . username = talloc_strdup ( mem_ctx , * username ) ;
mod - > in . domain_handle = * handle ;
2006-09-19 23:15:36 +04:00
printf ( " modifying user (%d simultaneous change(s)) \n " , num_changes ) ;
printf ( " fields to change: [ " ) ;
2006-10-02 10:00:14 +04:00
for ( i = 0 ; i < num_changes & & i < FIELDS_NUM - 1 ; i + + ) {
2006-09-19 23:15:36 +04:00
const char * fldname ;
2006-10-02 10:00:14 +04:00
testfld = ( random ( ) % ( FIELDS_NUM - 1 ) ) + 1 ;
2006-09-19 23:15:36 +04:00
gettimeofday ( & now , NULL ) ;
switch ( testfld ) {
case account_name :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . account_name ) ;
mod - > in . change . account_name = talloc_asprintf ( mem_ctx , TEST_CHG_ACCOUNTNAME ,
2006-10-12 01:40:07 +04:00
( int ) ( random ( ) % 100 ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_ACCOUNT_NAME ;
2006-09-19 23:15:36 +04:00
fldname = " account_name " ;
2006-09-21 03:42:58 +04:00
* username = talloc_strdup ( mem_ctx , mod - > in . change . account_name ) ;
2006-09-19 23:15:36 +04:00
break ;
case full_name :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . full_name ) ;
mod - > in . change . full_name = talloc_asprintf ( mem_ctx , TEST_CHG_FULLNAME ,
2006-09-19 23:15:36 +04:00
( int ) random ( ) , ( int ) random ( ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_FULL_NAME ;
2006-09-19 23:15:36 +04:00
fldname = " full_name " ;
break ;
case description :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . description ) ;
mod - > in . change . description = talloc_asprintf ( mem_ctx , TEST_CHG_DESCRIPTION ,
2006-09-19 23:15:36 +04:00
random ( ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_DESCRIPTION ;
2006-09-19 23:15:36 +04:00
fldname = " description " ;
break ;
case home_directory :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . home_directory ) ;
2006-09-19 23:15:36 +04:00
homedir = home_dirs [ random ( ) % ( sizeof ( home_dirs ) / sizeof ( char * ) ) ] ;
2006-09-21 03:42:58 +04:00
mod - > in . change . home_directory = talloc_strdup ( mem_ctx , homedir ) ;
mod - > in . change . fields | = USERMOD_FIELD_HOME_DIRECTORY ;
2006-10-12 01:40:07 +04:00
fldname = " home_directory " ;
2006-09-19 23:15:36 +04:00
break ;
case home_drive :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . home_drive ) ;
2006-09-19 23:15:36 +04:00
homedrive = home_drives [ random ( ) % ( sizeof ( home_drives ) / sizeof ( char * ) ) ] ;
2006-09-21 03:42:58 +04:00
mod - > in . change . home_drive = talloc_strdup ( mem_ctx , homedrive ) ;
mod - > in . change . fields | = USERMOD_FIELD_HOME_DRIVE ;
2006-10-12 01:40:07 +04:00
fldname = " home_drive " ;
2006-09-19 23:15:36 +04:00
break ;
case comment :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . comment ) ;
mod - > in . change . comment = talloc_asprintf ( mem_ctx , TEST_CHG_COMMENT ,
2006-09-19 23:15:36 +04:00
random ( ) , random ( ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_COMMENT ;
2006-09-19 23:15:36 +04:00
fldname = " comment " ;
break ;
case logon_script :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . logon_script ) ;
2006-09-19 23:15:36 +04:00
logonscript = logon_scripts [ random ( ) % ( sizeof ( logon_scripts ) / sizeof ( char * ) ) ] ;
2006-09-21 03:42:58 +04:00
mod - > in . change . logon_script = talloc_strdup ( mem_ctx , logonscript ) ;
mod - > in . change . fields | = USERMOD_FIELD_LOGON_SCRIPT ;
2006-10-12 01:40:07 +04:00
fldname = " logon_script " ;
2006-09-19 23:15:36 +04:00
break ;
case profile_path :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . profile_path ) ;
mod - > in . change . profile_path = talloc_asprintf ( mem_ctx , TEST_CHG_PROFILEPATH ,
2006-09-19 23:15:36 +04:00
( long int ) random ( ) , ( unsigned int ) random ( ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_PROFILE_PATH ;
2006-10-12 01:40:07 +04:00
fldname = " profile_path " ;
2006-09-19 23:15:36 +04:00
break ;
case acct_expiry :
2006-09-21 03:42:58 +04:00
continue_if_field_set ( mod - > in . change . acct_expiry ) ;
2006-09-19 23:15:36 +04:00
now = timeval_add ( & now , ( random ( ) % ( 31 * 24 * 60 * 60 ) ) , 0 ) ;
2007-09-08 20:46:30 +04:00
mod - > in . change . acct_expiry = ( struct timeval * ) talloc_memdup ( mem_ctx , & now , sizeof ( now ) ) ;
2006-09-21 03:42:58 +04:00
mod - > in . change . fields | = USERMOD_FIELD_ACCT_EXPIRY ;
2006-09-19 23:15:36 +04:00
fldname = " acct_expiry " ;
break ;
2006-10-02 10:00:14 +04:00
case acct_flags :
continue_if_field_set ( mod - > in . change . acct_flags ) ;
mod - > in . change . acct_flags = flags [ random ( ) % ( sizeof ( flags ) / sizeof ( uint32_t ) ) ] ;
2006-10-12 01:40:07 +04:00
mod - > in . change . fields | = USERMOD_FIELD_ACCT_FLAGS ;
2006-10-02 10:00:14 +04:00
fldname = " acct_flags " ;
2006-09-19 23:15:36 +04:00
break ;
default :
2006-09-21 03:42:58 +04:00
fldname = talloc_asprintf ( mem_ctx , " unknown_field (%d) " , testfld ) ;
2006-09-19 23:15:36 +04:00
break ;
}
printf ( ( ( i < num_changes - 1 ) ? " %s, " : " %s " ) , fldname ) ;
}
printf ( " ] \n " ) ;
2006-09-21 03:42:58 +04:00
status = libnet_rpc_usermod ( p , mem_ctx , mod ) ;
2005-04-21 11:25:16 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-12 01:40:07 +04:00
printf ( " Failed to call sync libnet_rpc_usermod - %s \n " , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-04-21 11:25:16 +04:00
}
2007-10-07 02:28:14 +04:00
return true ;
2005-04-21 11:25:16 +04:00
}
2007-10-07 02:28:14 +04:00
static bool test_userdel ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
2006-09-19 23:15:36 +04:00
struct policy_handle * handle , const char * username )
2005-07-22 02:33:47 +04:00
{
NTSTATUS status ;
2006-09-19 23:15:36 +04:00
struct libnet_rpc_userdel user ;
2005-07-22 02:33:47 +04:00
user . in . domain_handle = * handle ;
user . in . username = username ;
2006-09-19 23:15:36 +04:00
status = libnet_rpc_userdel ( p , mem_ctx , & user ) ;
2005-07-22 02:33:47 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-09-19 23:15:36 +04:00
printf ( " Failed to call sync libnet_rpc_userdel - %s \n " , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2005-07-22 02:33:47 +04:00
}
2007-10-07 02:28:14 +04:00
return true ;
2005-07-22 02:33:47 +04:00
}
2006-09-21 03:42:58 +04:00
# define CMP_LSA_STRING_FLD(fld, flags) \
if ( ( mod - > in . change . fields & flags ) & & \
! strequal ( i - > fld . string , mod - > in . change . fld ) ) { \
printf ( " '%s' field does not match \n " , # fld ) ; \
printf ( " received: '%s' \n " , i - > fld . string ) ; \
printf ( " expected: '%s' \n " , mod - > in . change . fld ) ; \
2007-10-07 02:28:14 +04:00
return false ; \
2006-09-21 03:42:58 +04:00
}
# define CMP_TIME_FLD(fld, flags) \
if ( mod - > in . change . fields & flags ) { \
nttime_to_timeval ( & t , i - > fld ) ; \
if ( timeval_compare ( & t , mod - > in . change . fld ) ) { \
printf ( " '%s' field does not match \n " , # fld ) ; \
2007-09-27 19:51:07 +04:00
printf ( " received: '%s (+%ld us)' \n " , \
timestring ( mem_ctx , t . tv_sec ) , t . tv_usec ) ; \
printf ( " expected: '%s (+%ld us)' \n " , \
timestring ( mem_ctx , mod - > in . change . fld - > tv_sec ) , \
mod - > in . change . fld - > tv_usec ) ; \
2007-10-07 02:28:14 +04:00
return false ; \
2006-09-21 03:42:58 +04:00
} \
}
# define CMP_NUM_FLD(fld, flags) \
if ( ( mod - > in . change . fields & flags ) & & \
( i - > fld ! = mod - > in . change . fld ) ) { \
printf ( " '%s' field does not match \n " , # fld ) ; \
printf ( " received: '%04x' \n " , i - > fld ) ; \
printf ( " expected: '%04x' \n " , mod - > in . change . fld ) ; \
2007-10-07 02:28:14 +04:00
return false ; \
2006-09-21 03:42:58 +04:00
}
2007-10-07 02:28:14 +04:00
static bool test_compare ( struct dcerpc_pipe * p , TALLOC_CTX * mem_ctx ,
2006-09-21 03:42:58 +04:00
struct policy_handle * handle , struct libnet_rpc_usermod * mod ,
const char * username )
{
NTSTATUS status ;
struct libnet_rpc_userinfo info ;
struct samr_UserInfo21 * i ;
struct timeval t ;
ZERO_STRUCT ( info ) ;
info . in . username = username ;
info . in . domain_handle = * handle ;
info . in . level = 21 ; /* the most rich infolevel available */
status = libnet_rpc_userinfo ( p , mem_ctx , & info ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) {
printf ( " Failed to call sync libnet_rpc_userinfo - %s \n " , nt_errstr ( status ) ) ;
2007-10-07 02:28:14 +04:00
return false ;
2006-09-21 03:42:58 +04:00
}
i = & info . out . info . info21 ;
CMP_LSA_STRING_FLD ( account_name , USERMOD_FIELD_ACCOUNT_NAME ) ;
CMP_LSA_STRING_FLD ( full_name , USERMOD_FIELD_FULL_NAME ) ;
CMP_LSA_STRING_FLD ( description , USERMOD_FIELD_DESCRIPTION ) ;
CMP_LSA_STRING_FLD ( comment , USERMOD_FIELD_COMMENT ) ;
CMP_LSA_STRING_FLD ( logon_script , USERMOD_FIELD_LOGON_SCRIPT ) ;
CMP_LSA_STRING_FLD ( profile_path , USERMOD_FIELD_PROFILE_PATH ) ;
CMP_LSA_STRING_FLD ( home_directory , USERMOD_FIELD_HOME_DIRECTORY ) ;
CMP_LSA_STRING_FLD ( home_drive , USERMOD_FIELD_HOME_DRIVE ) ;
CMP_TIME_FLD ( acct_expiry , USERMOD_FIELD_ACCT_EXPIRY ) ;
CMP_NUM_FLD ( acct_flags , USERMOD_FIELD_ACCT_FLAGS )
2007-10-07 02:28:14 +04:00
return true ;
2006-09-21 03:42:58 +04:00
}
2007-10-07 02:28:14 +04:00
bool torture_useradd ( struct torture_context * torture )
2005-04-19 19:11:58 +04:00
{
NTSTATUS status ;
struct dcerpc_pipe * p ;
struct policy_handle h ;
2005-07-08 12:09:02 +04:00
struct lsa_String domain_name ;
2007-09-27 19:51:07 +04:00
struct dom_sid2 sid ;
2005-06-24 05:14:43 +04:00
const char * name = TEST_USERNAME ;
2005-04-19 19:11:58 +04:00
TALLOC_CTX * mem_ctx ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2005-04-19 19:11:58 +04:00
mem_ctx = talloc_init ( " test_useradd " ) ;
2007-08-28 16:54:27 +04:00
status = torture_rpc_connection ( torture ,
2005-04-19 19:11:58 +04:00
& p ,
2007-08-20 01:23:03 +04:00
& ndr_table_samr ) ;
2005-04-19 19:11:58 +04:00
2005-04-22 19:13:01 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2007-10-07 02:28:14 +04:00
return false ;
2005-04-22 19:13:01 +04:00
}
2005-04-19 19:11:58 +04:00
2007-09-28 05:17:46 +04:00
domain_name . string = lp_workgroup ( global_loadparm ) ;
2007-09-27 19:51:07 +04:00
if ( ! test_opendomain ( p , mem_ctx , & h , & domain_name , & sid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-19 19:11:58 +04:00
goto done ;
}
if ( ! test_useradd ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-19 19:11:58 +04:00
goto done ;
}
2007-09-27 19:51:07 +04:00
if ( ! test_user_cleanup ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-21 05:00:30 +04:00
goto done ;
}
2007-09-27 19:51:07 +04:00
if ( ! test_opendomain ( p , mem_ctx , & h , & domain_name , & sid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-05-10 22:17:40 +04:00
goto done ;
}
if ( ! test_useradd_async ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-05-10 22:17:40 +04:00
goto done ;
}
2007-09-27 19:51:07 +04:00
if ( ! test_user_cleanup ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-05-10 22:17:40 +04:00
goto done ;
}
2005-04-19 19:11:58 +04:00
done :
talloc_free ( mem_ctx ) ;
return ret ;
}
2005-04-21 11:25:16 +04:00
2007-09-08 20:46:30 +04:00
bool torture_userdel ( struct torture_context * torture )
2005-04-21 11:25:16 +04:00
{
NTSTATUS status ;
struct dcerpc_pipe * p ;
struct policy_handle h ;
2005-07-08 12:09:02 +04:00
struct lsa_String domain_name ;
2007-09-27 19:51:07 +04:00
struct dom_sid2 sid ;
uint32_t rid ;
2005-06-24 05:14:43 +04:00
const char * name = TEST_USERNAME ;
2005-04-21 11:25:16 +04:00
TALLOC_CTX * mem_ctx ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2005-04-21 11:25:16 +04:00
mem_ctx = talloc_init ( " test_userdel " ) ;
2007-08-28 16:54:27 +04:00
status = torture_rpc_connection ( torture ,
2005-04-21 11:25:16 +04:00
& p ,
2007-08-20 01:23:03 +04:00
& ndr_table_samr ) ;
2005-04-21 11:25:16 +04:00
2005-04-22 19:13:01 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2007-10-07 02:28:14 +04:00
return false ;
2005-04-22 19:13:01 +04:00
}
2005-04-21 11:25:16 +04:00
2007-09-28 05:17:46 +04:00
domain_name . string = lp_workgroup ( global_loadparm ) ;
2007-09-27 19:51:07 +04:00
if ( ! test_opendomain ( p , mem_ctx , & h , & domain_name , & sid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-21 11:25:16 +04:00
goto done ;
}
2007-09-27 19:51:07 +04:00
if ( ! test_user_create ( p , mem_ctx , & h , name , & rid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-21 11:25:16 +04:00
goto done ;
}
2005-04-22 09:11:53 +04:00
if ( ! test_userdel ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-04-21 11:25:16 +04:00
goto done ;
}
2005-04-22 09:11:53 +04:00
2005-04-21 11:25:16 +04:00
done :
talloc_free ( mem_ctx ) ;
return ret ;
}
2005-07-22 02:33:47 +04:00
2007-10-07 02:28:14 +04:00
bool torture_usermod ( struct torture_context * torture )
2005-07-22 02:33:47 +04:00
{
NTSTATUS status ;
struct dcerpc_pipe * p ;
struct policy_handle h ;
struct lsa_String domain_name ;
2007-09-27 19:51:07 +04:00
struct dom_sid2 sid ;
uint32_t rid ;
2006-09-21 03:42:58 +04:00
int i ;
2006-09-19 23:15:36 +04:00
char * name ;
2005-07-22 02:33:47 +04:00
TALLOC_CTX * mem_ctx ;
2007-10-07 02:28:14 +04:00
bool ret = true ;
2006-08-22 23:28:44 +04:00
2005-07-22 02:33:47 +04:00
mem_ctx = talloc_init ( " test_userdel " ) ;
2007-08-28 16:54:27 +04:00
status = torture_rpc_connection ( torture ,
2005-07-22 02:33:47 +04:00
& p ,
2007-08-20 01:23:03 +04:00
& ndr_table_samr ) ;
2005-07-22 02:33:47 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2006-09-19 23:15:36 +04:00
goto done ;
2005-07-22 02:33:47 +04:00
}
2007-09-28 05:17:46 +04:00
domain_name . string = lp_workgroup ( global_loadparm ) ;
2006-09-19 23:15:36 +04:00
name = talloc_strdup ( mem_ctx , TEST_USERNAME ) ;
2005-07-22 02:33:47 +04:00
2007-09-27 19:51:07 +04:00
if ( ! test_opendomain ( p , mem_ctx , & h , & domain_name , & sid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-07-22 02:33:47 +04:00
goto done ;
}
2007-09-27 19:51:07 +04:00
if ( ! test_user_create ( p , mem_ctx , & h , name , & rid ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-07-22 02:33:47 +04:00
goto done ;
}
2006-10-02 10:00:14 +04:00
for ( i = 1 ; i < FIELDS_NUM ; i + + ) {
2006-09-21 03:42:58 +04:00
struct libnet_rpc_usermod m ;
2005-07-23 14:27:45 +04:00
2006-09-21 03:42:58 +04:00
if ( ! test_usermod ( p , mem_ctx , & h , i , & m , & name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2006-10-02 10:00:14 +04:00
goto cleanup ;
2006-09-21 03:42:58 +04:00
}
2006-09-19 23:15:36 +04:00
2006-09-21 03:42:58 +04:00
if ( ! test_compare ( p , mem_ctx , & h , & m , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2006-10-02 10:00:14 +04:00
goto cleanup ;
2006-09-21 03:42:58 +04:00
}
2005-07-22 02:33:47 +04:00
}
2006-09-21 03:42:58 +04:00
2006-10-02 10:00:14 +04:00
cleanup :
2007-09-27 19:51:07 +04:00
if ( ! test_user_cleanup ( p , mem_ctx , & h , name ) ) {
2007-10-07 02:28:14 +04:00
ret = false ;
2005-07-22 02:33:47 +04:00
goto done ;
}
done :
talloc_free ( mem_ctx ) ;
return ret ;
}