From: Andrew Bartlett Date: Wed, 13 May 2020 22:21:19 +0000 (+1200) Subject: librpc/idl: Add dnsp_DnsProperty_short X-Git-Tag: ldb-2.2.0~484 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=87bf1d687fe7b48a7b6d511dfc7f5414db16119c;p=thirdparty%2Fsamba.git librpc/idl: Add dnsp_DnsProperty_short This will be used by a test and the DNS server code to parse short dnsProperty records which come from Windows servers. This example is from the value that caused Samba to fail as it can not be parsed as a normal dnsp_DnsProperty BUG: https://bugzilla.samba.org/show_bug.cgi?id=14310 Signed-off-by: Andrew Bartlett Reviewed-by: Douglas Bagnall --- diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl index 814d573cddf..2fb45a217a4 100644 --- a/librpc/idl/dnsp.idl +++ b/librpc/idl/dnsp.idl @@ -260,4 +260,20 @@ interface dnsp [switch_is(id)] dnsPropertyData data; uint32 name; } dnsp_DnsProperty; + + /* + * this is the format for the dnsProperty attribute in the DNS + * partitions in AD when the wDataLength is 0. This is an + * invalid format seen from some Windows servers in the same + * domain. + */ + typedef [flag(NDR_NOALIGN),public] struct { + [range(0, 0), value(0)] uint32 wDataLength; + uint32 namelength; + [value(0)] uint32 flag; + [value(1)] uint32 version; + dns_property_id id; + [switch_is(DSPROPERTY_ZONE_EMPTY)] dnsPropertyData data; + uint32 name; + } dnsp_DnsProperty_short; } diff --git a/python/samba/tests/blackbox/ndrdump.py b/python/samba/tests/blackbox/ndrdump.py index 0b72684f270..a33229e4740 100644 --- a/python/samba/tests/blackbox/ndrdump.py +++ b/python/samba/tests/blackbox/ndrdump.py @@ -468,3 +468,24 @@ dump OK # check_output will return bytes # convert expected to bytes for python 3 self.assertRegex(actual.decode('utf8'), expected + '$') + + def test_ndrdump_short_dnsProperty(self): + expected = b'''pull returned Success + dnsp_DnsProperty_short: struct dnsp_DnsProperty_short + wDataLength : 0x00000000 (0) + namelength : 0x00000000 (0) + flag : 0x00000000 (0) + version : 0x00000001 (1) + id : DSPROPERTY_ZONE_NS_SERVERS_DA (146) + data : union dnsPropertyData(case 0) + name : 0x00000000 (0) +dump OK +''' + command = ( + "ndrdump dnsp dnsp_DnsProperty_short struct --base64-input " + "--input AAAAAAAAAAAAAAAAAQAAAJIAAAAAAAAA") + try: + actual = self.check_output(command) + except BlackboxProcessError as e: + self.fail(e) + self.assertEqual(actual, expected)