0001-01-01 02:30:17 +02:30
/*
Unix SMB / Netbios implementation .
Version 1.9 .
Samba utility functions
Copyright ( C ) Andrew Tridgell 1992 - 1998
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1998
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"
0001-01-01 02:30:17 +02:30
struct field_info sid_name_info [ ] =
{
{ SID_NAME_UNKNOWN , " UNKNOWN " } , /* default */
{ SID_NAME_USER , " User " } ,
{ SID_NAME_DOM_GRP , " Domain Group " } ,
{ SID_NAME_DOMAIN , " Domain " } ,
{ SID_NAME_ALIAS , " Local Group " } ,
{ SID_NAME_WKN_GRP , " Well-known Group " } ,
{ SID_NAME_DELETED , " Deleted " } ,
{ SID_NAME_INVALID , " Invalid " } ,
{ 0 , NULL }
} ;
0001-01-01 02:30:17 +02:30
/****************************************************************************
convert a SID_NAME_USE to a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_sid_name_use_str ( uint8 sid_name_use )
{
0001-01-01 02:30:17 +02:30
return enum_field_to_str ( ( uint32 ) sid_name_use , sid_name_info , True ) ;
0001-01-01 02:30:17 +02:30
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
convert a share mode to a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_file_mode_str ( uint32 share_mode )
{
static fstring mode ;
switch ( ( share_mode > > 4 ) & 0xF )
{
0001-01-01 02:30:17 +02:30
case DENY_NONE : fstrcpy ( mode , " DENY_NONE " ) ; break ;
case DENY_ALL : fstrcpy ( mode , " DENY_ALL " ) ; break ;
case DENY_DOS : fstrcpy ( mode , " DENY_DOS " ) ; break ;
case DENY_READ : fstrcpy ( mode , " DENY_READ " ) ; break ;
case DENY_WRITE : fstrcpy ( mode , " DENY_WRITE " ) ; break ;
default : fstrcpy ( mode , " DENY_???? " ) ; break ;
0001-01-01 02:30:17 +02:30
}
switch ( share_mode & 0xF )
{
0001-01-01 02:30:17 +02:30
case 0 : fstrcat ( mode , " RDONLY " ) ; break ;
case 1 : fstrcat ( mode , " WRONLY " ) ; break ;
case 2 : fstrcat ( mode , " RDWR " ) ; break ;
default : fstrcat ( mode , " R??W?? " ) ; break ;
0001-01-01 02:30:17 +02:30
}
return mode ;
}
/****************************************************************************
convert an oplock mode to a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_file_oplock_str ( uint32 op_type )
{
static fstring oplock ;
BOOL excl = IS_BITS_SET_ALL ( op_type , EXCLUSIVE_OPLOCK ) ;
BOOL batch = IS_BITS_SET_ALL ( op_type , BATCH_OPLOCK ) ;
oplock [ 0 ] = 0 ;
0001-01-01 02:30:17 +02:30
if ( excl ) fstrcat ( oplock , " EXCLUSIVE " ) ;
if ( excl & & batch ) fstrcat ( oplock , " + " ) ;
if ( batch ) fstrcat ( oplock , " BATCH " ) ;
if ( ! excl & & ! batch ) fstrcat ( oplock , " NONE " ) ;
0001-01-01 02:30:17 +02:30
return oplock ;
}
/****************************************************************************
convert a share type enum to a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_share_type_str ( uint32 type )
{
static fstring typestr ;
switch ( type )
{
0001-01-01 02:30:17 +02:30
case STYPE_DISKTREE : fstrcpy ( typestr , " Disk " ) ; break ;
case STYPE_PRINTQ : fstrcpy ( typestr , " Printer " ) ; break ;
case STYPE_DEVICE : fstrcpy ( typestr , " Device " ) ; break ;
case STYPE_IPC : fstrcpy ( typestr , " IPC " ) ; break ;
default : fstrcpy ( typestr , " ???? " ) ; break ;
0001-01-01 02:30:17 +02:30
}
return typestr ;
}
/****************************************************************************
convert a server type enum to a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_server_type_str ( uint32 type )
{
static fstring typestr ;
if ( type = = SV_TYPE_ALL )
{
0001-01-01 02:30:17 +02:30
fstrcpy ( typestr , " All " ) ;
0001-01-01 02:30:17 +02:30
}
else
{
int i ;
typestr [ 0 ] = 0 ;
for ( i = 0 ; i < 32 ; i + + )
{
if ( IS_BITS_SET_ALL ( type , 1 < < i ) )
{
switch ( 1 < < i )
{
0001-01-01 02:30:17 +02:30
case SV_TYPE_WORKSTATION : fstrcat ( typestr , " Wk " ) ; break ;
case SV_TYPE_SERVER : fstrcat ( typestr , " Sv " ) ; break ;
case SV_TYPE_SQLSERVER : fstrcat ( typestr , " Sql " ) ; break ;
case SV_TYPE_DOMAIN_CTRL : fstrcat ( typestr , " PDC " ) ; break ;
case SV_TYPE_DOMAIN_BAKCTRL : fstrcat ( typestr , " BDC " ) ; break ;
case SV_TYPE_TIME_SOURCE : fstrcat ( typestr , " Tim " ) ; break ;
case SV_TYPE_AFP : fstrcat ( typestr , " AFP " ) ; break ;
case SV_TYPE_NOVELL : fstrcat ( typestr , " Nov " ) ; break ;
case SV_TYPE_DOMAIN_MEMBER : fstrcat ( typestr , " Dom " ) ; break ;
case SV_TYPE_PRINTQ_SERVER : fstrcat ( typestr , " PrQ " ) ; break ;
case SV_TYPE_DIALIN_SERVER : fstrcat ( typestr , " Din " ) ; break ;
case SV_TYPE_SERVER_UNIX : fstrcat ( typestr , " Unx " ) ; break ;
case SV_TYPE_NT : fstrcat ( typestr , " NT " ) ; break ;
case SV_TYPE_WFW : fstrcat ( typestr , " Wfw " ) ; break ;
case SV_TYPE_SERVER_MFPN : fstrcat ( typestr , " Mfp " ) ; break ;
case SV_TYPE_SERVER_NT : fstrcat ( typestr , " SNT " ) ; break ;
case SV_TYPE_POTENTIAL_BROWSER : fstrcat ( typestr , " PtB " ) ; break ;
case SV_TYPE_BACKUP_BROWSER : fstrcat ( typestr , " BMB " ) ; break ;
case SV_TYPE_MASTER_BROWSER : fstrcat ( typestr , " LMB " ) ; break ;
case SV_TYPE_DOMAIN_MASTER : fstrcat ( typestr , " DMB " ) ; break ;
case SV_TYPE_SERVER_OSF : fstrcat ( typestr , " OSF " ) ; break ;
case SV_TYPE_SERVER_VMS : fstrcat ( typestr , " VMS " ) ; break ;
case SV_TYPE_WIN95_PLUS : fstrcat ( typestr , " W95 " ) ; break ;
case SV_TYPE_ALTERNATE_XPORT : fstrcat ( typestr , " Xpt " ) ; break ;
case SV_TYPE_LOCAL_LIST_ONLY : fstrcat ( typestr , " Dom " ) ; break ;
case SV_TYPE_DOMAIN_ENUM : fstrcat ( typestr , " Loc " ) ; break ;
0001-01-01 02:30:17 +02:30
}
}
}
i = strlen ( typestr ) - 1 ;
if ( typestr [ i ] = = ' ' ) typestr [ i ] = 0 ;
}
return typestr ;
}
/****************************************************************************
server info level 101 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_info_101 ( FILE * out_hnd , enum action_type action ,
SRV_INFO_101 * sv101 )
{
if ( sv101 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Server Info Level 101: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring name ;
fstring comment ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( name , & sv101 - > uni_name , sizeof ( name ) - 1 ) ;
unistr2_to_ascii ( comment , & sv101 - > uni_comment , sizeof ( comment ) - 1 ) ;
0001-01-01 02:30:17 +02:30
display_server ( out_hnd , action , name , sv101 - > srv_type , comment ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t platform_id : \t %d \n " , sv101 - > platform_id ) ;
fprintf ( out_hnd , " \t os version : \t %d.%d \n " , sv101 - > ver_major , sv101 - > ver_minor ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
server info level 102 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_info_102 ( FILE * out_hnd , enum action_type action , SRV_INFO_102 * sv102 )
{
if ( sv102 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Server Info Level 102: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring name ;
fstring comment ;
fstring usr_path ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( name , & sv102 - > uni_name , sizeof ( name ) - 1 ) ;
unistr2_to_ascii ( comment , & sv102 - > uni_comment , sizeof ( comment ) - 1 ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( usr_path , & sv102 - > uni_usr_path ,
0001-01-01 02:30:17 +02:30
sizeof ( usr_path ) - 1 ) ;
0001-01-01 02:30:17 +02:30
display_server ( out_hnd , action , name , sv102 - > srv_type , comment ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t platform_id : \t %d \n " , sv102 - > platform_id ) ;
fprintf ( out_hnd , " \t os version : \t %d.%d \n " , sv102 - > ver_major , sv102 - > ver_minor ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t users : \t %x \n " , sv102 - > users ) ;
fprintf ( out_hnd , " \t disc, hidden : \t %x,%x \n " , sv102 - > disc , sv102 - > hidden ) ;
fprintf ( out_hnd , " \t announce, delta : \t %d, %d \n " , sv102 - > announce , sv102 - > ann_delta ) ;
fprintf ( out_hnd , " \t licenses : \t %d \n " , sv102 - > licenses ) ;
fprintf ( out_hnd , " \t user path : \t %s \n " , usr_path ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
server info container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_info_ctr ( FILE * out_hnd , enum action_type action , SRV_INFO_CTR * ctr )
{
if ( ctr = = NULL | | ctr - > ptr_srv_ctr = = 0 )
{
fprintf ( out_hnd , " Server Information: unavailable due to an error \n " ) ;
return ;
}
switch ( ctr - > switch_value )
{
case 101 :
{
display_srv_info_101 ( out_hnd , action , & ( ctr - > srv . sv101 ) ) ;
break ;
}
case 102 :
{
display_srv_info_102 ( out_hnd , action , & ( ctr - > srv . sv102 ) ) ;
break ;
}
default :
{
fprintf ( out_hnd , " Server Information: Unknown Info Level \n " ) ;
break ;
}
}
}
/****************************************************************************
connection info level 0 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_conn_info_0 ( FILE * out_hnd , enum action_type action ,
CONN_INFO_0 * info0 )
{
if ( info0 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Connection Info Level 0: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t id: \t %d \n " , info0 - > id ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
connection info level 1 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_conn_info_1 ( FILE * out_hnd , enum action_type action ,
CONN_INFO_1 * info1 , CONN_INFO_1_STR * str1 )
{
if ( info1 = = NULL | | str1 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Connection Info Level 1: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring usr_name ;
fstring net_name ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( usr_name , & str1 - > uni_usr_name , sizeof ( usr_name ) - 1 ) ;
unistr2_to_ascii ( net_name , & str1 - > uni_net_name , sizeof ( net_name ) - 1 ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t id : \t %d \n " , info1 - > id ) ;
fprintf ( out_hnd , " \t type : \t %s \n " , get_share_type_str ( info1 - > type ) ) ;
fprintf ( out_hnd , " \t num_opens: \t %d \n " , info1 - > num_opens ) ;
fprintf ( out_hnd , " \t num_users: \t %d \n " , info1 - > num_users ) ;
fprintf ( out_hnd , " \t open_time: \t %d \n " , info1 - > open_time ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t user name: \t %s \n " , usr_name ) ;
fprintf ( out_hnd , " \t net name: \t %s \n " , net_name ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
connection info level 0 container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_conn_info_0_ctr ( FILE * out_hnd , enum action_type action ,
SRV_CONN_INFO_0 * ctr )
{
if ( ctr = = NULL )
{
fprintf ( out_hnd , " display_srv_conn_info_0_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < ctr - > num_entries_read ; i + + )
{
display_conn_info_0 ( out_hnd , ACTION_HEADER , & ( ctr - > info_0 [ i ] ) ) ;
display_conn_info_0 ( out_hnd , ACTION_ENUMERATE , & ( ctr - > info_0 [ i ] ) ) ;
display_conn_info_0 ( out_hnd , ACTION_FOOTER , & ( ctr - > info_0 [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
connection info level 1 container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_conn_info_1_ctr ( FILE * out_hnd , enum action_type action ,
SRV_CONN_INFO_1 * ctr )
{
if ( ctr = = NULL )
{
fprintf ( out_hnd , " display_srv_conn_info_1_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < ctr - > num_entries_read ; i + + )
{
display_conn_info_1 ( out_hnd , ACTION_HEADER , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
display_conn_info_1 ( out_hnd , ACTION_ENUMERATE , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
display_conn_info_1 ( out_hnd , ACTION_FOOTER , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
connection info container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_conn_info_ctr ( FILE * out_hnd , enum action_type action ,
SRV_CONN_INFO_CTR * ctr )
{
if ( ctr = = NULL | | ctr - > ptr_conn_ctr = = 0 )
{
fprintf ( out_hnd , " display_srv_conn_info_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( ctr - > switch_value )
{
case 0 :
{
display_srv_conn_info_0_ctr ( out_hnd , action ,
& ( ctr - > conn . info0 ) ) ;
break ;
}
case 1 :
{
display_srv_conn_info_1_ctr ( out_hnd , action ,
& ( ctr - > conn . info1 ) ) ;
break ;
}
default :
{
fprintf ( out_hnd , " display_srv_conn_info_ctr: Unknown Info Level \n " ) ;
break ;
}
}
}
/****************************************************************************
share info level 1 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_share_info_1 ( FILE * out_hnd , enum action_type action ,
SH_INFO_1 * info1 , SH_INFO_1_STR * str1 )
{
if ( info1 = = NULL | | str1 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Share Info Level 1: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring remark ;
fstring net_name ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( net_name , & str1 - > uni_netname , sizeof ( net_name ) - 1 ) ;
unistr2_to_ascii ( remark , & str1 - > uni_remark , sizeof ( remark ) - 1 ) ;
0001-01-01 02:30:17 +02:30
display_share ( out_hnd , action , net_name , info1 - > type , remark ) ;
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
share info level 2 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_share_info_2 ( FILE * out_hnd , enum action_type action ,
SH_INFO_2 * info2 , SH_INFO_2_STR * str2 )
{
if ( info2 = = NULL | | str2 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " Share Info Level 2: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring remark ;
fstring net_name ;
fstring path ;
fstring passwd ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( net_name , & str2 - > uni_netname , sizeof ( net_name ) - 1 ) ;
unistr2_to_ascii ( remark , & str2 - > uni_remark , sizeof ( remark ) - 1 ) ;
unistr2_to_ascii ( path , & str2 - > uni_path , sizeof ( path ) - 1 ) ;
unistr2_to_ascii ( passwd , & str2 - > uni_passwd , sizeof ( passwd ) - 1 ) ;
0001-01-01 02:30:17 +02:30
display_share2 ( out_hnd , action , net_name , info2 - > type , remark ,
info2 - > perms , info2 - > max_uses , info2 - > num_uses ,
path , passwd ) ;
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
share info level 1 container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_share_info_1_ctr ( FILE * out_hnd , enum action_type action ,
SRV_SHARE_INFO_1 * ctr )
{
if ( ctr = = NULL )
{
fprintf ( out_hnd , " display_srv_share_info_1_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < ctr - > num_entries_read ; i + + )
{
display_share_info_1 ( out_hnd , ACTION_HEADER , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
display_share_info_1 ( out_hnd , ACTION_ENUMERATE , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
display_share_info_1 ( out_hnd , ACTION_FOOTER , & ( ctr - > info_1 [ i ] ) , & ( ctr - > info_1_str [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
share info level 2 container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_share_info_2_ctr ( FILE * out_hnd , enum action_type action ,
SRV_SHARE_INFO_2 * ctr )
{
if ( ctr = = NULL )
{
fprintf ( out_hnd , " display_srv_share_info_2_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < ctr - > num_entries_read ; i + + )
{
display_share_info_2 ( out_hnd , ACTION_HEADER , & ( ctr - > info_2 [ i ] ) , & ( ctr - > info_2_str [ i ] ) ) ;
display_share_info_2 ( out_hnd , ACTION_ENUMERATE , & ( ctr - > info_2 [ i ] ) , & ( ctr - > info_2_str [ i ] ) ) ;
display_share_info_2 ( out_hnd , ACTION_FOOTER , & ( ctr - > info_2 [ i ] ) , & ( ctr - > info_2_str [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
share info container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_share_info_ctr ( FILE * out_hnd , enum action_type action ,
SRV_SHARE_INFO_CTR * ctr )
{
if ( ctr = = NULL | | ctr - > ptr_share_ctr = = 0 )
{
fprintf ( out_hnd , " display_srv_share_info_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( ctr - > switch_value )
{
case 1 :
{
display_srv_share_info_1_ctr ( out_hnd , action ,
& ( ctr - > share . info1 ) ) ;
break ;
}
case 2 :
{
display_srv_share_info_2_ctr ( out_hnd , action ,
& ( ctr - > share . info2 ) ) ;
break ;
}
default :
{
fprintf ( out_hnd , " display_srv_share_info_ctr: Unknown Info Level \n " ) ;
break ;
}
}
}
/****************************************************************************
file info level 3 display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_file_info_3 ( FILE * out_hnd , enum action_type action ,
FILE_INFO_3 * info3 , FILE_INFO_3_STR * str3 )
{
if ( info3 = = NULL | | str3 = = NULL )
{
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " File Info Level 3: \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring path_name ;
fstring user_name ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( path_name , & str3 - > uni_path_name ,
0001-01-01 02:30:17 +02:30
sizeof ( path_name ) - 1 ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( user_name , & str3 - > uni_user_name ,
0001-01-01 02:30:17 +02:30
sizeof ( user_name ) - 1 ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t id : \t %d \n " , info3 - > id ) ;
fprintf ( out_hnd , " \t perms : \t %s \n " , get_file_mode_str ( info3 - > perms ) ) ;
fprintf ( out_hnd , " \t num_locks: \t %d \n " , info3 - > num_locks ) ;
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t path name: \t %s \n " , path_name ) ;
fprintf ( out_hnd , " \t user name: \t %s \n " , user_name ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
file info level 3 container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_file_info_3_ctr ( FILE * out_hnd , enum action_type action ,
SRV_FILE_INFO_3 * ctr )
{
if ( ctr = = NULL )
{
fprintf ( out_hnd , " display_srv_file_info_3_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < ctr - > num_entries_read ; i + + )
{
display_file_info_3 ( out_hnd , ACTION_HEADER , & ( ctr - > info_3 [ i ] ) , & ( ctr - > info_3_str [ i ] ) ) ;
display_file_info_3 ( out_hnd , ACTION_ENUMERATE , & ( ctr - > info_3 [ i ] ) , & ( ctr - > info_3_str [ i ] ) ) ;
display_file_info_3 ( out_hnd , ACTION_FOOTER , & ( ctr - > info_3 [ i ] ) , & ( ctr - > info_3_str [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
file info container display function
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_srv_file_info_ctr ( FILE * out_hnd , enum action_type action ,
SRV_FILE_INFO_CTR * ctr )
{
if ( ctr = = NULL | | ctr - > ptr_file_ctr = = 0 )
{
fprintf ( out_hnd , " display_srv_file_info_ctr: unavailable due to an internal error \n " ) ;
return ;
}
switch ( ctr - > switch_value )
{
case 3 :
{
display_srv_file_info_3_ctr ( out_hnd , action ,
& ( ctr - > file . info3 ) ) ;
break ;
}
default :
{
fprintf ( out_hnd , " display_srv_file_info_ctr: Unknown Info Level \n " ) ;
break ;
}
}
}
/****************************************************************************
print browse connection on a host
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_server ( FILE * out_hnd , enum action_type action ,
char * sname , uint32 type , char * comment )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
fprintf ( out_hnd , " \t %-15.15s%-20s %s \n " ,
sname , get_server_type_str ( type ) , comment ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
print shares on a host
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_share ( FILE * out_hnd , enum action_type action ,
char * sname , uint32 type , char * comment )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
fprintf ( out_hnd , " \t %-15.15s%-10.10s%s \n " ,
sname , get_share_type_str ( type ) , comment ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
print shares on a host , level 2
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_share2 ( FILE * out_hnd , enum action_type action ,
char * sname , uint32 type , char * comment ,
uint32 perms , uint32 max_uses , uint32 num_uses ,
char * path , char * passwd )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
fprintf ( out_hnd , " \t %-15.15s%-10.10s%s %x %x %x %s %s \n " ,
sname , get_share_type_str ( type ) , comment ,
perms , max_uses , num_uses , path , passwd ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
print name info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_name ( FILE * out_hnd , enum action_type action ,
char * sname )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
fprintf ( out_hnd , " \t %-21.21s \n " , sname ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
display alias members
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_alias_members ( FILE * out_hnd , enum action_type action ,
uint32 num_mem , char * * sid_mem )
{
switch ( action )
{
case ACTION_HEADER :
{
if ( num_mem = = 0 )
{
fprintf ( out_hnd , " \t No Alias Members \n " ) ;
}
else
{
fprintf ( out_hnd , " \t Alias Members: \n " ) ;
fprintf ( out_hnd , " \t ------------- \n " ) ;
}
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < num_mem ; i + + )
{
if ( sid_mem [ i ] ! = NULL )
{
fprintf ( out_hnd , " \t Member Name: \t %s \n " , sid_mem [ i ] ) ;
}
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
display alias rid info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_alias_rid_info ( FILE * out_hnd , enum action_type action ,
DOM_SID * sid ,
uint32 num_rids , uint32 * rid )
{
switch ( action )
{
case ACTION_HEADER :
{
fstring sid_str ;
sid_to_string ( sid_str , sid ) ;
if ( num_rids = = 0 )
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t No Aliases: \t Sid %s \n " , sid_str ) ;
0001-01-01 02:30:17 +02:30
}
else
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Alias Info: \t Sid %s \n " , sid_str ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t ---------- \n " ) ;
}
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < num_rids ; i + + )
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Alias RID: \t %8x \n " , rid [ i ] ) ;
0001-01-01 02:30:17 +02:30
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
display group members
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_group_members ( FILE * out_hnd , enum action_type action ,
uint32 num_mem , fstring * name , uint32 * type )
{
switch ( action )
{
case ACTION_HEADER :
{
if ( num_mem = = 0 )
{
fprintf ( out_hnd , " \t No Members \n " ) ;
}
else
{
fprintf ( out_hnd , " \t Members: \n " ) ;
fprintf ( out_hnd , " \t ------- \n " ) ;
}
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < num_mem ; i + + )
{
fprintf ( out_hnd , " \t Member Name: \t %s \t Type: \t %s \n " ,
name [ i ] , get_sid_name_use_str ( type [ i ] ) ) ;
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
#if 0
/****************************************************************************
display group info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_group_info1 ( FILE * out_hnd , enum action_type action , GROUP_INFO1 * info1 )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
int i ;
fprintf ( out_hnd , " \t Group Name: \t %s \t Description: \t %s \t unk1: \t %sunk2:%s \n " ,
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
# endif
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
/****************************************************************************
display group rid info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_group_rid_info ( FILE * out_hnd , enum action_type action ,
uint32 num_gids , DOM_GID * gid )
{
switch ( action )
{
case ACTION_HEADER :
{
if ( num_gids = = 0 )
{
fprintf ( out_hnd , " \t No Groups \n " ) ;
}
else
{
fprintf ( out_hnd , " \t Group Info \n " ) ;
fprintf ( out_hnd , " \t ---------- \n " ) ;
}
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < num_gids ; i + + )
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Group RID: \t %8x attr: \t %x \n " ,
0001-01-01 02:30:17 +02:30
gid [ i ] . g_rid , gid [ i ] . attr ) ;
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
display alias name info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_alias_name_info ( FILE * out_hnd , enum action_type action ,
uint32 num_aliases , fstring * alias_name , uint32 * num_als_usrs )
{
switch ( action )
{
case ACTION_HEADER :
{
if ( num_aliases = = 0 )
{
fprintf ( out_hnd , " \t No Aliases \n " ) ;
}
else
{
fprintf ( out_hnd , " \t Alias Names \n " ) ;
fprintf ( out_hnd , " \t ----------- \n " ) ;
}
break ;
}
case ACTION_ENUMERATE :
{
int i ;
for ( i = 0 ; i < num_aliases ; i + + )
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Alias Name: \t %s Attributes: \t %3d \n " ,
0001-01-01 02:30:17 +02:30
alias_name [ i ] , num_als_usrs [ i ] ) ;
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
display sam_user_info_21 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_sam_user_info_21 ( FILE * out_hnd , enum action_type action , SAM_USER_INFO_21 * usr )
{
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " \t User Info, Level 0x15 \n " ) ;
fprintf ( out_hnd , " \t --------------------- \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
fstring temp ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_user_name , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t User Name : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_full_name , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Full Name : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_home_dir , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Home Drive : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_dir_drive , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Dir Drive : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_profile_path , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Profile Path: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_logon_script , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Logon Script: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_acct_desc , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Description : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_workstations , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Workstations: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_unknown_str , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Unknown Str : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & usr - > uni_munged_dial , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Remote Dial : \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Logon Time : \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > logon_time ) ) ) ) ;
fprintf ( out_hnd , " \t \t Logoff Time : \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > logoff_time ) ) ) ) ;
fprintf ( out_hnd , " \t \t Kickoff Time : \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > kickoff_time ) ) ) ) ;
fprintf ( out_hnd , " \t \t Password last set Time : \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > pass_last_set_time ) ) ) ) ;
fprintf ( out_hnd , " \t \t Password can change Time : \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > pass_can_change_time ) ) ) ) ;
fprintf ( out_hnd , " \t \t Password must change Time: \t %s \n " , http_timestring ( nt_time_to_unix ( & ( usr - > pass_must_change_time ) ) ) ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t unknown_2[0..31]... \n " ) ; /* user passwords? */
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t user_rid : \t %x \n " , usr - > user_rid ) ; /* User ID */
fprintf ( out_hnd , " \t \t group_rid: \t %x \n " , usr - > group_rid ) ; /* Group ID */
fprintf ( out_hnd , " \t \t acb_info : \t %04x \n " , usr - > acb_info ) ; /* Account Control Info */
0001-01-01 02:30:17 +02:30
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t unknown_3: \t %08x \n " , usr - > unknown_3 ) ; /* 0x00ff ffff */
fprintf ( out_hnd , " \t \t logon_divs: \t %d \n " , usr - > logon_divs ) ; /* 0x0000 00a8 which is 168 which is num hrs in a week */
fprintf ( out_hnd , " \t \t unknown_5: \t %08x \n " , usr - > unknown_5 ) ; /* 0x0002 0000 */
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t padding1[0..7]... \n " ) ;
if ( usr - > ptr_logon_hrs )
{
fprintf ( out_hnd , " \t \t logon_hrs[0..%d]... \n " , usr - > logon_hrs . len ) ;
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
convert a security permissions into a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
0001-01-01 02:30:17 +02:30
char * get_sec_mask_str ( uint32 type )
0001-01-01 02:30:17 +02:30
{
static fstring typestr ;
int i ;
switch ( type )
{
case SEC_RIGHTS_FULL_CONTROL :
{
fstrcpy ( typestr , " Full Control " ) ;
return typestr ;
}
case SEC_RIGHTS_READ :
{
fstrcpy ( typestr , " Read " ) ;
return typestr ;
}
default :
{
break ;
}
}
typestr [ 0 ] = 0 ;
for ( i = 0 ; i < 32 ; i + + )
{
if ( IS_BITS_SET_ALL ( type , 1 < < i ) )
{
switch ( 1 < < i )
{
case SEC_RIGHTS_QUERY_VALUE : fstrcat ( typestr , " Query " ) ; break ;
case SEC_RIGHTS_SET_VALUE : fstrcat ( typestr , " Set " ) ; break ;
case SEC_RIGHTS_CREATE_SUBKEY : fstrcat ( typestr , " Create " ) ; break ;
case SEC_RIGHTS_ENUM_SUBKEYS : fstrcat ( typestr , " Enum " ) ; break ;
case SEC_RIGHTS_NOTIFY : fstrcat ( typestr , " Notify " ) ; break ;
case SEC_RIGHTS_CREATE_LINK : fstrcat ( typestr , " CreateLink " ) ; break ;
case SEC_RIGHTS_DELETE : fstrcat ( typestr , " Delete " ) ; break ;
case SEC_RIGHTS_READ_CONTROL : fstrcat ( typestr , " ReadControl " ) ; break ;
case SEC_RIGHTS_WRITE_DAC : fstrcat ( typestr , " WriteDAC " ) ; break ;
case SEC_RIGHTS_WRITE_OWNER : fstrcat ( typestr , " WriteOwner " ) ; break ;
}
type & = ~ ( 1 < < i ) ;
}
}
/* remaining bits get added on as-is */
if ( type ! = 0 )
{
fstring tmp ;
0001-01-01 02:30:17 +02:30
slprintf ( tmp , sizeof ( tmp ) - 1 , " [%08x] " , type ) ;
0001-01-01 02:30:17 +02:30
fstrcat ( typestr , tmp ) ;
}
/* remove last space */
i = strlen ( typestr ) - 1 ;
if ( typestr [ i ] = = ' ' ) typestr [ i ] = 0 ;
return typestr ;
}
/****************************************************************************
0001-01-01 02:30:17 +02:30
display sec_access structure
0001-01-01 02:30:17 +02:30
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
0001-01-01 02:30:17 +02:30
void display_sec_access ( FILE * out_hnd , enum action_type action , SEC_ACCESS * info )
0001-01-01 02:30:17 +02:30
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t Permissions: \t %s \n " ,
0001-01-01 02:30:17 +02:30
get_sec_mask_str ( info - > mask ) ) ;
0001-01-01 02:30:17 +02:30
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
display sec_ace structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_sec_ace ( FILE * out_hnd , enum action_type action , SEC_ACE * ace )
{
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " \t ACE \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring sid_str ;
0001-01-01 02:30:17 +02:30
display_sec_access ( out_hnd , ACTION_HEADER , & ace - > info ) ;
display_sec_access ( out_hnd , ACTION_ENUMERATE , & ace - > info ) ;
display_sec_access ( out_hnd , ACTION_FOOTER , & ace - > info ) ;
0001-01-01 02:30:17 +02:30
sid_to_string ( sid_str , & ace - > sid ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t \t SID: \t %s \n " , sid_str ) ;
0001-01-01 02:30:17 +02:30
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
display sec_acl structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
0001-01-01 02:30:17 +02:30
void display_sec_acl ( FILE * out_hnd , enum action_type action , SEC_ACL * sec_acl )
0001-01-01 02:30:17 +02:30
{
switch ( action )
{
case ACTION_HEADER :
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t ACL \t Num ACEs: \t %d \t revision: \t %x \n " ,
0001-01-01 02:30:17 +02:30
sec_acl - > num_aces , sec_acl - > revision ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t --- \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
if ( sec_acl - > size ! = 0 & & sec_acl - > num_aces ! = 0 )
0001-01-01 02:30:17 +02:30
{
int i ;
0001-01-01 02:30:17 +02:30
for ( i = 0 ; i < sec_acl - > num_aces ; i + + )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
display_sec_ace ( out_hnd , ACTION_HEADER , & sec_acl - > ace_list [ i ] ) ;
display_sec_ace ( out_hnd , ACTION_ENUMERATE , & sec_acl - > ace_list [ i ] ) ;
display_sec_ace ( out_hnd , ACTION_FOOTER , & sec_acl - > ace_list [ i ] ) ;
0001-01-01 02:30:17 +02:30
}
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
display sec_desc structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_sec_desc ( FILE * out_hnd , enum action_type action , SEC_DESC * sec )
{
switch ( action )
{
case ACTION_HEADER :
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Security Descriptor \t revision: \t %x \t type: \t %x \n " ,
sec - > revision , sec - > type ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t ------------------- \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
fstring sid_str ;
0001-01-01 02:30:17 +02:30
if ( sec - > off_sacl ! = 0 )
{
display_sec_acl ( out_hnd , ACTION_HEADER , sec - > sacl ) ;
display_sec_acl ( out_hnd , ACTION_ENUMERATE , sec - > sacl ) ;
display_sec_acl ( out_hnd , ACTION_FOOTER , sec - > sacl ) ;
}
0001-01-01 02:30:17 +02:30
if ( sec - > off_dacl ! = 0 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
display_sec_acl ( out_hnd , ACTION_HEADER , sec - > dacl ) ;
display_sec_acl ( out_hnd , ACTION_ENUMERATE , sec - > dacl ) ;
display_sec_acl ( out_hnd , ACTION_FOOTER , sec - > dacl ) ;
0001-01-01 02:30:17 +02:30
}
if ( sec - > off_owner_sid ! = 0 )
{
0001-01-01 02:30:17 +02:30
sid_to_string ( sid_str , sec - > owner_sid ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Owner SID: \t %s \n " , sid_str ) ;
0001-01-01 02:30:17 +02:30
}
0001-01-01 02:30:17 +02:30
if ( sec - > off_grp_sid ! = 0 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
sid_to_string ( sid_str , sec - > grp_sid ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Parent SID: \t %s \n " , sid_str ) ;
0001-01-01 02:30:17 +02:30
}
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
/****************************************************************************
convert a security permissions into a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_reg_val_type_str ( uint32 type )
{
static fstring typestr ;
switch ( type )
{
case 0x01 :
{
fstrcpy ( typestr , " string " ) ;
return typestr ;
}
case 0x03 :
{
fstrcpy ( typestr , " bytes " ) ;
return typestr ;
}
case 0x04 :
{
fstrcpy ( typestr , " uint32 " ) ;
return typestr ;
}
case 0x07 :
{
fstrcpy ( typestr , " multi " ) ;
return typestr ;
}
default :
{
break ;
}
}
0001-01-01 02:30:17 +02:30
slprintf ( typestr , sizeof ( typestr ) - 1 , " [%d] " , type ) ;
0001-01-01 02:30:17 +02:30
return typestr ;
}
static void print_reg_value ( FILE * out_hnd , char * val_name , uint32 val_type , BUFFER2 * value )
{
fstring type ;
0001-01-01 02:30:17 +02:30
fstring valstr ;
0001-01-01 02:30:17 +02:30
fstrcpy ( type , get_reg_val_type_str ( val_type ) ) ;
switch ( val_type )
{
case 0x01 : /* unistr */
{
0001-01-01 02:30:17 +02:30
unibuf_to_ascii ( valstr , value - > buffer ,
0001-01-01 02:30:17 +02:30
MIN ( value - > buf_len , sizeof ( valstr ) - 1 ) ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t %s: \t %s: \t %s \n " , val_name , type , valstr ) ;
0001-01-01 02:30:17 +02:30
break ;
}
default : /* unknown */
case 0x03 : /* bytes */
{
if ( value - > buf_len < = 8 )
{
fprintf ( out_hnd , " \t %s: \t %s: \t " , val_name , type ) ;
out_data ( out_hnd , ( char * ) value - > buffer , value - > buf_len , 8 ) ;
}
else
{
fprintf ( out_hnd , " \t %s: \t %s: \n " , val_name , type ) ;
out_data ( out_hnd , ( char * ) value - > buffer , value - > buf_len , 16 ) ;
}
break ;
}
case 0x04 : /* uint32 */
{
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t %s: \t %s: \t 0x%08x \n " , val_name , type , buffer2_to_uint32 ( value ) ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case 0x07 : /* multiunistr */
{
0001-01-01 02:30:17 +02:30
buffer2_to_multistr ( valstr , value , sizeof ( valstr ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t %s: \t %s: \t %s \n " , val_name , type , valstr ) ;
0001-01-01 02:30:17 +02:30
break ;
}
}
}
/****************************************************************************
display structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_reg_value_info ( FILE * out_hnd , enum action_type action ,
char * val_name , uint32 val_type , BUFFER2 * value )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
print_reg_value ( out_hnd , val_name , val_type , value ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
/****************************************************************************
display structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_reg_key_info ( FILE * out_hnd , enum action_type action ,
char * key_name , time_t key_mod_time )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
fprintf ( out_hnd , " \t %s \t (%s) \n " ,
key_name , http_timestring ( key_mod_time ) ) ;
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
convert a security permissions into a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * get_svc_start_type_str ( uint32 type )
{
static fstring typestr ;
switch ( type )
{
case 0x00 : fstrcpy ( typestr , " Boot " ) ; return typestr ;
case 0x01 : fstrcpy ( typestr , " System " ) ; return typestr ;
case 0x02 : fstrcpy ( typestr , " Auto " ) ; return typestr ;
case 0x03 : fstrcpy ( typestr , " Manual " ) ; return typestr ;
case 0x04 : fstrcpy ( typestr , " Disabled " ) ; return typestr ;
default : break ;
}
slprintf ( typestr , sizeof ( typestr ) - 1 , " [%d] " , type ) ;
return typestr ;
}
/****************************************************************************
display structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_query_svc_cfg ( FILE * out_hnd , enum action_type action ,
QUERY_SERVICE_CONFIG * cfg )
{
switch ( action )
{
case ACTION_HEADER :
{
0001-01-01 02:30:17 +02:30
fstring service ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( service , & cfg - > uni_display_name , sizeof ( service ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Service: \t %s \n " , service ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t ------- \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
fstring temp ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & cfg - > uni_bin_path_name , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Path: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & cfg - > uni_load_order_grp , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Load Order: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & cfg - > uni_dependencies , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Dependencies: \t %s \n " , temp ) ;
0001-01-01 02:30:17 +02:30
unistr2_to_ascii ( temp , & cfg - > uni_service_start_name , sizeof ( temp ) - 1 ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Service Start: \t %s \n " , temp ) ;
fprintf ( out_hnd , " \t Service Type: \t %d \n " , cfg - > service_type ) ;
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t Start Type: \t %s \n " , get_svc_start_type_str ( cfg - > start_type ) ) ;
fprintf ( out_hnd , " \t Error Control: \t %d \n " , cfg - > error_control ) ;
fprintf ( out_hnd , " \t Tag Id: \t %d \n " , cfg - > tag_id ) ;
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
0001-01-01 02:30:17 +02:30
/****************************************************************************
display structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_svc_info ( FILE * out_hnd , enum action_type action , ENUM_SRVC_STATUS * svc )
{
switch ( action )
{
case ACTION_HEADER :
{
break ;
}
case ACTION_ENUMERATE :
{
0001-01-01 02:30:17 +02:30
fstring name ;
unistr_to_ascii ( name , svc - > uni_srvc_name . buffer ,
0001-01-01 02:30:17 +02:30
sizeof ( name ) - 1 ) ; /* service name */
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t %s: " , name ) ;
unistr_to_ascii ( name , svc - > uni_disp_name . buffer ,
0001-01-01 02:30:17 +02:30
sizeof ( name ) - 1 ) ; /* display name */
0001-01-01 02:30:17 +02:30
fprintf ( out_hnd , " \t %s \n " , name ) ;
0001-01-01 02:30:17 +02:30
break ;
}
case ACTION_FOOTER :
{
break ;
}
}
}
0001-01-01 02:30:17 +02:30
# if COPY_THIS_TEMPLATE
/****************************************************************************
display structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void display_ ( FILE * out_hnd , enum action_type action , * )
{
switch ( action )
{
case ACTION_HEADER :
{
fprintf ( out_hnd , " \t \n " ) ;
fprintf ( out_hnd , " \t ------------------- \n " ) ;
break ;
}
case ACTION_ENUMERATE :
{
break ;
}
case ACTION_FOOTER :
{
fprintf ( out_hnd , " \n " ) ;
break ;
}
}
}
# endif