summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>2021-04-01 15:28:49 +1300
committerDouglas Bagnall <dbagnall@samba.org>2021-04-08 21:54:35 +0000
commita572a260535da0956e324a092cfd459a1c5b4205 (patch)
treee41e6d3fc18b156aee2ecfeb3834f6eec07685d2 /python
parentd84d10bb0e71a7c27c8a880c5eb2a98e23778fc9 (diff)
downloadsamba-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.py32
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)