# -*- coding: utf-8 -*- # # Copyright (C) 2012-2016 Red Hat, Inc. # # Authors: # Thomas Woerner <twoerner@redhat.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """This module contains decorators for use with and without D-Bus""" __all__ = ["FirewallDBusException", "handle_exceptions", "dbus_handle_exceptions", "dbus_service_method"] import dbus import dbus.service import traceback from dbus.exceptions import DBusException from decorator import decorator from firewall import config from firewall.errors import FirewallError from firewall import errors from firewall.core.logger import log ############################################################################ # # Exception handler decorators # ############################################################################ class FirewallDBusException(dbus.DBusException): """FirewallDBusException""" _dbus_error_name = "%s.Exception" % config.dbus.DBUS_INTERFACE @decorator def handle_exceptions(func, *args, **kwargs): """Decorator to handle exceptions and log them. Used if not conneced to D-Bus. """ try: return func(*args, **kwargs) except FirewallError as error: log.debug1(traceback.format_exc()) log.error(error) except Exception: # pylint: disable=W0703 log.debug1(traceback.format_exc()) log.exception() @decorator def dbus_handle_exceptions(func, *args, **kwargs): """Decorator to handle exceptions, log and report them into D-Bus :Raises DBusException: on a firewall error code problems. """ try: return func(*args, **kwargs) except FirewallError as error: code = FirewallError.get_code(str(error)) if code in [ errors.ALREADY_ENABLED, errors.NOT_ENABLED, errors.ZONE_ALREADY_SET, errors.ALREADY_SET ]: log.warning(str(error)) else: log.debug1(traceback.format_exc()) log.error(str(error)) raise FirewallDBusException(str(error)) except DBusException as ex: # only log DBusExceptions once raise ex except Exception as ex: log.debug1(traceback.format_exc()) log.exception() raise FirewallDBusException(str(ex)) def dbus_service_method(*args, **kwargs): """Add sender argument for D-Bus""" kwargs.setdefault("sender_keyword", "sender") return dbus.service.method(*args, **kwargs)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
.__init__.pyo.40009 | File | 147 B | 0644 |
|
.config.pyo.40009 | File | 48.08 KB | 0644 |
|
.config_helper.pyo.40009 | File | 15.45 KB | 0644 |
|
.config_icmptype.pyo.40009 | File | 12.94 KB | 0644 |
|
.config_ipset.pyo.40009 | File | 15.89 KB | 0644 |
|
.config_service.pyo.40009 | File | 22.86 KB | 0644 |
|
.config_zone.pyo.40009 | File | 36.55 KB | 0644 |
|
.decorators.pyo.40009 | File | 2.59 KB | 0644 |
|
.firewalld.pyo.40009 | File | 85.28 KB | 0644 |
|
.server.pyo.40009 | File | 3.02 KB | 0644 |
|
__init__.py | File | 0 B | 0644 |
|
__init__.pyc | File | 147 B | 0644 |
|
__init__.pyo | File | 147 B | 0644 |
|
config.py | File | 60.64 KB | 0644 |
|
config.pyc | File | 48.08 KB | 0644 |
|
config.pyo | File | 48.08 KB | 0644 |
|
config_helper.py | File | 17.13 KB | 0644 |
|
config_helper.pyc | File | 15.45 KB | 0644 |
|
config_helper.pyo | File | 15.45 KB | 0644 |
|
config_icmptype.py | File | 14.58 KB | 0644 |
|
config_icmptype.pyc | File | 12.94 KB | 0644 |
|
config_icmptype.pyo | File | 12.94 KB | 0644 |
|
config_ipset.py | File | 17.99 KB | 0644 |
|
config_ipset.pyc | File | 15.89 KB | 0644 |
|
config_ipset.pyo | File | 15.89 KB | 0644 |
|
config_service.py | File | 26.19 KB | 0644 |
|
config_service.pyc | File | 22.86 KB | 0644 |
|
config_service.pyo | File | 22.86 KB | 0644 |
|
config_zone.py | File | 41.8 KB | 0644 |
|
config_zone.pyc | File | 36.55 KB | 0644 |
|
config_zone.pyo | File | 36.55 KB | 0644 |
|
decorators.py | File | 2.94 KB | 0644 |
|
decorators.pyc | File | 2.59 KB | 0644 |
|
decorators.pyo | File | 2.59 KB | 0644 |
|
firewalld.py | File | 107.23 KB | 0644 |
|
firewalld.pyc | File | 85.28 KB | 0644 |
|
firewalld.pyo | File | 85.28 KB | 0644 |
|
server.py | File | 3.74 KB | 0644 |
|
server.pyc | File | 3.02 KB | 0644 |
|
server.pyo | File | 3.02 KB | 0644 |
|