diff --git a/actions/bind b/actions/bind new file mode 100755 index 000000000..c5f9f1dee --- /dev/null +++ b/actions/bind @@ -0,0 +1,103 @@ +#!/usr/bin/python3 +# -*- mode: python -*- +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for BIND server. +""" + +import argparse + +from plinth import action_utils + + +CONFIG_FILE = '/etc/bind/named.conf.options' +CONFIG_FILE_2 = '/etc/bind/named_temp.conf.options' + +def parse_arguments(): + """Return parsed command line arguments as dictionary""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + configure = subparsers.add_parser('configure', help='Configure Minetest') + configure.add_argument('--set-forwarding', choices=['true', 'false'], + help='Set forwarding true/false') + configure.add_argument('--dnssec', choices=['true', 'false'], + help='Set DNSSEC true/false') + + return parser.parse_args() + + +def subcommand_configure(arguments): + """Configure BIND.""" + + if arguments.set_forwarding: + set_forwarding(arguments.set_forwarding) + + action_utils.service_restart('bind9') + + +def set_forwarding(choice): + """Sets forwarding true/false""" + if choice == False: + flag = 0 + f = open(CONFIG_FILE, 'r') + w = open(CONFIG_FILE_2, 'w+') + for line in f: + if 'forwarders {' in line and not '// forwarders {' in line: + flag = 1 + if flag == 1: + line = ' //'+line + print(line) + if 'forward only' in line: + flag = 0 + w.write(line) + f.close() + w.close() + os.rename('named.conf_temp.options', 'named.conf.options') + + if choice == True: + flag = 0 + f = open(CONFIG_FILE, 'r') + w = open(CONFIG_FILE_2, 'w+') + for line in f: + if '// forwarders {' in line: + print("yesy") + flag = 1 + if flag == 1: + line = line[3:] + print(line) + if 'forward only' in line: + flag = 0 + w.write(line) + f.close() + w.close() + os.rename('named.conf_temp.options', 'named.conf.options') + + +def main(): + """Parse arguments and perform all duties""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff --git a/plinth/modules/bind/__init__.py b/plinth/modules/bind/__init__.py index dd3d10e32..b441a0295 100644 --- a/plinth/modules/bind/__init__.py +++ b/plinth/modules/bind/__init__.py @@ -53,10 +53,16 @@ description = [ 'systems are fully compliant with published DNS standards.') ] +CONFIG_FILE = '/etc/bind/named.conf.options' + +value1 = 'acl goodclients { \n localhost;\n};\n' +value2 = ' recursion yes;\n allow-query { goodclients; };\n\n' +value3 = ' // 8.8.8.8;\n // 8.8.4.4;\n' + def init(): """Intialize the BIND module.""" - menu = cfg.main_menu.get('apps:index') + menu = cfg.main_menu.get('system:index') menu.add_urlname(title, 'glyphicon-globe', 'bind:index') global service @@ -65,10 +71,7 @@ def init(): service = service_module.Service( managed_services[0], title, ports=['bind-plinth'], is_external=True, - enable=enable, disable=disable) - - if service.is_enabled(): - add_shortcut() + ) class BindServiceView(ServiceView): @@ -87,14 +90,7 @@ def setup(helper, old_version=None): is_external=True, enable=enable, disable=disable) helper.call('post', service.notify_enabled, None, True) - helper.call('post', add_shortcut) - - -def add_shortcut(): - frontpage.add_shortcut('bind', title, - details=description, - configure_url=reverse_lazy('bind:index'), - login_required=False) + helper.call('post', default_config) def enable(): @@ -117,3 +113,29 @@ def diagnose(): results.append(action_utils.diagnose_port_listening(53, 'udp6')) return results + +def default_config(): + """Initialize config file for BIND""" + f = open(CONFIG_FILE, "r") + contents = f.readlines() + f.close() + + contents.insert(0, value1) + contents.insert(4, value2) + contents.insert(15, value3) + + f = open(CONFIG_FILE, "w") + contents = "".join(contents) + f.write(contents) + f.close() + +def get_default(): + """Get initial value for forwarding""" + f = open(CONFIG_FILE, "r") + contents = f.readlines() + if '// forwarders {' in contents: + conf = { + 'set_forwarding': False} + else: + conf = { + 'set_forwarding': True}