diff options
-rw-r--r-- | librpc/idl/dnsp.idl | 16 | ||||
-rw-r--r-- | python/samba/tests/blackbox/ndrdump.py | 21 |
2 files changed, 37 insertions, 0 deletions
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) |