Author: jelmer Date: 2004-10-28 23:06:12 +0000 (Thu, 28 Oct 2004) New Revision: 3340
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3340 Log: Various fixes in the registry code. Implement the EnumKey call in the server. Modified: branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c branches/SAMBA_4_0/source/torture/rpc/winreg.c Changeset: Modified: branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c 2004-10-28 22:58:21 UTC (rev 3339) +++ branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c 2004-10-28 23:06:12 UTC (rev 3340) @@ -191,7 +191,10 @@ 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; Modified: branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c 2004-10-28 22:58:21 UTC (rev 3339) +++ branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c 2004-10-28 23:06:12 UTC (rev 3340) @@ -146,7 +146,10 @@ 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 = { Modified: branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c =================================================================== --- branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c 2004-10-28 22:58:21 UTC (rev 3339) +++ branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c 2004-10-28 23:06:12 UTC (rev 3340) @@ -85,7 +85,7 @@ 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 *); Modified: branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c =================================================================== --- branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c 2004-10-28 22:58:21 UTC (rev 3339) +++ branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c 2004-10-28 23:06:12 UTC (rev 3340) @@ -177,7 +177,15 @@ 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; } Modified: branches/SAMBA_4_0/source/torture/rpc/winreg.c =================================================================== --- branches/SAMBA_4_0/source/torture/rpc/winreg.c 2004-10-28 22:58:21 UTC (rev 3339) +++ branches/SAMBA_4_0/source/torture/rpc/winreg.c 2004-10-28 23:06:12 UTC (rev 3340) @@ -51,6 +51,11 @@ 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 @@ 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 @@ 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;