1/* 2 Unix SMB/CIFS implementation. 3 Copyright (C) Jelmer Vernooij 2004-2007. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17*/ 18 19#include "includes.h" 20#include "registry.h" 21#include "param/param.h" 22 23/** 24 * @file 25 * @brief Samba-specific registry functions 26 */ 27 28static WERROR mount_samba_hive(struct registry_context *ctx, 29 struct tevent_context *event_ctx, 30 struct loadparm_context *lp_ctx, 31 struct auth_session_info *auth_info, 32 struct cli_credentials *creds, 33 const char *name, 34 uint32_t hive_id) 35{ 36 WERROR error; 37 struct hive_key *hive; 38 const char *location; 39 40 location = talloc_asprintf(ctx, "%s/%s.ldb", 41 lp_private_dir(lp_ctx), 42 name); 43 44 error = reg_open_hive(ctx, location, auth_info, creds, event_ctx, lp_ctx, &hive); 45 46 if (W_ERROR_EQUAL(error, WERR_BADFILE)) 47 error = reg_open_ldb_file(ctx, location, auth_info, 48 creds, event_ctx, lp_ctx, &hive); 49 50 if (!W_ERROR_IS_OK(error)) 51 return error; 52 53 return reg_mount_hive(ctx, hive, hive_id, NULL); 54} 55 56 57_PUBLIC_ WERROR reg_open_samba(TALLOC_CTX *mem_ctx, 58 struct registry_context **ctx, 59 struct tevent_context *ev_ctx, 60 struct loadparm_context *lp_ctx, 61 struct auth_session_info *session_info, 62 struct cli_credentials *credentials) 63{ 64 WERROR result; 65 66 result = reg_open_local(mem_ctx, ctx); 67 if (!W_ERROR_IS_OK(result)) { 68 return result; 69 } 70 71 mount_samba_hive(*ctx, ev_ctx, lp_ctx, session_info, credentials, 72 "hklm", HKEY_LOCAL_MACHINE); 73 74 mount_samba_hive(*ctx, ev_ctx, lp_ctx, session_info, credentials, 75 "hkcr", HKEY_CLASSES_ROOT); 76 77 /* FIXME: Should be mounted from NTUSER.DAT in the home directory of the 78 * current user */ 79 mount_samba_hive(*ctx, ev_ctx, lp_ctx, session_info, credentials, 80 "hkcu", HKEY_CURRENT_USER); 81 82 mount_samba_hive(*ctx, ev_ctx, lp_ctx, session_info, credentials, 83 "hku", HKEY_USERS); 84 85 /* FIXME: Different hive backend for HKEY_CLASSES_ROOT: merged view of HKEY_LOCAL_MACHINE\Software\Classes 86 * and HKEY_CURRENT_USER\Software\Classes */ 87 88 /* FIXME: HKEY_CURRENT_CONFIG is an alias for HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current */ 89 90 /* FIXME: HKEY_PERFORMANCE_DATA is dynamically generated */ 91 92 /* FIXME: HKEY_LOCAL_MACHINE\Hardware is autogenerated */ 93 94 /* FIXME: HKEY_LOCAL_MACHINE\Security\SAM is an alias for HKEY_LOCAL_MACHINE\SAM */ 95 96 return WERR_OK; 97} 98