• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/source4/lib/registry/
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