mirror of
https://gitlab.nic.cz/knot/knot-dns.git
synced 2026-02-03 18:49:28 -05:00
103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
|
|
'''Test for header flags in response'''
|
|
|
|
from dnstest.test import Test
|
|
|
|
t = Test()
|
|
|
|
knot = t.server("knot")
|
|
bind = t.server("bind")
|
|
zone = t.zone("flags.")
|
|
|
|
t.link(zone, knot)
|
|
t.link(zone, bind)
|
|
|
|
t.start()
|
|
|
|
# RD flag preservation.
|
|
resp = knot.dig("flags", "NS", flags="RD")
|
|
resp.check(flags="QR AA RD", noflags="TC RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# CD flag must be cleared (RFC 4035, Section 3.1.6).
|
|
resp = knot.dig("flags", "NS", flags="CD")
|
|
resp.check(flags="QR AA", noflags="TC RA AD RD CD Z")
|
|
# Bind preserves CD flag
|
|
|
|
# TC flag must be cleared
|
|
resp = knot.dig("flags", "NS", flags="TC")
|
|
resp.check(flags="QR AA", noflags="TC RA AD CD RD Z")
|
|
resp.cmp(bind)
|
|
|
|
# AD flag must be cleared
|
|
resp = knot.dig("flags", "NS", flags="AD")
|
|
resp.check(flags="QR AA", noflags="TC RA AD CD RD Z")
|
|
resp.cmp(bind)
|
|
|
|
# AA flag must be cleared
|
|
resp = knot.dig("sub.flags", "NS", flags="AA")
|
|
resp.check(flags="QR", noflags="AA TC RD RA AD CD Z")
|
|
resp.cmp(bind, additional=True)
|
|
|
|
# RA flag must be cleared
|
|
resp = knot.dig("flags", "NS", flags="RA")
|
|
resp.check(flags="QR AA", noflags="TC RA AD CD RD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Z flag must be cleared
|
|
resp = knot.dig("flags", "NS", flags="Z")
|
|
resp.check(flags="QR AA", noflags="TC RA AD CD RD Z")
|
|
resp.cmp(bind)
|
|
|
|
# NULL record
|
|
resp = knot.dig("empty-null.flags.", "TYPE10")
|
|
resp.check(rcode="NOERROR", rdata="")
|
|
resp.cmp(bind)
|
|
|
|
# NS record for delegated subdomain (not authoritative).
|
|
resp = knot.dig("sub.flags", "NS")
|
|
resp.check(flags="QR", noflags="AA TC RD RA AD CD Z")
|
|
resp.cmp(bind, additional=True)
|
|
|
|
# Glue record for delegated subdomain (not authoritative).
|
|
resp = knot.dig("ns.sub.flags", "A")
|
|
resp.check(flags="QR", noflags="AA TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Wildcard DNAME
|
|
resp = knot.dig("a.b.wildcard-dname.flags", "A")
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Wildcard DNAME "wildcard" query
|
|
resp = knot.dig("a.*.wildcard-dname.flags", "A")
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Wildcard DNAME DNAME query
|
|
resp = knot.dig("a.wildcard-dname.flags", "DNAME")
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Check maximal UDP payload which fits into a response message.
|
|
resp = knot.dig("512resp.flags", "TXT", udp=True)
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# TC bit - UDP.
|
|
resp = knot.dig("513resp.flags", "TXT", udp=True)
|
|
resp.check(flags="QR AA TC", noflags="RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# No TC bit - TCP.
|
|
resp = knot.dig("513resp.flags", "TXT", udp=False)
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
resp.cmp(bind)
|
|
|
|
# Check ANY
|
|
resp = knot.dig("flags", "ANY")
|
|
resp.check(flags="QR AA", noflags="TC RD RA AD CD Z")
|
|
# nothing to compare
|
|
|
|
t.end()
|