2000-07-07 06:18:00 +00:00
/*
2002-01-30 06:08:46 +00:00
Unix SMB / CIFS implementation .
2000-07-07 06:18:00 +00:00
Samba utility functions
Copyright ( C ) Andrew Tridgell 1992 - 1999
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1999
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"
# include "rpcclient.h"
/****************************************************************************
convert a security permissions into a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 02:17:26 +00:00
char * get_sec_mask_str ( uint32 type )
2000-07-07 06:18:00 +00:00
{
2001-12-11 02:17:26 +00:00
static fstring typestr = " " ;
2000-07-07 06:18:00 +00:00
typestr [ 0 ] = 0 ;
2001-12-11 02:17:26 +00:00
if ( type & GENERIC_ALL_ACCESS )
fstrcat ( typestr , " Generic all access " ) ;
if ( type & GENERIC_EXECUTE_ACCESS )
fstrcat ( typestr , " Generic execute access " ) ;
if ( type & GENERIC_WRITE_ACCESS )
fstrcat ( typestr , " Generic write access " ) ;
if ( type & GENERIC_READ_ACCESS )
fstrcat ( typestr , " Generic read access " ) ;
if ( type & MAXIMUM_ALLOWED_ACCESS )
fstrcat ( typestr , " MAXIMUM_ALLOWED_ACCESS " ) ;
if ( type & SYSTEM_SECURITY_ACCESS )
fstrcat ( typestr , " SYSTEM_SECURITY_ACCESS " ) ;
if ( type & SYNCHRONIZE_ACCESS )
fstrcat ( typestr , " SYNCHRONIZE_ACCESS " ) ;
if ( type & WRITE_OWNER_ACCESS )
fstrcat ( typestr , " WRITE_OWNER_ACCESS " ) ;
if ( type & WRITE_DAC_ACCESS )
fstrcat ( typestr , " WRITE_DAC_ACCESS " ) ;
if ( type & READ_CONTROL_ACCESS )
fstrcat ( typestr , " READ_CONTROL_ACCESS " ) ;
if ( type & DELETE_ACCESS )
fstrcat ( typestr , " DELETE_ACCESS " ) ;
2001-12-13 00:02:37 +00:00
printf ( " \t \t Specific bits: 0x%lx \n " , type & SPECIFIC_RIGHTS_MASK ) ;
2000-07-07 06:18:00 +00:00
return typestr ;
}
/****************************************************************************
display sec_access structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 02:17:26 +00:00
void display_sec_access ( SEC_ACCESS * info )
2000-07-07 06:18:00 +00:00
{
2001-12-11 02:17:26 +00:00
printf ( " \t \t Permissions: 0x%x: %s \n " , info - > mask , get_sec_mask_str ( info - > mask ) ) ;
2000-07-07 06:18:00 +00:00
}
/****************************************************************************
display sec_ace structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 02:17:26 +00:00
void display_sec_ace ( SEC_ACE * ace )
2000-07-07 06:18:00 +00:00
{
2001-12-11 02:17:26 +00:00
fstring sid_str ;
printf ( " \t ACE \n \t \t type: " ) ;
switch ( ace - > type ) {
case SEC_ACE_TYPE_ACCESS_ALLOWED :
printf ( " ACCESS ALLOWED " ) ;
break ;
case SEC_ACE_TYPE_ACCESS_DENIED :
printf ( " ACCESS DENIED " ) ;
2000-07-07 06:18:00 +00:00
break ;
2001-12-11 02:17:26 +00:00
case SEC_ACE_TYPE_SYSTEM_AUDIT :
printf ( " SYSTEM AUDIT " ) ;
break ;
case SEC_ACE_TYPE_SYSTEM_ALARM :
printf ( " SYSTEM ALARM " ) ;
break ;
default :
printf ( " ???? " ) ;
2000-07-07 06:18:00 +00:00
break ;
}
2001-12-11 02:17:26 +00:00
printf ( " (%d) flags: %d \n " , ace - > type , ace - > flags ) ;
display_sec_access ( & ace - > info ) ;
sid_to_string ( sid_str , & ace - > trustee ) ;
printf ( " \t \t SID: %s \n \n " , sid_str ) ;
2000-07-07 06:18:00 +00:00
}
/****************************************************************************
display sec_acl structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 02:17:26 +00:00
void display_sec_acl ( SEC_ACL * sec_acl )
2000-07-07 06:18:00 +00:00
{
2001-12-11 02:17:26 +00:00
int i ;
2000-07-07 06:18:00 +00:00
2001-12-11 02:17:26 +00:00
printf ( " \t ACL \t Num ACEs: \t %d \t revision: \t %x \n " ,
sec_acl - > num_aces , sec_acl - > revision ) ;
printf ( " \t --- \n " ) ;
if ( sec_acl - > size ! = 0 & & sec_acl - > num_aces ! = 0 )
for ( i = 0 ; i < sec_acl - > num_aces ; i + + )
display_sec_ace ( & sec_acl - > ace [ i ] ) ;
2000-07-07 06:18:00 +00:00
}
/****************************************************************************
display sec_desc structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 02:17:26 +00:00
void display_sec_desc ( SEC_DESC * sec )
2000-07-07 06:18:00 +00:00
{
2001-12-11 02:17:26 +00:00
fstring sid_str ;
2000-07-07 06:18:00 +00:00
2002-03-07 04:22:16 +00:00
if ( sec - > sacl ) {
printf ( " SACL \n " ) ;
2001-12-11 02:17:26 +00:00
display_sec_acl ( sec - > sacl ) ;
}
2002-03-07 04:22:16 +00:00
if ( sec - > dacl ) {
printf ( " DACL \n " ) ;
2001-12-11 02:17:26 +00:00
display_sec_acl ( sec - > dacl ) ;
2000-07-07 06:18:00 +00:00
}
2002-03-07 04:22:16 +00:00
if ( sec - > owner_sid ) {
2001-12-11 02:17:26 +00:00
sid_to_string ( sid_str , sec - > owner_sid ) ;
printf ( " \t Owner SID: \t %s \n " , sid_str ) ;
}
2002-03-07 04:22:16 +00:00
if ( sec - > grp_sid ) {
2001-12-11 02:17:26 +00:00
sid_to_string ( sid_str , sec - > grp_sid ) ;
printf ( " \t Parent SID: \t %s \n " , sid_str ) ;
}
}