From 8ce25bdb054cad26c401ce6173a88aadc35a99df Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 30 Apr 2019 14:21:22 +0200 Subject: [PATCH] dnsp.idl: fix the dnsp_dns_addr_array definition The endian changes are needed in order to get the following result from the blobs Windows generated (see the torture test): AddrArray: ARRAY(3) AddrArray: struct dnsp_dns_addr family : 0x0002 (2) port : 0x0035 (53) ipv4 : 172.31.99.33 ipv6 : 0000:0000:0000:0000:0000:0000:0000:0000 [MS-DNSP] states that the port is supposed to be ignored, but it's still good to decode it as port '53' (0x0035) instead of '13568' (0x3500). BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969 Signed-off-by: Stefan Metzmacher Reviewed-by: Garming Sam (cherry picked from commit 6fc7cc15048673d109042d7b40684ed63eb4ff9e) --- librpc/idl/dnsp.idl | 5 +++-- selftest/knownfail.d/dnsp | 1 - source4/torture/ndr/dnsp.c | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl index 578cb27d4d1..0f71aaa292f 100644 --- a/librpc/idl/dnsp.idl +++ b/librpc/idl/dnsp.idl @@ -174,8 +174,8 @@ interface dnsp typedef struct { uint16 family; - uint16 port; - ipv4address ipv4; + [flag(NDR_BIG_ENDIAN)] uint16 port; + [flag(NDR_BIG_ENDIAN)] ipv4address ipv4; ipv6address ipv6; uint8 pad[8]; uint32 unused[8]; @@ -187,6 +187,7 @@ interface dnsp uint32 Tag; uint16 Family; uint16 Reserved0; + uint32 Flags; uint32 MatchFlag; uint32 Reserved1; uint32 Reserved2; diff --git a/selftest/knownfail.d/dnsp b/selftest/knownfail.d/dnsp index 195feb4ca01..21254070882 100644 --- a/selftest/knownfail.d/dnsp +++ b/selftest/knownfail.d/dnsp @@ -1,2 +1 @@ -^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS_DA ^samba4.local.ndr.*dnsp_DnsProperty_DELETED_FROM_HOSTNAME diff --git a/source4/torture/ndr/dnsp.c b/source4/torture/ndr/dnsp.c index 83d8346eb4f..abe24b38b54 100644 --- a/source4/torture/ndr/dnsp.c +++ b/source4/torture/ndr/dnsp.c @@ -217,6 +217,7 @@ static bool dnsp_dnsProperty_addr_array_check(struct torture_context *tctx, torture_assert_int_equal(tctx, da->Tag, 0, "Tag"); torture_assert_int_equal(tctx, da->Family, 0, "Family"); torture_assert_int_equal(tctx, da->Reserved0, 0, "Reserved0"); + torture_assert_int_equal(tctx, da->Flags, 0, "Flags"); torture_assert_int_equal(tctx, da->MatchFlag, 0, "MatchFlag"); torture_assert_int_equal(tctx, da->Reserved1, 0, "Reserved1"); torture_assert_int_equal(tctx, da->Reserved2, 0, "Reserved2"); -- 2.47.2