mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
bind: Add basic config
This commit is contained in:
parent
4439831922
commit
da408d3381
103
actions/bind
Executable file
103
actions/bind
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
"""
|
||||||
|
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()
|
||||||
@ -53,10 +53,16 @@ description = [
|
|||||||
'systems are fully compliant with published DNS standards.')
|
'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():
|
def init():
|
||||||
"""Intialize the BIND module."""
|
"""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')
|
menu.add_urlname(title, 'glyphicon-globe', 'bind:index')
|
||||||
|
|
||||||
global service
|
global service
|
||||||
@ -65,10 +71,7 @@ def init():
|
|||||||
service = service_module.Service(
|
service = service_module.Service(
|
||||||
managed_services[0], title, ports=['bind-plinth'],
|
managed_services[0], title, ports=['bind-plinth'],
|
||||||
is_external=True,
|
is_external=True,
|
||||||
enable=enable, disable=disable)
|
)
|
||||||
|
|
||||||
if service.is_enabled():
|
|
||||||
add_shortcut()
|
|
||||||
|
|
||||||
|
|
||||||
class BindServiceView(ServiceView):
|
class BindServiceView(ServiceView):
|
||||||
@ -87,14 +90,7 @@ def setup(helper, old_version=None):
|
|||||||
is_external=True,
|
is_external=True,
|
||||||
enable=enable, disable=disable)
|
enable=enable, disable=disable)
|
||||||
helper.call('post', service.notify_enabled, None, True)
|
helper.call('post', service.notify_enabled, None, True)
|
||||||
helper.call('post', add_shortcut)
|
helper.call('post', default_config)
|
||||||
|
|
||||||
|
|
||||||
def add_shortcut():
|
|
||||||
frontpage.add_shortcut('bind', title,
|
|
||||||
details=description,
|
|
||||||
configure_url=reverse_lazy('bind:index'),
|
|
||||||
login_required=False)
|
|
||||||
|
|
||||||
|
|
||||||
def enable():
|
def enable():
|
||||||
@ -117,3 +113,29 @@ def diagnose():
|
|||||||
results.append(action_utils.diagnose_port_listening(53, 'udp6'))
|
results.append(action_utils.diagnose_port_listening(53, 'udp6'))
|
||||||
|
|
||||||
return results
|
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}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user