mirror of
https://github.com/samba-team/samba.git
synced 2025-08-26 01:49:31 +03:00
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>
This commit is contained in:
committed by
Douglas Bagnall
parent
d84d10bb0e
commit
a572a26053
@ -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)
|
||||
|
Reference in New Issue
Block a user