1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

selftest: Add test for handling of "short" dnsProperty records

These have been known to be given by Windows DCs that share the same domain
as while invalid, they are not format-checked inbound when set by the DNS
Manager MMC applet over the dnsserver pipe to Windows.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14310

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
This commit is contained in:
Andrew Bartlett
2020-05-14 10:19:45 +12:00
parent 87bf1d687f
commit 6eb2a48f5a
2 changed files with 63 additions and 0 deletions

View File

@ -1702,6 +1702,57 @@ class TestZones(DNSTest):
self.assert_dns_opcode_equals(response, dns.DNS_OPCODE_QUERY)
self.assertEqual(response.ancount, 0)
def set_dnsProperty_zero_length(self, dnsproperty_id):
records = self.samdb.search(base=self.zone_dn, scope=ldb.SCOPE_BASE,
expression="(&(objectClass=dnsZone)" +
"(name={0}))".format(self.zone),
attrs=["dNSProperty"])
self.assertEqual(len(records), 1)
props = [ndr_unpack(dnsp.DnsProperty, r)
for r in records[0].get('dNSProperty')]
new_props = [ndr.ndr_pack(p) for p in props if p.id == dnsproperty_id]
zero_length_p = dnsp.DnsProperty_short()
zero_length_p.id = dnsproperty_id
zero_length_p.namelength = 1
zero_length_p.name = 1
new_props += [ndr.ndr_pack(zero_length_p)]
dn = records[0].dn
update_dict = {'dn': dn, 'dnsProperty': new_props}
self.samdb.modify(ldb.Message.from_dict(self.samdb,
update_dict,
ldb.FLAG_MOD_REPLACE))
def test_update_while_dnsProperty_zero_length(self):
self.create_zone(self.zone)
self.set_dnsProperty_zero_length(dnsp.DSPROPERTY_ZONE_ALLOW_UPDATE)
rec = self.dns_update_record('dnspropertytest', ['test txt'])
self.assertNotEqual(rec.dwTimeStamp, 0)
def test_enum_zones_while_dnsProperty_zero_length(self):
self.create_zone(self.zone)
self.set_dnsProperty_zero_length(dnsp.DSPROPERTY_ZONE_ALLOW_UPDATE)
client_version = dnsserver.DNS_CLIENT_VERSION_LONGHORN
request_filter = dnsserver.DNS_ZONE_REQUEST_PRIMARY
tid = dnsserver.DNSSRV_TYPEID_DWORD
typeid, res = self.rpc_conn.DnssrvComplexOperation2(client_version,
0,
self.server_ip,
None,
'EnumZones',
tid,
request_filter)
def test_rpc_zone_update_while_dnsProperty_zero_length(self):
self.create_zone(self.zone)
self.set_dnsProperty_zero_length(dnsp.DSPROPERTY_ZONE_ALLOW_UPDATE)
self.set_params(zone=self.zone, AllowUpdate=dnsp.DNS_ZONE_UPDATE_SECURE)
def test_rpc_zone_update_while_other_dnsProperty_zero_length(self):
self.create_zone(self.zone)
self.set_dnsProperty_zero_length(dnsp.DSPROPERTY_ZONE_MASTER_SERVERS_DA)
self.set_params(zone=self.zone, AllowUpdate=dnsp.DNS_ZONE_UPDATE_SECURE)
class TestRPCRoundtrip(DNSTest):
def setUp(self):