From 16e322a9c71cde15d3112d8f3ffc174e656f50ef Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Fri, 11 Sep 2020 06:14:07 -0500 Subject: ietf-system: Modularise /etc/resolv.conf parsing --- ncserver/module/system.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'ncserver/module/system.py') diff --git a/ncserver/module/system.py b/ncserver/module/system.py index 7e6616e..5962327 100644 --- a/ncserver/module/system.py +++ b/ncserver/module/system.py @@ -81,10 +81,20 @@ def _parse_ntp_conf_to(sys_node): # XXX TODO: parse NTP configuration. -def _parse_resolv_conf_to(sys_node): - """Parse /etc/resolv.conf into /sys:system/dns-resolver format.""" - root = util.subelm(sys_node, 'sys:dns-resolver') +def _parse_resolv_conf() -> dict: + """Parse /etc/resolv.conf and return the configuration. + + The return value is a dictionary with the following keys: + + * resolvers: a dict, with each key being the name of the resolver + and the value being the resolver IP + + * search: a list, containing search domains + + * attempts: the number of attempts to resolve a name + * timeout: the timeout in seconds to resolve a name + """ with open('/etc/resolv.conf', 'r') as rconf_f: rconf = rconf_f.readlines() @@ -123,18 +133,28 @@ def _parse_resolv_conf_to(sys_node): elif line.startswith('domain') or line.startswith('search'): search = line[7:].split(' ') - for domain in search: + return {'resolvers': resolvers, 'search': search, 'attempts': attempts, + 'timeout': timeout} + + +def _parse_resolv_conf_to(sys_node): + """Parse /etc/resolv.conf into /sys:system/dns-resolver format.""" + root = util.subelm(sys_node, 'sys:dns-resolver') + + resolv_conf = _parse_resolv_conf() + + for domain in resolv_conf['search']: root.append(util.leaf_elm('sys:search', domain)) - for pair in resolvers.items(): + for pair in resolv_conf['resolvers'].items(): res = util.subelm(root, 'sys:server') res.append(util.leaf_elm('sys:name', pair[0])) udp = util.subelm(res, 'sys:udp-and-tcp') udp.append(util.leaf_elm('sys:address', pair[1])) opts = util.subelm(root, 'sys:options') - opts.append(util.leaf_elm('sys:timeout', timeout)) - opts.append(util.leaf_elm('sys:attempts', attempts)) + opts.append(util.leaf_elm('sys:timeout', resolv_conf['timeout'])) + opts.append(util.leaf_elm('sys:attempts', resolv_conf['attempts'])) def _parse_authn_to(sys_node): -- cgit v1.2.3-60-g2f50