summaryrefslogtreecommitdiff
path: root/source4/rpc_server/winreg
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server/winreg')
-rw-r--r--source4/rpc_server/winreg/rpc_winreg.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c
index b4b3e843d0..5c2f93d2e7 100644
--- a/source4/rpc_server/winreg/rpc_winreg.c
+++ b/source4/rpc_server/winreg/rpc_winreg.c
@@ -38,15 +38,13 @@
enum handle_types { HTYPE_REGKEY, HTYPE_REGVAL };
struct _privatedata {
- REG_HANDLE *registry;
+ struct registry_context *registry;
};
/* this function is called when the client disconnects the endpoint */
static void winreg_unbind(struct dcesrv_connection *dc, const struct dcesrv_interface *di)
{
- struct _privatedata *data = dc->private;
- if (data) reg_free(data->registry);
}
static NTSTATUS winreg_bind(struct dcesrv_call_state *dc, const struct dcesrv_interface *di)
@@ -54,7 +52,7 @@ static NTSTATUS winreg_bind(struct dcesrv_call_state *dc, const struct dcesrv_in
struct _privatedata *data;
WERROR error;
data = talloc(dc->conn->mem_ctx, sizeof(struct _privatedata));
- error = reg_open("dir", "/tmp/reg", "", &data->registry);
+ error = reg_open(&data->registry, "dir", "/tmp/reg", "");
if(!W_ERROR_IS_OK(error)) return werror_to_ntstatus(error);
dc->conn->private = data;
return NT_STATUS_OK;
@@ -65,17 +63,16 @@ static NTSTATUS winreg_bind(struct dcesrv_call_state *dc, const struct dcesrv_in
#define func_winreg_OpenHive(k,n) static WERROR winreg_Open ## k (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct winreg_Open ## k *r) \
{ \
- /*struct _privatedata *data = dce_call->conn->private;*/ \
- /*REG_KEY *root = reg_get_root(data->registry);*/ \
- REG_KEY *k /*= reg_open_key(root, n)*/; \
- if(!k) { \
- return WERR_BADFILE; \
- } else { \
- struct dcesrv_handle *h = dcesrv_handle_new(dce_call->conn, HTYPE_REGKEY); \
- DCESRV_CHECK_HANDLE(h); \
- h->data = k; \
- r->out.handle = &h->wire_handle; \
- } \
+ struct _privatedata *data = dce_call->conn->private; \
+ struct registry_key *root; \
+ struct dcesrv_handle *h; \
+ WERROR error = reg_get_hive(data->registry, n, &root); \
+ if(!W_ERROR_IS_OK(error)) return error; \
+ \
+ h = dcesrv_handle_new(dce_call->conn, HTYPE_REGKEY); \
+ DCESRV_CHECK_HANDLE(h); \
+ h->data = root; \
+ r->out.handle = &h->wire_handle; \
return WERR_OK; \
}
@@ -99,7 +96,6 @@ static WERROR winreg_CloseKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
DCESRV_CHECK_HANDLE(h);
- reg_key_free((REG_KEY *)h->data);
dcesrv_handle_destroy(dce_call->conn, h);
return WERR_OK;
@@ -114,7 +110,7 @@ static WERROR winreg_CreateKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
{
struct dcesrv_handle *h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
WERROR error;
- REG_KEY *parent;
+ struct registry_key *parent;
DCESRV_CHECK_HANDLE(h);
@@ -122,7 +118,7 @@ static WERROR winreg_CreateKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
error = reg_key_add_name_recursive(parent, r->in.key.name);
if(W_ERROR_IS_OK(error)) {
struct dcesrv_handle *newh = dcesrv_handle_new(dce_call->conn, HTYPE_REGKEY);
- error = reg_open_key(parent, r->in.key.name, (REG_KEY **)&newh->data);
+ error = reg_open_key(parent->hive->reg_ctx->mem_ctx, parent, r->in.key.name, (struct registry_key **)&newh->data);
if(W_ERROR_IS_OK(error)) r->out.handle = &newh->wire_handle;
else dcesrv_handle_destroy(dce_call->conn, newh);
}
@@ -138,13 +134,13 @@ static WERROR winreg_DeleteKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
struct winreg_DeleteKey *r)
{
struct dcesrv_handle *h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
- REG_KEY *parent, *key;
+ struct registry_key *parent, *key;
WERROR result;
DCESRV_CHECK_HANDLE(h);
parent = h->data;
- result = reg_open_key(parent, r->in.key.name, &key);
+ result = reg_open_key(parent->hive->reg_ctx->mem_ctx, parent, r->in.key.name, &key);
if (W_ERROR_IS_OK(result)) {
return reg_key_del(key);
@@ -171,7 +167,7 @@ static WERROR winreg_EnumKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
struct winreg_EnumKey *r)
{
struct dcesrv_handle *h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
- REG_KEY *key;
+ struct registry_key *key;
DCESRV_CHECK_HANDLE(h);
@@ -238,7 +234,7 @@ static WERROR winreg_OpenKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
struct winreg_OpenKey *r)
{
struct dcesrv_handle *h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
- REG_KEY *k, *subkey;
+ struct registry_key *k, *subkey;
WERROR result;
DCESRV_CHECK_HANDLE(h);
@@ -246,7 +242,7 @@ static WERROR winreg_OpenKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
k = h->data;
- result = reg_open_key(k, r->in.keyname.name, &subkey);
+ result = reg_open_key(k->hive->reg_ctx->mem_ctx, k, r->in.keyname.name, &subkey);
if (W_ERROR_IS_OK(result)) {
h->data = subkey;
r->out.handle = &h->wire_handle;