diff --git a/plugins/iptables.py b/plugins/iptables.py index f5dfb88..95f4c4e 100644 --- a/plugins/iptables.py +++ b/plugins/iptables.py @@ -1,8 +1,15 @@ # Add an iptables rule import re +import socket from io import BytesIO from logging import getLogger, DEBUG, WARN, INFO + +try: + from congiparser import RawConfigParser +except ImportError: + from ConfigParser import RawConfigParser + from portal import logHandler, logFormatter # Try to import arping for mac_from_ip() @@ -18,12 +25,15 @@ from sh import sudo, ErrorReturnCode def run(arg): # Some info from the plugin dispatcher. environ = arg['environ'] - config = arg['config'] + plugin_config = arg['config'] + + config = RawConfigParser(defaults=plugin_config) + config.add_section(plugin_config.get('__name__', 'iptables')) # Setup plugin logging l = getLogger('plugin_iptables') l.addHandler(logHandler) - if config.get('debug', False): + if config.getboolean('iptables', 'debug', False): l.setLevel(DEBUG) client_ip = environ.get( @@ -34,11 +44,21 @@ def run(arg): error_msg = None iptables_failed = False + # Verify IP + try: + socket.inet_aton(client_ip) + except socket.error: + l.error('Client IP-address is invalid') + return { + 'error': str(e), + 'failed': True + } + # Attempt to get client HW address first. try: client_mac = mac_from_ip( l, - config.get('arping'), + config.get('iptables', 'arping'), client_ip ) except Exception as e: @@ -55,7 +75,7 @@ def run(arg): )) # Create tuple out of iptables command - iptables_mac = config.get('iptables_mac').format( + iptables_mac = config.get('iptables', 'iptables_mac').format( mac_address=client_mac ) iptables_mac = tuple(iptables_mac.split(' ')) @@ -95,7 +115,7 @@ def run(arg): ip=client_ip )) - iptables_ip = config.get('iptables_ip').format( + iptables_ip = config.get('iptables', 'iptables_ip').format( ip_address=client_ip ) iptables_ip = tuple(iptables_ip.split(' ')) diff --git a/plugins/sample_log.py b/plugins/sample_log.py index b09043c..af264ad 100644 --- a/plugins/sample_log.py +++ b/plugins/sample_log.py @@ -2,16 +2,26 @@ # Sets up logging by importing from the bottle app in the parent dir. from logging import getLogger, DEBUG, WARN, INFO + +try: + from congiparser import RawConfigParser +except ImportError: + from ConfigParser import RawConfigParser + from portal import logHandler, logFormatter def run(arg): # The WSGI environ dict should always be there, sans any special objects # like io streams. environ = arg['environ'] + plugin_config = arg['config'] + + config = RawConfigParser(defaults=plugin_config) + config.add_section(plugin_config.get('__name__', 'sample_log')) l = getLogger('plugin_log') l.addHandler(logHandler) - if config.get('debug', False): + if config.getboolean('sample_log', 'debug', False): l.setLevel(DEBUG) log_url = '{proto}://{server}:{port}{request}'.format( diff --git a/portal.py b/portal.py index c30f9ae..33e4955 100644 --- a/portal.py +++ b/portal.py @@ -104,7 +104,11 @@ def dispatch_plugins(): # Import all the plugin configuration values as OrderedDict config_sections = plugin_config._sections - arg['config'] = config_sections[plugin] + arg['config'] = dict(config_sections[plugin]) + + # Is plugin enabled? + if not plugin_config.getboolean(plugin, 'enabled'): + continue # Import the plugin try: