[dns-operations] Tool to store zone file with TYPExxx records
Klaus Darilion
klaus.mailinglists at pernau.at
Fri Apr 5 08:26:19 UTC 2019
Cool, thanks. I will try it out.
regards
Klaus
Am 05.04.2019 um 00:26 schrieb Matthew Pounsett:
> On Thu, 4 Apr 2019 at 17:55, Matthew Pounsett <matt at conundrum.com> wrote:
>>
>>
>> I'm not aware of an existing tool that could do this, but if you're familiar with Python, I suspect it would be possible to write something by fiddling with the presentation format code in dnspython. I think all you'd have to do is monkeypatch dns.rdatatype.to_text() so that it never makes the call to _by_value.get(value).
>
>
> I was curious how hard this would be, so went ahead and wrote it. :)
>
> The conversion from text to a zone object depends on the
> rdatatype.to_text() method returning a known mnemonic, so you have to
> do the monkeypatch after you've got the zone object. The code below
> works in python3.
>
> #!/usr/bin/env python
>
> import argparse
> import dns.zone
> import dns.rdatatype
>
>
> def my_to_text(value):
> """
> Convert a DNS rdata type value to TYPE#### representation. Skip the
> lookup for known mnemonics.
>
> Raises ``ValueError`` if the rdata type value is not >= 0 and <= 65535.
>
> Returns a ``str``.
> """
>
> if value < 0 or value > 65535:
> raise ValueError("type must be between >= 0 and <= 65535")
> text = 'TYPE' + repr(value)
> return text
>
>
> if __name__ == '__main__':
> parser = argparse.ArgumentParser(
> description=(
> "Convert the type mnemonics in a zone file to "
> "TYPE### representation."
> )
> )
> parser.add_argument('-f', '--file', help="zone file", required=True)
> parser.add_argument('-z', '--zone', help="zone name", required=True)
> args = parser.parse_args()
>
> zone = dns.zone.from_file(args.file, args.zone)
>
> dns.rdatatype.to_text = my_to_text
>
> print(zone.to_text().decode())
>
More information about the dns-operations
mailing list