mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r3340: Various fixes in the registry code. Implement the EnumKey call
in the server.
This commit is contained in:
parent
42844a4e34
commit
da65a248c2
@ -191,7 +191,10 @@ WERROR reg_import_hive(struct registry_context *h, const char *backend, const ch
|
||||
|
||||
if(!W_ERROR_IS_OK(werr)) return werr;
|
||||
|
||||
if(!ret->root) return WERR_GENERAL_FAILURE;
|
||||
if(!ret->root) {
|
||||
DEBUG(0, ("Backend %s didn't provide root key!\n", backend));
|
||||
return WERR_GENERAL_FAILURE;
|
||||
}
|
||||
|
||||
ret->root->hive = ret;
|
||||
ret->root->name = NULL;
|
||||
|
@ -146,7 +146,10 @@ static WERROR ldb_open_hive(TALLOC_CTX *mem_ctx, struct registry_hive *hive, str
|
||||
ldb_set_debug_stderr(c);
|
||||
hive->backend_data = c;
|
||||
|
||||
return ldb_open_key(mem_ctx, hive, "", k);
|
||||
hive->root = talloc_zero_p(mem_ctx, struct registry_key);
|
||||
hive->root->name = talloc_strdup(mem_ctx, "");
|
||||
|
||||
return WERR_OK;
|
||||
}
|
||||
|
||||
static struct registry_operations reg_backend_ldb = {
|
||||
|
@ -85,7 +85,7 @@ struct {
|
||||
|
||||
static WERROR rpc_query_key(struct registry_key *k);
|
||||
|
||||
WERROR rpc_list_hives (TALLOC_CTX *mem_ctx, const char *location, const char *credentials, char ***hives)
|
||||
static WERROR rpc_list_hives (TALLOC_CTX *mem_ctx, const char *location, const char *credentials, char ***hives)
|
||||
{
|
||||
int i = 0;
|
||||
*hives = talloc_p(mem_ctx, char *);
|
||||
|
@ -177,7 +177,15 @@ static WERROR winreg_EnumKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem
|
||||
h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
|
||||
DCESRV_CHECK_HANDLE(h);
|
||||
|
||||
key = h->data;
|
||||
r->out.result = reg_key_get_subkey_by_index(mem_ctx, (struct registry_key *)h->data, r->in.enum_index, &key);
|
||||
|
||||
if (W_ERROR_IS_OK(r->out.result)) {
|
||||
r->out.key_name_len = strlen(key->name);
|
||||
r->out.out_name = talloc_zero_p(mem_ctx, struct winreg_EnumKeyNameResponse);
|
||||
r->out.out_name->name = key->name;
|
||||
r->out.class = talloc_zero_p(mem_ctx, struct winreg_String);
|
||||
r->out.last_changed_time = talloc_zero_p(mem_ctx, struct winreg_Time);
|
||||
}
|
||||
|
||||
return WERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
@ -51,6 +51,11 @@ static BOOL test_GetVersion(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!W_ERROR_IS_OK(r.out.result)) {
|
||||
printf("GetVersion failed - %s\n", win_errstr(r.out.result));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
@ -106,6 +111,11 @@ static BOOL test_CloseKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!W_ERROR_IS_OK(r.out.result)) {
|
||||
printf("CloseKey failed - %s\n", win_errstr(r.out.result));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
@ -228,6 +238,8 @@ static BOOL test_EnumKey(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
struct winreg_Time tm;
|
||||
NTSTATUS status;
|
||||
|
||||
printf("Testing EnumKey\n\n");
|
||||
|
||||
r.in.handle = handle;
|
||||
r.in.enum_index = 0;
|
||||
r.in.key_name_len = r.out.key_name_len = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user