From c7c9b200a81c6f6b982203760bb08a7b5ba0286e Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Thu, 28 Dec 2017 19:44:58 -0500 Subject: [PATCH] bind: Remove option to enable forwarding Forwarding is enabled by adding forwarders. Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- actions/bind | 29 +++------- plinth/modules/bind/__init__.py | 77 ++++++++------------------ plinth/modules/bind/forms.py | 17 ++---- plinth/modules/bind/tests/test_bind.py | 27 +++------ plinth/modules/bind/views.py | 30 +++------- 5 files changed, 51 insertions(+), 129 deletions(-) diff --git a/actions/bind b/actions/bind index 3e840d2a5..d1c055611 100755 --- a/actions/bind +++ b/actions/bind @@ -24,7 +24,7 @@ import argparse from plinth import action_utils from plinth.modules.bind import CONFIG_FILE, DEFAULT_CONFIG -from plinth.modules.bind import set_forwarding, enable_dnssec, set_forwarders +from plinth.modules.bind import set_forwarders, set_dnssec def parse_arguments(): @@ -34,13 +34,10 @@ def parse_arguments(): subparsers.add_parser('setup', help='Setup for BIND') configure = subparsers.add_parser('configure', help='Configure BIND') - configure.add_argument('--set-forwarding', choices=['true', 'false'], - help='Set forwarding true/false') - configure.add_argument('--enable-dnssec', choices=['true', 'false'], - help='Set DNSSEC true/false') - - dns = subparsers.add_parser('dns', help='Set DNS forwarders') - dns.add_argument('--set', help='List of IP addresses, separated by space') + configure.add_argument('--forwarders', + help='List of IP addresses, separated by space') + configure.add_argument('--dnssec', choices=['enable', 'disable'], + help='Enable or disable DNSSEC') subparsers.required = True return parser.parse_args() @@ -54,22 +51,10 @@ def subcommand_setup(_): action_utils.service_restart('bind9') -def subcommand_dns(arguments): - """Setting DNS servers""" - if arguments.set: - set_forwarders(arguments.set) - - action_utils.service_restart('bind9') - - def subcommand_configure(arguments): """Configure BIND.""" - if arguments.set_forwarding: - set_forwarding(arguments.set_forwarding) - - if arguments.enable_dnssec: - enable_dnssec(arguments.enable_dnssec) - + set_forwarders(arguments.forwarders) + set_dnssec(arguments.dnssec) action_utils.service_restart('bind9') diff --git a/plinth/modules/bind/__init__.py b/plinth/modules/bind/__init__.py index da0beac64..0c6ce03e4 100644 --- a/plinth/modules/bind/__init__.py +++ b/plinth/modules/bind/__init__.py @@ -121,13 +121,11 @@ def get_config(): """Get current configuration""" data = [line.strip() for line in open(CONFIG_FILE, 'r')] - forwarding_enabled = False - dnssec_enabled = False forwarders = '' + dnssec_enabled = False flag = False for line in data: if re.match(r'^\s*forwarders\s+{', line): - forwarding_enabled = True flag = True elif re.match(r'^\s*dnssec-enable\s+yes;', line): dnssec_enabled = True @@ -136,62 +134,12 @@ def get_config(): flag = False conf = { - 'set_forwarding': forwarding_enabled, + 'forwarders': forwarders, 'enable_dnssec': dnssec_enabled, - 'forwarders': forwarders } return conf -def set_forwarding(choice): - """Enable or disable DNS forwarding.""" - data = [line.strip() for line in open(CONFIG_FILE, 'r')] - flag = 0 - if choice == "false": - conf_file = open(CONFIG_FILE, 'w') - for line in data: - if re.match(r'^\s*forwarders\s+{', line): - flag = 1 - if flag == 1: - line = '// ' + line - if re.match(r'forward\s+first', line): - flag = 0 - conf_file.write(line + '\n') - conf_file.close() - - else: - conf_file = open(CONFIG_FILE, 'w') - for line in data: - if re.match(r'//\s*forwarders\s+{', line): - flag = 1 - if flag == 1: - line = line.lstrip('/') - if re.match(r'forward\s+first', line): - flag = 0 - conf_file.write(line + '\n') - conf_file.close() - - -def enable_dnssec(choice): - """Enable or disable DNSSEC.""" - data = [line.strip() for line in open(CONFIG_FILE, 'r')] - if choice == "false": - conf_file = open(CONFIG_FILE, 'w') - for line in data: - if re.match(r'^\s*dnssec-enable\s+yes;', line): - line = '//' + line - conf_file.write(line + '\n') - conf_file.close() - - else: - conf_file = open(CONFIG_FILE, 'w') - for line in data: - if re.match(r'//\s*dnssec-enable\s+yes;', line): - line = line.lstrip('/') - conf_file.write(line + '\n') - conf_file.close() - - def set_forwarders(forwarders): """Set DNS forwarders.""" flag = 0 @@ -210,3 +158,24 @@ def set_forwarders(forwarders): elif flag == 0: conf_file.write(line + '\n') conf_file.close() + + +def set_dnssec(choice): + """Enable or disable DNSSEC.""" + data = [line.strip() for line in open(CONFIG_FILE, 'r')] + + if choice == 'enable': + conf_file = open(CONFIG_FILE, 'w') + for line in data: + if re.match(r'//\s*dnssec-enable\s+yes;', line): + line = line.lstrip('/') + conf_file.write(line + '\n') + conf_file.close() + + if choice == 'disable': + conf_file = open(CONFIG_FILE, 'w') + for line in data: + if re.match(r'^\s*dnssec-enable\s+yes;', line): + line = '//' + line + conf_file.write(line + '\n') + conf_file.close() diff --git a/plinth/modules/bind/forms.py b/plinth/modules/bind/forms.py index c3fc27752..577a11c20 100644 --- a/plinth/modules/bind/forms.py +++ b/plinth/modules/bind/forms.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - """ Forms for BIND module. """ @@ -34,17 +33,11 @@ def validate_ips(ips): class BindForm(ServiceForm): """BIND configuration form""" - set_forwarding = forms.BooleanField( - label=_('Enable forwarding'), - required=False, - help_text=_('Enable forwarding on your BIND server')) + forwarders = forms.CharField( + required=False, validators=[validate_ips], help_text=_( + 'A list DNS servers, separated by space, to which ' + 'requests will be forwarded')) enable_dnssec = forms.BooleanField( - label=_('Enable DNSSEC'), - required=False, + label=_('Enable DNSSEC'), required=False, help_text=_('Enable Domain Name System Security Extensions')) - - forwarders = forms.CharField( - required=False, - validators=[validate_ips], - help_text=_('A list of IP addresses, separated by space')) diff --git a/plinth/modules/bind/tests/test_bind.py b/plinth/modules/bind/tests/test_bind.py index f66f650f6..7b40668c4 100644 --- a/plinth/modules/bind/tests/test_bind.py +++ b/plinth/modules/bind/tests/test_bind.py @@ -34,24 +34,6 @@ class TestBind(unittest.TestCase): bind.CONFIG_FILE = self.conf_file.name - def test_set_forwarding(self): - bind.set_forwarding("true") - conf = bind.get_config() - self.assertEqual(conf['set_forwarding'], True) - - bind.set_forwarding("false") - conf = bind.get_config() - self.assertEqual(conf['set_forwarding'], False) - - def test_enable_dnssec(self): - bind.enable_dnssec("true") - conf = bind.get_config() - self.assertEqual(conf['enable_dnssec'], True) - - bind.enable_dnssec("false") - conf = bind.get_config() - self.assertEqual(conf['enable_dnssec'], False) - def test_set_forwarders(self): bind.set_forwarders('8.8.8.8 8.8.4.4') conf = bind.get_config() @@ -60,3 +42,12 @@ class TestBind(unittest.TestCase): bind.set_forwarders('') conf = bind.get_config() self.assertEqual(conf['forwarders'], '') + + def test_enable_dnssec(self): + bind.set_dnssec('enable') + conf = bind.get_config() + self.assertEqual(conf['enable_dnssec'], True) + + bind.set_dnssec('disable') + conf = bind.get_config() + self.assertEqual(conf['enable_dnssec'], False) diff --git a/plinth/modules/bind/views.py b/plinth/modules/bind/views.py index 5f8764631..e5700a1b9 100644 --- a/plinth/modules/bind/views.py +++ b/plinth/modules/bind/views.py @@ -47,29 +47,13 @@ class BindServiceView(ServiceView): # pylint: disable=too-many-ancestors data = form.cleaned_data old_config = get_config() - if old_config['set_forwarding'] != data['set_forwarding']: - value = 'true' if data['set_forwarding'] else 'false' - actions.superuser_run('bind', - ['configure', '--set-forwarding', value]) - messages.success(self.request, - _('Set forwarding configuration updated')) - - if old_config['enable_dnssec'] != data['enable_dnssec']: - value = 'true' if data['enable_dnssec'] else 'false' - actions.superuser_run('bind', - ['configure', '--enable-dnssec', value]) - messages.success(self.request, - _('Enable DNSSEC configuration updated')) - if old_config['forwarders'] != data['forwarders'] \ - and old_config['forwarders'] is not '': - actions.superuser_run('bind', ['dns', '--set', data['forwarders']]) - messages.success(self.request, - _('DNS server configuration updated')) - elif old_config['forwarders'] is '' \ - and old_config['forwarders'] != data['forwarders']: - messages.error( - self.request, - _('Enable forwarding to set forwarding DNS servers')) + or old_config['enable_dnssec'] != data['enable_dnssec']: + dnssec_setting = 'enable' if data['enable_dnssec'] else 'disable' + actions.superuser_run('bind', [ + 'configure', '--forwarders', data['forwarders'], '--dnssec', + dnssec_setting + ]) + messages.success(self.request, _('BIND configuration updated')) return super().form_valid(form)