The branch, master has been updated via f39ef98... Revert "s4:torture - WINREG RPC - reactivate test "SetValueExtended" for s4" via bca3535... s4:registry - "LDB backend" - revert the binary storage of "REG_SZ", "REG_DWORD" and "REG_QWORD" via 6a63c38... s4:ldb_modules/util.c - fix two counter variables to be "unsigned" from 7509b56... share_info.tdb could use non-canonicalized sharenames.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit f39ef9866870d320ae0106dfd09a41c0451e9238 Author: Matthias Dieter Wallnöfer <mwallnoe...@yahoo.de> Date: Tue Mar 23 00:13:26 2010 +0100 Revert "s4:torture - WINREG RPC - reactivate test "SetValueExtended" for s4" This reverts commit 0f2cf82e5e52da6fc71742df7b13c9f372bcf113. Naturally we have to revert this for s4 until a new storage mechanism for binary REG_SZ and REG_*WORD values has been found. commit bca353561ebc67a4e78fdd84f4316259be29820f Author: Matthias Dieter Wallnöfer <mwallnoe...@yahoo.de> Date: Tue Mar 23 00:09:22 2010 +0100 s4:registry - "LDB backend" - revert the binary storage of "REG_SZ", "REG_DWORD" and "REG_QWORD" We agreed that this hack isn't the best of the possible solutions. commit 6a63c38c1258e5a666f11b5b795828ea7bedbf14 Author: Matthias Dieter Wallnöfer <mwallnoe...@yahoo.de> Date: Mon Mar 22 23:53:17 2010 +0100 s4:ldb_modules/util.c - fix two counter variables to be "unsigned" ----------------------------------------------------------------------- Summary of changes: source4/dsdb/samdb/ldb_modules/util.c | 4 +- source4/lib/registry/ldb.c | 129 +++++---------------------------- source4/torture/rpc/winreg.c | 5 +- 3 files changed, 24 insertions(+), 114 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/samdb/ldb_modules/util.c b/source4/dsdb/samdb/ldb_modules/util.c index d04a5f7..f8a6343 100644 --- a/source4/dsdb/samdb/ldb_modules/util.c +++ b/source4/dsdb/samdb/ldb_modules/util.c @@ -379,7 +379,7 @@ int dsdb_module_add(struct ldb_module *module, const struct dsdb_class * get_last_structural_class(const struct dsdb_schema *schema,const struct ldb_message_element *element) { const struct dsdb_class *last_class = NULL; - int i; + unsigned int i; for (i = 0; i < element->num_values; i++){ const struct dsdb_class *tmp_class = dsdb_class_by_lDAPDisplayName_ldb_val(schema, &element->values[i]); @@ -413,7 +413,7 @@ int dsdb_check_single_valued_link(const struct dsdb_attribute *attr, const struct ldb_message_element *el) { bool found_active = false; - int i; + unsigned int i; if (!(attr->ldb_schema_attribute->flags & LDB_ATTR_FLAG_SINGLE_VALUE) || el->num_values < 2) { diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c index 8310b6f..ec0b33a 100644 --- a/source4/lib/registry/ldb.c +++ b/source4/lib/registry/ldb.c @@ -61,22 +61,10 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, case REG_SZ: case REG_EXPAND_SZ: if (val != NULL) { - if (val->data[0] != '\0') { - /* The data should be provided as UTF16 string */ - convert_string_talloc(mem_ctx, CH_UTF8, CH_UTF16, - val->data, val->length, - (void **)&data->data, &data->length, false); - } else { - /* Provide a possibility to store also UTF8 - * REG_SZ/REG_EXPAND_SZ values. This is done - * by adding a '\0' in front of the data */ - data->data = talloc_size(mem_ctx, val->length - 1); - if (data->data != NULL) { - memcpy(data->data, val->data + 1, - val->length - 1); - } - data->length = val->length - 1; - } + /* The data should be provided as UTF16 string */ + convert_string_talloc(mem_ctx, CH_UTF8, CH_UTF16, + val->data, val->length, + (void **)&data->data, &data->length, false); } else { data->data = NULL; data->length = 0; @@ -86,25 +74,13 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, case REG_DWORD: case REG_DWORD_BIG_ENDIAN: if (val != NULL) { - if (val->data[0] != '\0') { - /* The data is a plain DWORD */ - uint32_t tmp = strtoul((char *)val->data, NULL, 0); - data->data = talloc_size(mem_ctx, sizeof(uint32_t)); - if (data->data != NULL) { - SIVAL(data->data, 0, tmp); - } - data->length = sizeof(uint32_t); - } else { - /* Provide a possibility to store also UTF8 - * REG_DWORD values. This is done by adding a - * '\0' in front of the data */ - data->data = talloc_size(mem_ctx, val->length - 1); - if (data->data != NULL) { - memcpy(data->data, val->data + 1, - val->length - 1); - } - data->length = val->length - 1; + /* The data is a plain DWORD */ + uint32_t tmp = strtoul((char *)val->data, NULL, 0); + data->data = talloc_size(mem_ctx, sizeof(uint32_t)); + if (data->data != NULL) { + SIVAL(data->data, 0, tmp); } + data->length = sizeof(uint32_t); } else { data->data = NULL; data->length = 0; @@ -113,25 +89,13 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, case REG_QWORD: if (val != NULL) { - if (val->data[0] != '\0') { - /* The data is a plain QWORD */ - uint64_t tmp = strtoull((char *)val->data, NULL, 0); - data->data = talloc_size(mem_ctx, sizeof(uint64_t)); - if (data->data != NULL) { - SBVAL(data->data, 0, tmp); - } - data->length = sizeof(uint64_t); - } else { - /* Provide a possibility to store also UTF8 - * REG_QWORD values. This is done by adding a - * '\0' in front of the data */ - data->data = talloc_size(mem_ctx, val->length - 1); - if (data->data != NULL) { - memcpy(data->data, val->data + 1, - val->length - 1); - } - data->length = val->length - 1; + /* The data is a plain QWORD */ + uint64_t tmp = strtoull((char *)val->data, NULL, 0); + data->data = talloc_size(mem_ctx, sizeof(uint64_t)); + if (data->data != NULL) { + SBVAL(data->data, 0, tmp); } + data->length = sizeof(uint64_t); } else { data->data = NULL; data->length = 0; @@ -193,8 +157,7 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx, /* Only when the "data.length" is dividable by two try * the charset conversion, otherwise stick with the - * default of the "ret2" variable set to "false" (which - * means binary storage and no conversion) */ + * default of the "ret2" variable set to "false". */ if (data.length % 2 == 0) { /* The data is provided as UTF16 string */ ret2 = convert_string_talloc(mem_ctx, CH_UTF16, CH_UTF8, @@ -202,21 +165,9 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx, (void **)&val->data, &val->length, false); } - if (!ret2) { - /* Provide a possibility to store also binary - * UTF8 REG_SZ/REG_EXPAND_SZ values as fallback - * mechanism. This is done by adding a '\0' in - * front of the data */ - val->data = talloc_size(msg, data.length + 1); - if (val->data == NULL) { - talloc_free(msg); - return NULL; - } - val->data[0] = '\0'; - memcpy(val->data + 1, data.data, data.length); - val->length = data.length + 1; + if (ret2) { + ret = ldb_msg_add_value(msg, "data", val, NULL); } - ret = ldb_msg_add_value(msg, "data", val, NULL); } else { ret = ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL); } @@ -235,27 +186,6 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx, return NULL; } ret = ldb_msg_add_string(msg, "data", conv_str); - } else { - /* Provide a possibility to store also UTF8 - * REG_DWORD values. This is done by adding a - * '\0' in front of the data */ - struct ldb_val *val; - - val = talloc_zero(msg, struct ldb_val); - if (val == NULL) { - talloc_free(msg); - return NULL; - } - - val->data = talloc_size(msg, data.length + 1); - if (val->data == NULL) { - talloc_free(msg); - return NULL; - } - val->data[0] = '\0'; - memcpy(val->data + 1, data.data, data.length); - val->length = data.length + 1; - ret = ldb_msg_add_value(msg, "data", val, NULL); } } else { ret = ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL); @@ -273,27 +203,6 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx, return NULL; } ret = ldb_msg_add_string(msg, "data", conv_str); - } else { - /* Provide a possibility to store also UTF8 - * REG_QWORD values. This is done by adding a - * '\0' in front of the data */ - struct ldb_val *val; - - val = talloc_zero(msg, struct ldb_val); - if (val == NULL) { - talloc_free(msg); - return NULL; - } - - val->data = talloc_size(msg, data.length + 1); - if (val->data == NULL) { - talloc_free(msg); - return NULL; - } - val->data[0] = '\0'; - memcpy(val->data + 1, data.data, data.length); - val->length = data.length + 1; - ret = ldb_msg_add_value(msg, "data", val, NULL); } } else { ret = ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL); diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index 17a76ea..da46c13 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -2032,8 +2032,9 @@ static bool test_SetValue_extended(struct dcerpc_binding_handle *b, }; int t, l; - if (torture_setting_bool(tctx, "samba3", false)) { - torture_skip(tctx, "skipping extended SetValue test against Samba 3"); + if (torture_setting_bool(tctx, "samba3", false) || + torture_setting_bool(tctx, "samba4", false)) { + torture_skip(tctx, "skipping extended SetValue test against Samba"); } torture_comment(tctx, "Testing SetValue (extended formats)\n"); -- Samba Shared Repository