2007-06-14 11:29:35 +00:00
/*
* Unix SMB / CIFS implementation .
* Registry helper routines
* Copyright ( C ) Michael Adam 2007
*
* 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
2007-07-09 19:25:36 +00:00
* Software Foundation ; either version 3 of the License , or ( at your option )
2007-06-14 11:29:35 +00:00
* 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
2007-07-10 05:23:25 +00:00
* this program ; if not , see < http : //www.gnu.org/licenses/>.
2007-06-14 11:29:35 +00:00
*/
# include "includes.h"
2007-09-28 23:05:52 +00:00
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_REGISTRY
2007-06-14 11:29:35 +00:00
extern REGISTRY_OPS smbconf_reg_ops ;
/*
* create a fake token just with enough rights to
* locally access the registry .
*/
NT_USER_TOKEN * registry_create_admin_token ( TALLOC_CTX * mem_ctx )
{
NT_USER_TOKEN * token = NULL ;
/* fake a user token: builtin administrators sid and the
* disk operators privilege is all we need to access the
* registry . . . */
if ( ! ( token = TALLOC_ZERO_P ( mem_ctx , NT_USER_TOKEN ) ) ) {
DEBUG ( 1 , ( " talloc failed \n " ) ) ;
goto done ;
}
token - > privileges = se_disk_operators ;
if ( ! add_sid_to_array ( token , & global_sid_Builtin_Administrators ,
& token - > user_sids , & token - > num_sids ) ) {
DEBUG ( 1 , ( " Error adding builtin administrators sid "
" to fake token. \n " ) ) ;
goto done ;
}
done :
return token ;
}
/*
* init the smbconf portion of the registry .
* for use in places where not the whole registry is needed ,
* e . g . utils / net_conf . c and loadparm . c
*/
2007-10-18 17:40:25 -07:00
bool registry_init_regdb ( void )
2007-06-14 11:29:35 +00:00
{
2008-01-02 17:08:28 +01:00
bool ret = false ;
2007-06-14 11:29:35 +00:00
int saved_errno = 0 ;
static REGISTRY_HOOK smbconf_reg_hook = { KEY_SMBCONF , & smbconf_reg_ops } ;
DEBUG ( 10 , ( " registry_init_regdb called \n " ) ) ;
if ( ! regdb_init ( ) ) {
saved_errno = errno ;
DEBUG ( 1 , ( " Can't open the registry " ) ) ;
if ( saved_errno ) {
DEBUGADD ( 1 , ( " : %s " , strerror ( saved_errno ) ) ) ;
}
DEBUGADD ( 1 , ( " . \n " ) ) ;
goto done ;
}
reghook_cache_init ( ) ;
if ( ! reghook_cache_add ( & smbconf_reg_hook ) ) {
DEBUG ( 1 , ( " Error adding smbconf reghooks to reghook cache. \n " ) ) ;
goto done ;
}
2008-01-02 17:08:28 +01:00
ret = true ;
2007-06-14 11:29:35 +00:00
done :
return ret ;
}