Print trustAuthOutgoing and trustAuthIncoming in RPC-DSSYNC
authorAndrew Bartlett <abartlet@samba.org>
Thu, 31 Jul 2008 11:23:48 +0000 (21:23 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 31 Jul 2008 11:23:48 +0000 (21:23 +1000)
source/torture/rpc/dssync.c

index e8c67b46c107c1d60807874a5d46eb6b4fed3040..d340543f0a0a8e340d5dfabf00b662f89fe17ed4 100644 (file)
@@ -474,6 +474,9 @@ static void test_analyse_objects(struct torture_context *tctx,
                        DATA_BLOB *enc_data = NULL;
                        DATA_BLOB plain_data;
                        struct drsuapi_DsReplicaAttribute *attr;
+                       ndr_pull_flags_fn_t pull_fn = NULL;
+                       ndr_print_fn_t print_fn = NULL;
+                       void *ptr = NULL;
                        attr = &cur->object.attribute_ctr.attributes[i];
 
                        switch (attr->attid) {
@@ -495,6 +498,9 @@ static void test_analyse_objects(struct torture_context *tctx,
                                break;
                        case DRSUAPI_ATTRIBUTE_supplementalCredentials:
                                name    = "supplementalCredentials";
+                               pull_fn = (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob;
+                               print_fn = (ndr_print_fn_t)ndr_print_supplementalCredentialsBlob;
+                               ptr = talloc(ctx, struct supplementalCredentialsBlob);
                                break;
                        case DRSUAPI_ATTRIBUTE_priorValue:
                                name    = "priorValue";
@@ -504,9 +510,15 @@ static void test_analyse_objects(struct torture_context *tctx,
                                break;
                        case DRSUAPI_ATTRIBUTE_trustAuthOutgoing:
                                name    = "trustAuthOutgoing";
+                               pull_fn = (ndr_pull_flags_fn_t)ndr_pull_trustAuthInOutBlob;
+                               print_fn = (ndr_print_fn_t)ndr_print_trustAuthInOutBlob;
+                               ptr = talloc(ctx, struct trustAuthInOutBlob);
                                break;
                        case DRSUAPI_ATTRIBUTE_trustAuthIncoming:
                                name    = "trustAuthIncoming";
+                               pull_fn = (ndr_pull_flags_fn_t)ndr_pull_trustAuthInOutBlob;
+                               print_fn = (ndr_print_fn_t)ndr_print_trustAuthInOutBlob;
+                               ptr = talloc(ctx, struct trustAuthInOutBlob);
                                break;
                        case DRSUAPI_ATTRIBUTE_initialAuthOutgoing:
                                name    = "initialAuthOutgoing";
@@ -537,7 +549,6 @@ static void test_analyse_objects(struct torture_context *tctx,
                                    name, (long)enc_data->length, (long)plain_data.length));
                        if (plain_data.length) {
                                enum ndr_err_code ndr_err;
-                               struct supplementalCredentialsBlob scb;
                                dump_data(0, plain_data.data, plain_data.length);
                                if (save_values_dir) {
                                        char *fname;
@@ -554,15 +565,20 @@ static void test_analyse_objects(struct torture_context *tctx,
                                        talloc_free(fname);
                                }
 
-                               ndr_err = ndr_pull_struct_blob_all(&plain_data, tctx,
-                                          lp_iconv_convenience(tctx->lp_ctx), &scb,
-                                          (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob);
-                               if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-                                       NDR_PRINT_DEBUG(supplementalCredentialsBlob, &scb);
+                               if (pull_fn) {
+                                       ndr_err = ndr_pull_struct_blob_all(&plain_data, ptr,
+                                                                          lp_iconv_convenience(tctx->lp_ctx), ptr,
+                                                                          pull_fn);
+                                       if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+                                               ndr_print_debug(print_fn, name, ptr);
+                                       } else {
+                                               DEBUG(0, ("Failed to decode %s\n", name));
+                                       }
                                }
                        } else {
                                dump_data(0, enc_data->data, enc_data->length);
                        }
+                       talloc_free(ptr);
                }
        }
 }