diff options
author | Douglas Bagnall <douglas.bagnall@catalyst.net.nz> | 2021-04-01 15:28:49 +1300 |
---|---|---|
committer | Douglas Bagnall <dbagnall@samba.org> | 2021-04-08 21:54:35 +0000 |
commit | a572a260535da0956e324a092cfd459a1c5b4205 (patch) | |
tree | e41e6d3fc18b156aee2ecfeb3834f6eec07685d2 /python | |
parent | d84d10bb0e71a7c27c8a880c5eb2a98e23778fc9 (diff) | |
download | samba-a572a260535da0956e324a092cfd459a1c5b4205.tar.gz |
py/dnsserver: add record_from_string helper function
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'python')
-rw-r--r-- | python/samba/dnsserver.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/python/samba/dnsserver.py b/python/samba/dnsserver.py index 42de46b8d4d..a6e2136b1dc 100644 --- a/python/samba/dnsserver.py +++ b/python/samba/dnsserver.py @@ -255,3 +255,35 @@ class TXTRecord(dnsserver.DNS_RPC_RECORD): def from_string(cls, data, sep=None, **kwargs): slist = shlex.split(data) return cls(slist, **kwargs) + + +# +# Don't add new Record types after this line + +_RECORD_TYPE_LUT = {} +def _setup_record_type_lut(): + for k, v in globals().items(): + if k[-6:] == 'Record': + k = k[:-6] + flag = getattr(dnsp, 'DNS_TYPE_' + k) + _RECORD_TYPE_LUT[k] = v + _RECORD_TYPE_LUT[flag] = v + +_setup_record_type_lut() +del _setup_record_type_lut + + +def record_from_string(t, data, sep=None, **kwargs): + """Get a DNS record of type t based on the data string. + Additional keywords (ttl, rank, etc) can be passed in. + + t can be a dnsp.DNS_TYPE_* integer or a string like "A", "TXT", etc. + """ + if isinstance(t, str): + t = t.upper() + try: + Record = _RECORD_TYPE_LUT[t] + except KeyError as e: + raise DNSParseError("Unsupported record type") from e + + return Record.from_string(data, sep=sep, **kwargs) |