2004-12-10 23:07:04 +03:00
/*
Unix SMB / CIFS implementation .
2007-08-26 19:16:40 +04:00
Copyright ( C ) Jelmer Vernooij 2004 - 2007.
2004-12-10 23:07:04 +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-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2004-12-10 23:07:04 +03:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-12-10 23:07:04 +03:00
*/
# include "includes.h"
# include "registry.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2004-12-10 23:07:04 +03:00
2006-03-06 13:09:53 +03:00
/**
* @ file
* @ brief Samba - specific registry functions
*/
2007-10-01 22:52:55 +04:00
static WERROR mount_samba_hive ( struct registry_context * ctx ,
struct auth_session_info * auth_info ,
struct cli_credentials * creds ,
const char * name ,
uint32_t hive_id )
2004-12-10 23:07:04 +03:00
{
WERROR error ;
2007-08-26 19:16:40 +04:00
struct hive_key * hive ;
2005-08-08 07:19:28 +04:00
const char * location ;
2004-12-10 23:07:04 +03:00
2007-09-28 05:17:46 +04:00
location = talloc_asprintf ( ctx , " %s/%s.ldb " , lp_private_dir ( global_loadparm ) , name ) ;
2004-12-10 23:07:04 +03:00
2007-08-27 17:13:08 +04:00
2007-08-26 19:16:40 +04:00
error = reg_open_hive ( ctx , location , auth_info , creds , & hive ) ;
2007-08-27 17:13:08 +04:00
if ( W_ERROR_EQUAL ( error , WERR_NOT_FOUND ) )
error = reg_open_ldb_file ( ctx , location , auth_info , creds , & hive ) ;
2007-08-26 19:16:40 +04:00
if ( ! W_ERROR_IS_OK ( error ) )
return error ;
return reg_mount_hive ( ctx , hive , hive_id , NULL ) ;
}
_PUBLIC_ WERROR reg_open_samba ( TALLOC_CTX * mem_ctx ,
struct registry_context * * ctx ,
struct auth_session_info * session_info ,
struct cli_credentials * credentials )
{
WERROR result ;
2004-12-10 23:07:04 +03:00
2007-08-26 19:16:40 +04:00
result = reg_open_local ( mem_ctx , ctx , session_info , credentials ) ;
if ( ! W_ERROR_IS_OK ( result ) ) {
return result ;
2004-12-10 23:07:04 +03:00
}
2004-12-11 23:06:40 +03:00
2007-08-26 19:16:40 +04:00
mount_samba_hive ( * ctx , session_info , credentials ,
" hklm " , HKEY_LOCAL_MACHINE ) ;
mount_samba_hive ( * ctx , session_info , credentials ,
" hkcr " , HKEY_CLASSES_ROOT ) ;
/* FIXME: Should be mounted from NTUSER.DAT in the home directory of the
* current user */
mount_samba_hive ( * ctx , session_info , credentials ,
" hkcu " , HKEY_CURRENT_USER ) ;
mount_samba_hive ( * ctx , session_info , credentials ,
" hku " , HKEY_USERS ) ;
2004-12-11 23:06:40 +03:00
/* FIXME: Different hive backend for HKEY_CLASSES_ROOT: merged view of HKEY_LOCAL_MACHINE\Software\Classes
* and HKEY_CURRENT_USER \ Software \ Classes */
/* FIXME: HKEY_CURRENT_CONFIG is an alias for HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current */
/* FIXME: HKEY_PERFORMANCE_DATA is dynamically generated */
/* FIXME: HKEY_LOCAL_MACHINE\Hardware is autogenerated */
/* FIXME: HKEY_LOCAL_MACHINE\Security\SAM is an alias for HKEY_LOCAL_MACHINE\SAM */
2004-12-10 23:07:04 +03:00
return WERR_OK ;
}