2007-10-06 04:17:44 +04:00
/*
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-06 04:17:44 +04:00
static WERROR mount_samba_hive ( struct registry_context * ctx ,
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ,
2007-12-03 00:32:11 +03:00
struct loadparm_context * lp_ctx ,
2007-10-01 22:52:55 +04:00
struct auth_session_info * auth_info ,
struct cli_credentials * creds ,
2007-10-06 04:17:44 +04:00
const char * name ,
2007-10-01 22:52:55 +04:00
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-10-06 04:17:44 +04:00
location = talloc_asprintf ( ctx , " %s/%s.ldb " ,
2010-07-16 08:32:42 +04:00
lpcfg_private_dir ( lp_ctx ) ,
2007-10-06 04:17:44 +04:00
name ) ;
2010-03-22 22:10:26 +03:00
W_ERROR_HAVE_NO_MEMORY ( location ) ;
2007-08-27 17:13:08 +04:00
2008-04-17 14:23:44 +04:00
error = reg_open_hive ( ctx , location , auth_info , creds , event_ctx , lp_ctx , & hive ) ;
2007-08-27 17:13:08 +04:00
2015-12-03 17:24:12 +03:00
if ( W_ERROR_EQUAL ( error , WERR_FILE_NOT_FOUND ) )
2007-10-06 04:17:44 +04:00
error = reg_open_ldb_file ( ctx , location , auth_info ,
2008-04-17 14:23:44 +04:00
creds , event_ctx , lp_ctx , & hive ) ;
2007-08-27 17:13:08 +04:00
2010-03-22 22:12:13 +03:00
talloc_free ( discard_const_p ( char , location ) ) ;
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 ) ;
}
2007-10-06 04:17:44 +04:00
_PUBLIC_ WERROR reg_open_samba ( TALLOC_CTX * mem_ctx ,
struct registry_context * * ctx ,
2008-12-29 22:24:57 +03:00
struct tevent_context * ev_ctx ,
2007-12-03 00:32:11 +03:00
struct loadparm_context * lp_ctx ,
2007-10-06 04:17:44 +04:00
struct auth_session_info * session_info ,
struct cli_credentials * credentials )
2007-08-26 19:16:40 +04:00
{
WERROR result ;
2004-12-10 23:07:04 +03:00
2008-04-16 03:32:54 +04:00
result = reg_open_local ( mem_ctx , ctx ) ;
2007-08-26 19:16:40 +04:00
if ( ! W_ERROR_IS_OK ( result ) ) {
return result ;
2004-12-10 23:07:04 +03:00
}
2004-12-11 23:06:40 +03:00
2008-04-17 14:23:44 +04:00
mount_samba_hive ( * ctx , ev_ctx , lp_ctx , session_info , credentials ,
2007-10-06 04:17:44 +04:00
" hklm " , HKEY_LOCAL_MACHINE ) ;
2007-08-26 19:16:40 +04:00
2008-04-17 14:23:44 +04:00
mount_samba_hive ( * ctx , ev_ctx , lp_ctx , session_info , credentials ,
2007-10-06 04:17:44 +04:00
" hkcr " , HKEY_CLASSES_ROOT ) ;
2007-08-26 19:16:40 +04:00
2007-10-06 04:17:44 +04:00
/* FIXME: Should be mounted from NTUSER.DAT in the home directory of the
2007-08-26 19:16:40 +04:00
* current user */
2008-04-17 14:23:44 +04:00
mount_samba_hive ( * ctx , ev_ctx , lp_ctx , session_info , credentials ,
2007-10-06 04:17:44 +04:00
" hkcu " , HKEY_CURRENT_USER ) ;
2007-08-26 19:16:40 +04:00
2008-04-17 14:23:44 +04:00
mount_samba_hive ( * ctx , ev_ctx , lp_ctx , session_info , credentials ,
2007-10-06 04:17:44 +04:00
" hku " , HKEY_USERS ) ;
2007-08-26 19:16:40 +04:00
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 */
2007-10-06 04:17:44 +04:00
2004-12-10 23:07:04 +03:00
return WERR_OK ;
}