summaryrefslogtreecommitdiff
path: root/source4/lib/registry/reg_backend_rpc.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-12-13 01:37:18 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:07:21 -0500
commit4c202a20fa7008264ad676ffb2238424bd27baf8 (patch)
tree5c48d0afd157679a36273cf31d2e74dd77a00a37 /source4/lib/registry/reg_backend_rpc.c
parent47fa1d33e4a6b9aeaf06ad2c12d9744bdf967bb9 (diff)
downloadsamba-4c202a20fa7008264ad676ffb2238424bd27baf8.tar.gz
samba-4c202a20fa7008264ad676ffb2238424bd27baf8.tar.bz2
samba-4c202a20fa7008264ad676ffb2238424bd27baf8.zip
r4167: Fix CreateKey
Support CreateKey in the RPC registry backend (This used to be commit ad8d9e6f73619332d93c38a1879233e199e8ba25)
Diffstat (limited to 'source4/lib/registry/reg_backend_rpc.c')
-rw-r--r--source4/lib/registry/reg_backend_rpc.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/source4/lib/registry/reg_backend_rpc.c b/source4/lib/registry/reg_backend_rpc.c
index 16516d25b7..b14b67d609 100644
--- a/source4/lib/registry/reg_backend_rpc.c
+++ b/source4/lib/registry/reg_backend_rpc.c
@@ -259,7 +259,32 @@ static WERROR rpc_get_subkey_by_index(TALLOC_CTX *mem_ctx, struct registry_key *
static WERROR rpc_add_key(TALLOC_CTX *mem_ctx, struct registry_key *parent, const char *name, uint32_t access_mask, SEC_DESC *sec, struct registry_key **key)
{
- return WERR_NOT_SUPPORTED;
+ NTSTATUS status;
+ struct winreg_CreateKey r;
+
+ init_winreg_String(&r.in.key, name);
+ init_winreg_String(&r.in.class, NULL);
+
+ r.in.handle = parent->backend_data;
+ r.out.handle = talloc_p(mem_ctx, struct policy_handle);
+ r.in.options = 0;
+ r.in.access_mask = access_mask;
+ r.in.sec_desc = NULL;
+
+ status = dcerpc_winreg_CreateKey((struct dcerpc_pipe *)(parent->hive->backend_data), mem_ctx, &r);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("CreateKey failed - %s\n", nt_errstr(status)));
+ return ntstatus_to_werror(status);
+ }
+
+ if (W_ERROR_IS_OK(r.out.result)) {
+ *key = talloc_p(mem_ctx, struct registry_key);
+ (*key)->name = talloc_strdup(*key, name);
+ (*key)->backend_data = r.out.handle;
+ }
+
+ return r.out.result;
}
static WERROR rpc_query_key(struct registry_key *k)