[SCM] Samba Shared Repository - branch master updated
Matthias Dieter Wallnöfer
mdw at samba.org
Tue Mar 16 02:01:26 MDT 2010
The branch, master has been updated
via 19aa075... s4:registry - check also for other registry value types in the generic test
via b7c1444... s4:registry - add a test for the "REG_DWORD_BIG_ENDIAN" datatype
via 2f686d8... s4:registry - introduce the "REG_DWORD_BIG_ENDIAN" datatype
from 559575f... s4:dsdb/kcc/*.c - fix up wrong typed counters
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 19aa07564228f8018d5c7f3bdfcd3d7c311f08b1
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date: Mon Mar 15 23:18:44 2010 +0100
s4:registry - check also for other registry value types in the generic test
commit b7c1444683d6fd63c29098b41d3ad6f792139136
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date: Mon Mar 15 22:46:20 2010 +0100
s4:registry - add a test for the "REG_DWORD_BIG_ENDIAN" datatype
commit 2f686d8523c0978630c375d377afe23fe07cbf19
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date: Mon Mar 15 18:55:33 2010 +0100
s4:registry - introduce the "REG_DWORD_BIG_ENDIAN" datatype
It's like the normal REG_DWORD type but the byte order swapped
-----------------------------------------------------------------------
Summary of changes:
source4/lib/registry/ldb.c | 14 +++++++++++++-
source4/lib/registry/tests/generic.c | 30 ++++++++++++++++++++++++++++++
source4/lib/registry/util.c | 16 +++++++++++++---
3 files changed, 56 insertions(+), 4 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c
index 6676193..83905f3 100644
--- a/source4/lib/registry/ldb.c
+++ b/source4/lib/registry/ldb.c
@@ -84,6 +84,7 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx,
break;
case REG_DWORD:
+ case REG_DWORD_BIG_ENDIAN:
if (val != NULL) {
if (val->data[0] != '\0') {
/* The data is a plain DWORD */
@@ -221,11 +222,22 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx,
break;
case REG_DWORD:
+ case REG_DWORD_BIG_ENDIAN:
if ((data.length > 0) && (data.data != NULL)) {
if (data.length == sizeof(uint32_t)) {
char *conv_str;
- conv_str = talloc_asprintf(msg, "0x%8.8x", IVAL(data.data, 0));
+ if (type == REG_DWORD) {
+ conv_str = talloc_asprintf(msg, "0x%8.8x",
+ IVAL(data.data, 0));
+ } else {
+ conv_str = talloc_asprintf(msg, "0x%2.2x%2.2x%2.2x%2.2x",
+ CVAL(data.data, 0),
+ CVAL(data.data, 1),
+ CVAL(data.data, 2),
+ CVAL(data.data, 3));
+ }
+
if (conv_str == NULL) {
talloc_free(msg);
return NULL;
diff --git a/source4/lib/registry/tests/generic.c b/source4/lib/registry/tests/generic.c
index a881c3d..1e8effa 100644
--- a/source4/lib/registry/tests/generic.c
+++ b/source4/lib/registry/tests/generic.c
@@ -31,10 +31,28 @@ struct torture_suite *torture_registry_diff(TALLOC_CTX *mem_ctx);
static bool test_str_regtype(struct torture_context *ctx)
{
+ torture_assert_str_equal(ctx, str_regtype(0),
+ "REG_NONE", "REG_NONE failed");
torture_assert_str_equal(ctx, str_regtype(1),
"REG_SZ", "REG_SZ failed");
+ torture_assert_str_equal(ctx, str_regtype(2),
+ "REG_EXPAND_SZ", "REG_EXPAND_SZ failed");
+ torture_assert_str_equal(ctx, str_regtype(3),
+ "REG_BINARY", "REG_BINARY failed");
torture_assert_str_equal(ctx, str_regtype(4),
"REG_DWORD", "REG_DWORD failed");
+ torture_assert_str_equal(ctx, str_regtype(5),
+ "REG_DWORD_BIG_ENDIAN", "REG_DWORD_BIG_ENDIAN failed");
+ torture_assert_str_equal(ctx, str_regtype(6),
+ "REG_LINK", "REG_LINK failed");
+ torture_assert_str_equal(ctx, str_regtype(7),
+ "REG_MULTI_SZ", "REG_MULTI_SZ failed");
+ torture_assert_str_equal(ctx, str_regtype(8),
+ "REG_RESOURCE_LIST", "REG_RESOURCE_LIST failed");
+ torture_assert_str_equal(ctx, str_regtype(9),
+ "REG_FULL_RESOURCE_DESCRIPTOR", "REG_FULL_RESOURCE_DESCRIPTOR failed");
+ torture_assert_str_equal(ctx, str_regtype(10),
+ "REG_RESOURCE_REQUIREMENTS_LIST", "REG_RESOURCE_REQUIREMENTS_LIST failed");
torture_assert_str_equal(ctx, str_regtype(11),
"REG_QWORD", "REG_QWORD failed");
@@ -52,6 +70,16 @@ static bool test_reg_val_data_string_dword(struct torture_context *ctx)
return true;
}
+static bool test_reg_val_data_string_dword_big_endian(struct torture_context *ctx)
+{
+ uint32_t d = 0x20;
+ DATA_BLOB db = { (uint8_t *)&d, sizeof(d) };
+ torture_assert_str_equal(ctx, "0x20000000",
+ reg_val_data_string(ctx, lp_iconv_convenience(ctx->lp_ctx), REG_DWORD_BIG_ENDIAN, db),
+ "dword failed");
+ return true;
+}
+
static bool test_reg_val_data_string_qword(struct torture_context *ctx)
{
uint64_t d = 0x20;
@@ -131,6 +159,8 @@ struct torture_suite *torture_registry(TALLOC_CTX *mem_ctx)
test_str_regtype);
torture_suite_add_simple_test(suite, "reg_val_data_string dword",
test_reg_val_data_string_dword);
+ torture_suite_add_simple_test(suite, "reg_val_data_string dword_big_endian",
+ test_reg_val_data_string_dword_big_endian);
torture_suite_add_simple_test(suite, "reg_val_data_string qword",
test_reg_val_data_string_qword);
torture_suite_add_simple_test(suite, "reg_val_data_string sz",
diff --git a/source4/lib/registry/util.c b/source4/lib/registry/util.c
index fd75f91..5621290 100644
--- a/source4/lib/registry/util.c
+++ b/source4/lib/registry/util.c
@@ -85,9 +85,18 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx,
}
break;
case REG_DWORD:
+ case REG_DWORD_BIG_ENDIAN:
if (data.length == sizeof(uint32_t)) {
- ret = talloc_asprintf(mem_ctx, "0x%8.8x",
- IVAL(data.data, 0));
+ if (type == REG_DWORD) {
+ ret = talloc_asprintf(mem_ctx, "0x%8.8x",
+ IVAL(data.data, 0));
+ } else {
+ ret = talloc_asprintf(mem_ctx, "0x%2.2x%2.2x%2.2x%2.2x",
+ CVAL(data.data, 0),
+ CVAL(data.data, 1),
+ CVAL(data.data, 2),
+ CVAL(data.data, 3));
+ }
}
break;
case REG_QWORD:
@@ -153,7 +162,8 @@ _PUBLIC_ bool reg_string_to_val(TALLOC_CTX *mem_ctx,
(void **)&data->data,
&data->length, false);
break;
- case REG_DWORD: {
+ case REG_DWORD:
+ case REG_DWORD_BIG_ENDIAN: {
uint32_t tmp = strtol(data_str, NULL, 0);
*data = data_blob_talloc(mem_ctx, NULL, sizeof(uint32_t));
SIVAL(data->data, 0, tmp);
--
Samba Shared Repository
More information about the samba-cvs
mailing list