summaryrefslogtreecommitdiff
path: root/source4/lib/registry/reg_samba.c
blob: 560e1ded31c6769a63d9dd15db27fb35aca5bf8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/* 
   Unix SMB/CIFS implementation.
   Copyright (C) Jelmer Vernooij			2004.

   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 Software Foundation; either version 3 of the License, or
   (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
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "includes.h"
#include "registry.h"

/**
 * @file
 * @brief Samba-specific registry functions
 */

static WERROR reg_samba_get_predef (struct registry_context *ctx, uint32_t hkey, struct registry_key **k)
{
	WERROR error;
	const char *conf;
	char *backend;
	const char *location;
	const char *hivename = reg_get_predef_name(hkey);

	*k = NULL;

	conf = lp_parm_string(-1, "registry", hivename);
	
	if (!conf) {
		return WERR_NOT_SUPPORTED;
	}

	location = strchr(conf, ':');
	if (location) {
		backend = talloc_strndup(ctx, conf, (int)(location - conf));
		location++;
	} else {
		backend = talloc_strdup(ctx, "ldb");
		location = conf;
	}

	/* 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 */

	error = reg_open_hive(ctx, backend, location, ctx->session_info, ctx->credentials, k);

	talloc_free(backend);

	return error;
}

_PUBLIC_ WERROR reg_open_local (TALLOC_CTX *mem_ctx, 
				struct registry_context **ctx, 
				struct auth_session_info *session_info, 
				struct cli_credentials *credentials)
{
	*ctx = talloc(mem_ctx, struct registry_context);
	(*ctx)->credentials = talloc_reference(*ctx, credentials);
	(*ctx)->session_info = talloc_reference(*ctx, session_info);
	(*ctx)->get_predefined_key = reg_samba_get_predef;
	
	return WERR_OK;
}