0001-01-01 02:30:17 +02:30
/*
Unix SMB / Netbios implementation .
Version 1.9 .
NT Domain Authentication SMB / MSRPC client
Copyright ( C ) Andrew Tridgell 1994 - 1997
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1997
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 .
*/
# ifdef SYSLOG
# undef SYSLOG
# endif
# include "includes.h"
# include "nterr.h"
extern int DEBUGLEVEL ;
# define DEBUG_TESTING
extern struct cli_state * smb_cli ;
extern int smb_tidx ;
extern FILE * out_hnd ;
/****************************************************************************
nt lsa query
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void cmd_lsa_query_info ( struct client_info * info )
{
fstring srv_name ;
BOOL res = True ;
fstrcpy ( info - > dom . level3_dom , " " ) ;
fstrcpy ( info - > dom . level5_dom , " " ) ;
0001-01-01 02:30:17 +02:30
ZERO_STRUCT ( info - > dom . level3_sid ) ;
ZERO_STRUCT ( info - > dom . level5_sid ) ;
0001-01-01 02:30:17 +02:30
fstrcpy ( srv_name , " \\ \\ " ) ;
fstrcat ( srv_name , info - > myhostname ) ;
strupper ( srv_name ) ;
DEBUG ( 4 , ( " cmd_lsa_query_info: server:%s \n " , srv_name ) ) ;
DEBUG ( 5 , ( " cmd_lsa_query_info: smb_cli->fd:%d \n " , smb_cli - > fd ) ) ;
/* open LSARPC session. */
0001-01-01 02:30:17 +02:30
res = res ? cli_nt_session_open ( smb_cli , PIPE_LSARPC ) : False ;
0001-01-01 02:30:17 +02:30
/* lookup domain controller; receive a policy handle */
res = res ? do_lsa_open_policy ( smb_cli ,
srv_name ,
0001-01-01 02:30:17 +02:30
& info - > dom . lsa_info_pol , False ) : False ;
0001-01-01 02:30:17 +02:30
/* send client info query, level 3. receive domain name and sid */
res = res ? do_lsa_query_info_pol ( smb_cli ,
0001-01-01 02:30:17 +02:30
& info - > dom . lsa_info_pol , 0x03 ,
info - > dom . level3_dom ,
& info - > dom . level3_sid ) : False ;
0001-01-01 02:30:17 +02:30
/* send client info query, level 5. receive domain name and sid */
res = res ? do_lsa_query_info_pol ( smb_cli ,
0001-01-01 02:30:17 +02:30
& info - > dom . lsa_info_pol , 0x05 ,
0001-01-01 02:30:17 +02:30
info - > dom . level5_dom ,
0001-01-01 02:30:17 +02:30
& info - > dom . level5_sid ) : False ;
0001-01-01 02:30:17 +02:30
res = res ? do_lsa_close ( smb_cli , & info - > dom . lsa_info_pol ) : False ;
/* close the session */
cli_nt_session_close ( smb_cli ) ;
if ( res )
{
BOOL domain_something = False ;
0001-01-01 02:30:17 +02:30
fstring sid ;
0001-01-01 02:30:17 +02:30
DEBUG ( 5 , ( " cmd_lsa_query_info: query succeeded \n " ) ) ;
fprintf ( out_hnd , " LSA Query Info Policy \n " ) ;
0001-01-01 02:30:17 +02:30
if ( info - > dom . level3_dom [ 0 ] ! = 0 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
sid_to_string ( sid , & info - > dom . level3_sid ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " Domain Member - Domain: %s SID: %s \n " ,
0001-01-01 02:30:17 +02:30
info - > dom . level3_dom , sid ) ;
0001-01-01 02:30:17 +02:30
domain_something = True ;
}
0001-01-01 02:30:17 +02:30
if ( info - > dom . level5_dom [ 0 ] ! = 0 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
sid_to_string ( sid , & info - > dom . level5_sid ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " Domain Controller - Domain: %s SID: %s \n " ,
0001-01-01 02:30:17 +02:30
info - > dom . level5_dom , sid ) ;
0001-01-01 02:30:17 +02:30
domain_something = True ;
}
if ( ! domain_something )
{
fprintf ( out_hnd , " %s is not a Domain Member or Controller \n " ,
info - > dest_host ) ;
}
}
else
{
0001-01-01 02:30:17 +02:30
DEBUG ( 5 , ( " cmd_lsa_query_info: query failed \n " ) ) ;
}
}
/****************************************************************************
nt lsa query
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void cmd_lsa_lookup_sids ( struct client_info * info )
{
fstring temp ;
0001-01-01 02:30:17 +02:30
int i ;
pstring sid_name ;
0001-01-01 02:30:17 +02:30
fstring srv_name ;
0001-01-01 02:30:17 +02:30
DOM_SID sid [ 10 ] ;
DOM_SID * sids [ 10 ] ;
int num_sids = 0 ;
0001-01-01 02:30:17 +02:30
char * * names = NULL ;
0001-01-01 02:30:17 +02:30
int num_names = 0 ;
0001-01-01 02:30:17 +02:30
BOOL res = True ;
fstrcpy ( srv_name , " \\ \\ " ) ;
fstrcat ( srv_name , info - > myhostname ) ;
strupper ( srv_name ) ;
0001-01-01 02:30:17 +02:30
DEBUG ( 4 , ( " cmd_lsa_lookup_sids: server: %s \n " , srv_name ) ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
while ( num_sids < 10 & & next_token ( NULL , temp , NULL , sizeof ( temp ) ) )
0001-01-01 02:30:17 +02:30
{
if ( strnequal ( " S- " , temp , 2 ) )
{
fstrcpy ( sid_name , temp ) ;
}
else
{
0001-01-01 02:30:17 +02:30
sid_to_string ( sid_name , & info - > dom . level5_sid ) ;
if ( sid_name [ 0 ] = = 0 )
{
fprintf ( out_hnd , " please use lsaquery first or specify a complete SID \n " ) ;
return ;
}
0001-01-01 02:30:17 +02:30
fstrcat ( sid_name , " - " ) ;
fstrcat ( sid_name , temp ) ;
}
0001-01-01 02:30:17 +02:30
make_dom_sid ( & sid [ num_sids ] , sid_name ) ;
sids [ num_sids ] = & sid [ num_sids ] ;
num_sids + + ;
0001-01-01 02:30:17 +02:30
}
0001-01-01 02:30:17 +02:30
if ( num_sids = = 0 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " lookupsid RID or SID \n " ) ;
0001-01-01 02:30:17 +02:30
return ;
}
/* open LSARPC session. */
0001-01-01 02:30:17 +02:30
res = res ? cli_nt_session_open ( smb_cli , PIPE_LSARPC ) : False ;
0001-01-01 02:30:17 +02:30
/* lookup domain controller; receive a policy handle */
res = res ? do_lsa_open_policy ( smb_cli ,
srv_name ,
& info - > dom . lsa_info_pol , True ) : False ;
0001-01-01 02:30:17 +02:30
/* send lsa lookup sids call */
0001-01-01 02:30:17 +02:30
res = res ? do_lsa_lookup_sids ( smb_cli ,
0001-01-01 02:30:17 +02:30
& info - > dom . lsa_info_pol ,
num_sids , sids ,
& names , & num_names ) : False ;
0001-01-01 02:30:17 +02:30
res = res ? do_lsa_close ( smb_cli , & info - > dom . lsa_info_pol ) : False ;
/* close the session */
cli_nt_session_close ( smb_cli ) ;
if ( res )
{
DEBUG ( 5 , ( " cmd_lsa_lookup_sids: query succeeded \n " ) ) ;
}
else
{
DEBUG ( 5 , ( " cmd_lsa_lookup_sids: query failed \n " ) ) ;
0001-01-01 02:30:17 +02:30
}
0001-01-01 02:30:17 +02:30
if ( names ! = NULL )
{
fprintf ( out_hnd , " Lookup SIDS: \n " ) ;
for ( i = 0 ; i < num_names ; i + + )
{
sid_to_string ( temp , sids [ i ] ) ;
fprintf ( out_hnd , " SID: %s -> %s \n " , temp , names [ i ] ) ;
if ( names [ i ] ! = NULL )
{
free ( names [ i ] ) ;
}
}
free ( names ) ;
}
0001-01-01 02:30:17 +02:30
}