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 <mwallnoe...@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 <mwallnoe...@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 <mwallnoe...@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

Reply via email to