From cee01274b2c96e00494cc12b63dadf8caafbc560 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 17 Dec 2024 14:40:32 +0100 Subject: [PATCH] s4:torture/ndr: add a ForestTrustInfo ndr test with FOREST_TRUST_SCANNER_INFO Signed-off-by: Stefan Metzmacher Reviewed-by: Jennifer Sutton --- source4/torture/ndr/drsblobs.c | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/source4/torture/ndr/drsblobs.c b/source4/torture/ndr/drsblobs.c index 0ef2d95056b..070c51546c6 100644 --- a/source4/torture/ndr/drsblobs.c +++ b/source4/torture/ndr/drsblobs.c @@ -61,6 +61,76 @@ static bool forest_trust_info_check_out(struct torture_context *tctx, return true; } +static const char *forest_trust_info_data_out2 = + "AQAAAAUAAAAfAAAAAAAAALpM2wE/1ICrAA4AAAB3NGVkb20tbD" + "QuYmFzZUgAAAAAAAAAukzbAT/UgKsCGAAAAAEEAAAAAAAFFQAAAFWTkhD0sKbKlkeXVg4AAAB3NGV" + "kb20tbDQuYmFzZQkAAABXNEVET00tTDQiAAAAAQAAALtM2wFbRoxWABEAAAB3NGVkb20tbDQucHJp" + "dmF0ZSEAAAABAAAAu0zbAVtGjFYAEAAAAHc0ZWRvbS1sNC5wdWJsaWM1AAAAAAAAALpM2wH9xHHPB" + "CQAAAAEAAAAAA4AAAB3NGVkb20tbDQuYmFzZQkAAABXNEVET00tTDQ="; + +static bool forest_trust_info_check_out2(struct torture_context *tctx, + struct ForestTrustInfo *r) +{ + const struct ForestTrustInfoRecord *rec = NULL; + const struct ForestTrustString *n = NULL; + const struct ForestTrustDataDomainInfo *d = NULL; + const struct ForestTrustDataBinaryData *b = NULL; + + torture_assert_int_equal(tctx, r->version, 1, "version"); + torture_assert_int_equal(tctx, r->count, 5, "count"); + + torture_assert_int_equal(tctx, r->records[0].record_size, 0x0000001f, "record size"); + rec = &r->records[0].record; + torture_assert_int_equal(tctx, rec->flags, 0, "record flags"); + torture_assert_u64_equal(tctx, rec->timestamp, 0xAB80D43F01DB4CBAULL, "record timestamp"); + torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME, "record type"); + n = &rec->data.name; + torture_assert_int_equal(tctx, n->size, 14, "record name size"); + torture_assert_str_equal(tctx, n->string, "w4edom-l4.base", "record name string"); + + torture_assert_int_equal(tctx, r->records[1].record_size, 0x00000048, "record size"); + rec = &r->records[1].record; + torture_assert_int_equal(tctx, rec->flags, 0, "record flags"); + torture_assert_u64_equal(tctx, rec->timestamp, 0xAB80D43F01DB4CBAULL, "record timestamp"); + torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_DOMAIN_INFO, "record type"); + d = &rec->data.info; + torture_assert_int_equal(tctx, d->sid_size, 0x00000018, "record info sid_size"); + torture_assert_sid_equal(tctx, &d->sid, + dom_sid_parse_talloc(tctx, "S-1-5-21-278041429-3399921908-1452754838"), "record info sid"); + torture_assert_int_equal(tctx, d->dns_name.size, 14, "record name size"); + torture_assert_str_equal(tctx, d->dns_name.string, "w4edom-l4.base", "record info dns_name string"); + torture_assert_int_equal(tctx, d->netbios_name.size, 9, "record info netbios_name size"); + torture_assert_str_equal(tctx, d->netbios_name.string, "W4EDOM-L4", "record info netbios_name string"); + + torture_assert_int_equal(tctx, r->records[2].record_size, 0x00000022, "record size"); + rec = &r->records[2].record; + torture_assert_int_equal(tctx, rec->flags, LSA_TLN_DISABLED_NEW, "record flags"); + torture_assert_u64_equal(tctx, rec->timestamp, 0x568C465B01DB4CBBULL, "record timestamp"); + torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME, "record type"); + n = &rec->data.name; + torture_assert_int_equal(tctx, n->size, 17, "record name size"); + torture_assert_str_equal(tctx, n->string, "w4edom-l4.private", "record name string"); + + torture_assert_int_equal(tctx, r->records[3].record_size, 0x00000021, "record size"); + rec = &r->records[3].record; + torture_assert_int_equal(tctx, rec->flags, LSA_TLN_DISABLED_NEW, "record flags"); + torture_assert_u64_equal(tctx, rec->timestamp, 0x568C465B01DB4CBBULL, "record timestamp"); + torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME, "record type"); + n = &rec->data.name; + torture_assert_int_equal(tctx, n->size, 16, "record name size"); + torture_assert_str_equal(tctx, n->string, "w4edom-l4.public", "record name string"); + + torture_assert_int_equal(tctx, r->records[4].record_size, 0x00000035, "record size"); + rec = &r->records[4].record; + torture_assert_int_equal(tctx, rec->flags, 0, "record flags"); + torture_assert_u64_equal(tctx, rec->timestamp, 0xCF71C4FD01DB4CBAULL, "record timestamp"); + torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_SCANNER_INFO, "record type"); + b = &rec->data.data; + torture_assert_int_equal(tctx, b->size, 0x24, "scanner data"); + + return true; +} + static const uint8_t trust_domain_passwords_in[] = { 0x34, 0x1f, 0x6e, 0xcd, 0x5f, 0x14, 0x99, 0xf9, 0xd8, 0x34, 0x9f, 0x1d, 0x1c, 0xcf, 0x1f, 0x02, 0xb8, 0x30, 0xcc, 0x77, 0x21, 0xc1, 0xf3, 0xe2, @@ -511,6 +581,11 @@ struct torture_suite *ndr_drsblobs_suite(TALLOC_CTX *ctx) torture_suite_add_suite(suite, win2012R2_suite); torture_suite_add_ndr_pull_test(suite, ForestTrustInfo, forest_trust_info_data_out, forest_trust_info_check_out); + torture_suite_add_ndr_pull_validate_test_b64(suite, ForestTrustInfo, + "with_scanner", + forest_trust_info_data_out2, + forest_trust_info_check_out2); + torture_suite_add_ndr_pull_test(suite, trustDomainPasswords, trust_domain_passwords_in, trust_domain_passwords_check_in); torture_suite_add_ndr_pull_validate_test_blob(suite, -- 2.47.2