2011-03-23 16:57:08 +03:00
/*
2005-12-03 21:34:13 +03:00
Unix SMB / CIFS implementation .
Translate BUILTIN names to SIDs and vice versa
Copyright ( C ) Volker Lendecke 2005
2010-03-25 12:19:48 +03:00
2005-12-03 21:34:13 +03:00
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-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-12-03 21:34:13 +03:00
( at your option ) any later version .
2010-03-25 12:19:48 +03:00
2005-12-03 21:34:13 +03:00
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 .
2010-03-25 12:19:48 +03:00
2005-12-03 21:34:13 +03:00
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-12-03 21:34:13 +03:00
*/
# include "includes.h"
2010-10-12 08:27:50 +04:00
# include "../libcli/security/security.h"
2005-12-03 21:34:13 +03:00
struct rid_name_map {
uint32 rid ;
const char * name ;
} ;
static const struct rid_name_map builtin_aliases [ ] = {
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_ADMINISTRATORS , " Administrators " } ,
{ BUILTIN_RID_USERS , " Users " } ,
{ BUILTIN_RID_GUESTS , " Guests " } ,
{ BUILTIN_RID_POWER_USERS , " Power Users " } ,
{ BUILTIN_RID_ACCOUNT_OPERATORS , " Account Operators " } ,
{ BUILTIN_RID_SERVER_OPERATORS , " Server Operators " } ,
{ BUILTIN_RID_PRINT_OPERATORS , " Print Operators " } ,
{ BUILTIN_RID_BACKUP_OPERATORS , " Backup Operators " } ,
{ BUILTIN_RID_REPLICATOR , " Replicator " } ,
{ BUILTIN_RID_RAS_SERVERS , " RAS Servers " } ,
{ BUILTIN_RID_PRE_2K_ACCESS ,
2010-03-23 13:39:05 +03:00
" Pre-Windows 2000 Compatible Access " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_REMOTE_DESKTOP_USERS ,
2010-03-23 13:39:05 +03:00
" Remote Desktop Users " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_NETWORK_CONF_OPERATORS ,
2010-03-23 13:39:05 +03:00
" Network Configuration Operators " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_INCOMING_FOREST_TRUST ,
2010-03-23 13:39:05 +03:00
" Incoming Forest Trust Builders " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_PERFMON_USERS ,
2010-03-23 16:53:49 +03:00
" Performance Monitor Users " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_PERFLOG_USERS ,
2010-03-23 16:53:49 +03:00
" Performance Log Users " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_AUTH_ACCESS ,
2010-03-23 16:53:49 +03:00
" Windows Authorization Access Group " } ,
2010-05-18 01:04:08 +04:00
{ BUILTIN_RID_TS_LICENSE_SERVERS ,
2010-03-23 16:53:49 +03:00
" Terminal Server License Servers " } ,
2011-08-29 19:36:25 +04:00
{ BUILTIN_RID_DISTRIBUTED_COM_USERS ,
" Distributed COM Users " } ,
{ BUILTIN_RID_CRYPTO_OPERATORS ,
" Cryptographic Operators " } ,
{ BUILTIN_RID_EVENT_LOG_READERS ,
" Event Log Readers " } ,
{ BUILTIN_RID_CERT_SERV_DCOM_ACCESS ,
" Certificate Service DCOM Access " } ,
2005-12-03 21:34:13 +03:00
{ 0 , NULL } } ;
/*******************************************************************
Look up a rid in the BUILTIN domain
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-19 04:40:25 +04:00
bool lookup_builtin_rid ( TALLOC_CTX * mem_ctx , uint32 rid , const char * * name )
2005-12-03 21:34:13 +03:00
{
const struct rid_name_map * aliases = builtin_aliases ;
while ( aliases - > name ! = NULL ) {
if ( rid = = aliases - > rid ) {
* name = talloc_strdup ( mem_ctx , aliases - > name ) ;
return True ;
}
aliases + + ;
}
return False ;
}
/*******************************************************************
Look up a name in the BUILTIN domain
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-19 04:40:25 +04:00
bool lookup_builtin_name ( const char * name , uint32 * rid )
2005-12-03 21:34:13 +03:00
{
const struct rid_name_map * aliases = builtin_aliases ;
while ( aliases - > name ! = NULL ) {
if ( strequal ( name , aliases - > name ) ) {
* rid = aliases - > rid ;
return True ;
}
aliases + + ;
}
return False ;
}
/*****************************************************************
Return the name of the BUILTIN domain
2011-03-23 16:57:08 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-12-03 21:34:13 +03:00
const char * builtin_domain_name ( void )
{
return " BUILTIN " ;
}
/*****************************************************************
Check if the SID is the builtin SID ( S - 1 - 5 - 32 ) .
2011-03-23 16:57:08 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-12-03 21:34:13 +03:00
2010-05-21 05:25:01 +04:00
bool sid_check_is_builtin ( const struct dom_sid * sid )
2005-12-03 21:34:13 +03:00
{
2010-08-26 17:48:50 +04:00
return dom_sid_equal ( sid , & global_sid_Builtin ) ;
2005-12-03 21:34:13 +03:00
}
/*****************************************************************
Check if the SID is one of the builtin SIDs ( S - 1 - 5 - 32 - a ) .
2011-03-23 16:57:08 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-12-03 21:34:13 +03:00
2010-05-21 05:25:01 +04:00
bool sid_check_is_in_builtin ( const struct dom_sid * sid )
2005-12-03 21:34:13 +03:00
{
2010-05-21 05:25:01 +04:00
struct dom_sid dom_sid ;
2005-12-03 21:34:13 +03:00
sid_copy ( & dom_sid , sid ) ;
2011-03-10 18:19:17 +03:00
sid_split_rid ( & dom_sid , NULL ) ;
2006-02-04 01:19:41 +03:00
return sid_check_is_builtin ( & dom_sid ) ;
2005-12-03 21:34:13 +03:00
}
2012-01-17 16:59:56 +04:00
/********************************************************************
Check if the SID is one of the well - known builtin SIDs ( S - 1 - 5 - 32 - x )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
bool sid_check_is_wellknown_builtin ( const struct dom_sid * sid )
{
struct dom_sid dom_sid ;
const struct rid_name_map * aliases = builtin_aliases ;
uint32_t rid ;
sid_copy ( & dom_sid , sid ) ;
sid_split_rid ( & dom_sid , & rid ) ;
if ( ! sid_check_is_builtin ( & dom_sid ) ) {
return false ;
}
while ( aliases - > name ! = NULL ) {
if ( aliases - > rid = = rid ) {
return True ;
}
aliases + + ;
}
return False ;
}