[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