2000-07-07 10:18:00 +04:00
/*
2002-01-30 09:08:46 +03:00
Unix SMB / CIFS implementation .
2000-07-07 10:18:00 +04: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"
/****************************************************************************
convert a security permissions into a string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 05:17:26 +03:00
char * get_sec_mask_str ( uint32 type )
2000-07-07 10:18:00 +04:00
{
2001-12-11 05:17:26 +03:00
static fstring typestr = " " ;
2000-07-07 10:18:00 +04:00
typestr [ 0 ] = 0 ;
2001-12-11 05:17:26 +03: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 " ) ;
2002-11-07 05:15:35 +03:00
printf ( " \t \t Specific bits: 0x%lx \n " , ( unsigned long ) type & SPECIFIC_RIGHTS_MASK ) ;
2000-07-07 10:18:00 +04:00
return typestr ;
}
/****************************************************************************
display sec_access structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 05:17:26 +03:00
void display_sec_access ( SEC_ACCESS * info )
2000-07-07 10:18:00 +04:00
{
2006-09-21 02:23:12 +04:00
printf ( " \t \t Permissions: 0x%x: %s \n " , * info , get_sec_mask_str ( * info ) ) ;
2000-07-07 10:18:00 +04:00
}
/****************************************************************************
display sec_ace structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 05:17:26 +03:00
void display_sec_ace ( SEC_ACE * ace )
2000-07-07 10:18:00 +04:00
{
2001-12-11 05:17:26 +03: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 10:18:00 +04:00
break ;
2001-12-11 05:17:26 +03: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 10:18:00 +04:00
break ;
}
2001-12-11 05:17:26 +03:00
printf ( " (%d) flags: %d \n " , ace - > type , ace - > flags ) ;
2006-09-21 02:23:12 +04:00
display_sec_access ( & ace - > access_mask ) ;
2001-12-11 05:17:26 +03:00
sid_to_string ( sid_str , & ace - > trustee ) ;
printf ( " \t \t SID: %s \n \n " , sid_str ) ;
2000-07-07 10:18:00 +04:00
}
/****************************************************************************
display sec_acl structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 05:17:26 +03:00
void display_sec_acl ( SEC_ACL * sec_acl )
2000-07-07 10:18:00 +04:00
{
2001-12-11 05:17:26 +03:00
int i ;
2000-07-07 10:18:00 +04:00
2001-12-11 05:17:26 +03: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 + + )
2006-09-21 02:23:12 +04:00
display_sec_ace ( & sec_acl - > aces [ i ] ) ;
2000-07-07 10:18:00 +04:00
}
2006-03-06 18:22:00 +03:00
void display_acl_type ( uint16 type )
{
static fstring typestr = " " ;
typestr [ 0 ] = 0 ;
if ( type & SEC_DESC_OWNER_DEFAULTED ) /* 0x0001 */
fstrcat ( typestr , " SEC_DESC_OWNER_DEFAULTED " ) ;
if ( type & SEC_DESC_GROUP_DEFAULTED ) /* 0x0002 */
fstrcat ( typestr , " SEC_DESC_GROUP_DEFAULTED " ) ;
if ( type & SEC_DESC_DACL_PRESENT ) /* 0x0004 */
fstrcat ( typestr , " SEC_DESC_DACL_PRESENT " ) ;
if ( type & SEC_DESC_DACL_DEFAULTED ) /* 0x0008 */
fstrcat ( typestr , " SEC_DESC_DACL_DEFAULTED " ) ;
if ( type & SEC_DESC_SACL_PRESENT ) /* 0x0010 */
fstrcat ( typestr , " SEC_DESC_SACL_PRESENT " ) ;
if ( type & SEC_DESC_SACL_DEFAULTED ) /* 0x0020 */
fstrcat ( typestr , " SEC_DESC_SACL_DEFAULTED " ) ;
if ( type & SEC_DESC_DACL_TRUSTED ) /* 0x0040 */
fstrcat ( typestr , " SEC_DESC_DACL_TRUSTED " ) ;
if ( type & SEC_DESC_SERVER_SECURITY ) /* 0x0080 */
fstrcat ( typestr , " SEC_DESC_SERVER_SECURITY " ) ;
if ( type & 0x0100 ) fstrcat ( typestr , " 0x0100 " ) ;
if ( type & 0x0200 ) fstrcat ( typestr , " 0x0200 " ) ;
if ( type & 0x0400 ) fstrcat ( typestr , " 0x0400 " ) ;
if ( type & 0x0800 ) fstrcat ( typestr , " 0x0800 " ) ;
if ( type & 0x1000 ) fstrcat ( typestr , " 0x1000 " ) ;
if ( type & 0x2000 ) fstrcat ( typestr , " 0x2000 " ) ;
if ( type & 0x4000 ) fstrcat ( typestr , " 0x4000 " ) ;
if ( type & SEC_DESC_SELF_RELATIVE ) /* 0x8000 */
fstrcat ( typestr , " SEC_DESC_SELF_RELATIVE " ) ;
printf ( " type: 0x%04x: %s \n " , type , typestr ) ;
}
2000-07-07 10:18:00 +04:00
/****************************************************************************
display sec_desc structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-12-11 05:17:26 +03:00
void display_sec_desc ( SEC_DESC * sec )
2000-07-07 10:18:00 +04:00
{
2001-12-11 05:17:26 +03:00
fstring sid_str ;
2000-07-07 10:18:00 +04:00
2006-03-06 18:22:00 +03:00
if ( ! sec ) {
printf ( " NULL \n " ) ;
return ;
}
printf ( " revision: %d \n " , sec - > revision ) ;
display_acl_type ( sec - > type ) ;
2002-03-07 07:22:16 +03:00
if ( sec - > sacl ) {
printf ( " SACL \n " ) ;
2001-12-11 05:17:26 +03:00
display_sec_acl ( sec - > sacl ) ;
}
2002-03-07 07:22:16 +03:00
if ( sec - > dacl ) {
printf ( " DACL \n " ) ;
2001-12-11 05:17:26 +03:00
display_sec_acl ( sec - > dacl ) ;
2000-07-07 10:18:00 +04:00
}
2002-03-07 07:22:16 +03:00
if ( sec - > owner_sid ) {
2001-12-11 05:17:26 +03:00
sid_to_string ( sid_str , sec - > owner_sid ) ;
printf ( " \t Owner SID: \t %s \n " , sid_str ) ;
}
2006-09-21 02:23:12 +04:00
if ( sec - > group_sid ) {
sid_to_string ( sid_str , sec - > group_sid ) ;
2001-12-11 05:17:26 +03:00
printf ( " \t Parent SID: \t %s \n " , sid_str ) ;
}
}