Author: jelmer Date: 2007-08-04 18:15:47 +0000 (Sat, 04 Aug 2007) New Revision: 24215
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24215 Log: Make ldb pass the current tests. Modified: branches/4.0-regwrite/ branches/4.0-regwrite/source/lib/registry/ldb.c branches/4.0-regwrite/source/lib/registry/tests/hive.c Changeset: Property changes on: branches/4.0-regwrite ___________________________________________________________________ Name: bzr:revision-info - timestamp: Tue 2007-06-12 22:08:26.114000082 +0200 committer: Jelmer Vernooij <[EMAIL PROTECTED]> properties: branch-nick: 4.0-regwrite rebase-of: [EMAIL PROTECTED] + timestamp: Tue 2007-06-12 22:27:36.690999985 +0200 committer: Jelmer Vernooij <[EMAIL PROTECTED]> properties: branch-nick: 4.0-regwrite rebase-of: [EMAIL PROTECTED] Name: bzr:revision-id:v3-trunk0 - 11140 [EMAIL PROTECTED] 11142 [EMAIL PROTECTED] 11143 [EMAIL PROTECTED] 11144 [EMAIL PROTECTED] 11145 [EMAIL PROTECTED] 11146 [EMAIL PROTECTED] 11147 [EMAIL PROTECTED] 11148 [EMAIL PROTECTED] 11149 [EMAIL PROTECTED] 11150 [EMAIL PROTECTED] 11151 [EMAIL PROTECTED] 11152 [EMAIL PROTECTED] 11153 [EMAIL PROTECTED] 11154 [EMAIL PROTECTED] 11155 [EMAIL PROTECTED] 11156 [EMAIL PROTECTED] 11157 [EMAIL PROTECTED] 11158 [EMAIL PROTECTED] 11159 [EMAIL PROTECTED] 11160 [EMAIL PROTECTED] 11161 [EMAIL PROTECTED] 11162 [EMAIL PROTECTED] 11163 [EMAIL PROTECTED] 11164 [EMAIL PROTECTED] 11165 [EMAIL PROTECTED] 11166 [EMAIL PROTECTED] 11167 [EMAIL PROTECTED] 11168 [EMAIL PROTECTED] 11169 [EMAIL PROTECTED] 11170 [EMAIL PROTECTED] 11171 [EMAIL PROTECTED] 11172 [EMAIL PROTECTED] 11173 [EMAIL PROTECTED] 11174 [EMAIL PROTECTED] 11175 [EMAIL PROTECTED] 11176 [EMAIL PROTECTED] 11177 [EMAIL PROTECTED] 11178 [EMAIL PROTECTED] 11179 [EMAIL PROTECTED] 11180 [EMAIL PROTECTED] 11181 [EMAIL PROTECTED] 11182 [EMAIL PROTECTED] 11183 [EMAIL PROTECTED] 11184 [EMAIL PROTECTED] 11185 [EMAIL PROTECTED] 11186 [EMAIL PROTECTED] 11187 [EMAIL PROTECTED] + 11140 [EMAIL PROTECTED] 11142 [EMAIL PROTECTED] 11143 [EMAIL PROTECTED] 11144 [EMAIL PROTECTED] 11145 [EMAIL PROTECTED] 11146 [EMAIL PROTECTED] 11147 [EMAIL PROTECTED] 11148 [EMAIL PROTECTED] 11149 [EMAIL PROTECTED] 11150 [EMAIL PROTECTED] 11151 [EMAIL PROTECTED] 11152 [EMAIL PROTECTED] 11153 [EMAIL PROTECTED] 11154 [EMAIL PROTECTED] 11155 [EMAIL PROTECTED] 11156 [EMAIL PROTECTED] 11157 [EMAIL PROTECTED] 11158 [EMAIL PROTECTED] 11159 [EMAIL PROTECTED] 11160 [EMAIL PROTECTED] 11161 [EMAIL PROTECTED] 11162 [EMAIL PROTECTED] 11163 [EMAIL PROTECTED] 11164 [EMAIL PROTECTED] 11165 [EMAIL PROTECTED] 11166 [EMAIL PROTECTED] 11167 [EMAIL PROTECTED] 11168 [EMAIL PROTECTED] 11169 [EMAIL PROTECTED] 11170 [EMAIL PROTECTED] 11171 [EMAIL PROTECTED] 11172 [EMAIL PROTECTED] 11173 [EMAIL PROTECTED] 11174 [EMAIL PROTECTED] 11175 [EMAIL PROTECTED] 11176 [EMAIL PROTECTED] 11177 [EMAIL PROTECTED] 11178 [EMAIL PROTECTED] 11179 [EMAIL PROTECTED] 11180 [EMAIL PROTECTED] 11181 [EMAIL PROTECTED] 11182 [EMAIL PROTECTED] 11183 [EMAIL PROTECTED] 11184 [EMAIL PROTECTED] 11185 [EMAIL PROTECTED] 11186 [EMAIL PROTECTED] 11187 [EMAIL PROTECTED] 11188 [EMAIL PROTECTED] Modified: branches/4.0-regwrite/source/lib/registry/ldb.c =================================================================== --- branches/4.0-regwrite/source/lib/registry/ldb.c 2007-08-04 18:15:37 UTC (rev 24214) +++ branches/4.0-regwrite/source/lib/registry/ldb.c 2007-08-04 18:15:47 UTC (rev 24215) @@ -25,6 +25,8 @@ #include "db_wrap.h" #include "librpc/gen_ndr/winreg.h" +static struct hive_operations reg_backend_ldb; + struct ldb_key_data { struct hive_key key; @@ -34,7 +36,8 @@ int subkey_count, value_count; }; -static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char **name, uint32_t *type, DATA_BLOB *data) +static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, struct ldb_message *msg, const char **name, + uint32_t *type, DATA_BLOB *data) { const struct ldb_val *val; *name = talloc_strdup(mem_ctx, ldb_msg_find_attr_as_string(msg, "value", NULL)); @@ -45,7 +48,8 @@ { case REG_SZ: case REG_EXPAND_SZ: - data->length = convert_string_talloc(mem_ctx, CH_UTF8, CH_UTF16, val->data, val->length, (void **)&data->data); + data->length = convert_string_talloc(mem_ctx, CH_UTF8, CH_UTF16, + val->data, val->length, (void **)&data->data); break; case REG_DWORD: { @@ -73,7 +77,8 @@ switch (type) { case REG_SZ: case REG_EXPAND_SZ: - val.length = convert_string_talloc(mem_ctx, CH_UTF16, CH_UTF8, (void *)data.data, data.length, (void **)&val.data); + val.length = convert_string_talloc(mem_ctx, CH_UTF16, CH_UTF8, + (void *)data.data, data.length, (void **)&val.data); ldb_msg_add_value(msg, "data", &val, NULL); break; @@ -130,7 +135,7 @@ return NULL; } - while(mypath) { + while (mypath) { char *keyname; begin = strrchr(mypath, '\\'); @@ -197,7 +202,8 @@ return WERR_OK; } -static WERROR ldb_get_value_by_id(TALLOC_CTX *mem_ctx, const struct hive_key *k, int idx, const char **name, uint32_t *data_type, DATA_BLOB *data) +static WERROR ldb_get_value_by_id(TALLOC_CTX *mem_ctx, const struct hive_key *k, int idx, + const char **name, uint32_t *data_type, DATA_BLOB *data) { struct ldb_key_data *kd = talloc_get_type(k, struct ldb_key_data); struct ldb_context *c = kd->ldb; @@ -280,6 +286,7 @@ ldb_set_debug_stderr(wrap); kd = talloc_zero(parent_ctx, struct ldb_key_data); + kd->key.ops = ®_backend_ldb; kd->ldb = wrap; talloc_set_destructor (kd, reg_close_ldb_key); kd->dn = ldb_dn_new(kd, wrap, "hive=NONE"); @@ -289,8 +296,8 @@ return WERR_OK; } -static WERROR ldb_add_key (TALLOC_CTX *mem_ctx, struct hive_key *parent, - const char *name, uint32_t access_mask, +static WERROR ldb_add_key (TALLOC_CTX *mem_ctx, const struct hive_key *parent, + const char *name, const char *classname, struct security_descriptor *sd, struct hive_key **newkey) { @@ -320,7 +327,7 @@ return WERR_OK; } -static WERROR ldb_del_key (struct hive_key *key, const char *child) +static WERROR ldb_del_key (const struct hive_key *key, const char *child) { int ret; struct ldb_key_data *parentkd = talloc_get_type(key, struct ldb_key_data); @@ -333,7 +340,9 @@ talloc_free(childdn); - if (ret < 0) { + if (ret == LDB_ERR_NO_SUCH_OBJECT) { + return WERR_NOT_FOUND; + } else if (ret < 0) { DEBUG(1, ("ldb_del_key: %s\n", ldb_errstring(parentkd->ldb))); return WERR_FOOBAR; } @@ -390,6 +399,29 @@ return WERR_OK; } +static WERROR ldb_get_key_info(TALLOC_CTX *mem_ctx, + const struct hive_key *key, + const char **classname, + uint32_t *num_subkeys, + uint32_t *num_values, + NTTIME *last_change_time) +{ + /* FIXME */ + if (classname != NULL) + *classname = NULL; + + if (num_subkeys != NULL) + *num_subkeys = 0; + + if (num_values != NULL) + *num_values = 0; + + if (last_change_time != NULL) + *last_change_time = 0; + + return WERR_OK; +} + static struct hive_operations reg_backend_ldb = { .name = "ldb", .add_key = ldb_add_key, @@ -399,4 +431,5 @@ .enum_key = ldb_get_subkey_by_id, .set_value = ldb_set_value, .delete_value = ldb_del_value, + .get_key_info = ldb_get_key_info, }; Modified: branches/4.0-regwrite/source/lib/registry/tests/hive.c =================================================================== --- branches/4.0-regwrite/source/lib/registry/tests/hive.c 2007-08-04 18:15:37 UTC (rev 24214) +++ branches/4.0-regwrite/source/lib/registry/tests/hive.c 2007-08-04 18:15:47 UTC (rev 24215) @@ -91,7 +91,6 @@ static bool hive_setup_dir(struct torture_context *tctx, void **data) { - struct hive_key *key; WERROR error; @@ -106,6 +105,23 @@ return true; } +static bool hive_setup_ldb(struct torture_context *tctx, void **data) +{ + struct hive_key *key; + WERROR error; + + error = reg_open_ldb_file(tctx, "bla-ldb", NULL, NULL, &key); + if (!W_ERROR_IS_OK(error)) { + fprintf(stderr, "Unable to initialize ldb hive\n"); + return false; + } + + *data = key; + + return true; + +} + static bool test_dir_refuses_null_location(struct torture_context *tctx) { torture_assert_werr_equal(tctx, WERR_INVALID_PARAM, @@ -127,5 +143,9 @@ tcase = torture_suite_add_tcase(suite, "dir"); torture_tcase_set_fixture(tcase, hive_setup_dir, NULL); tcase_add_tests(tcase); + + tcase = torture_suite_add_tcase(suite, "ldb"); + torture_tcase_set_fixture(tcase, hive_setup_ldb, NULL); + tcase_add_tests(tcase); return suite; }
