Blame src/firewall/errors.py

Packit a8ec6b
# -*- coding: utf-8 -*-
Packit a8ec6b
#
Packit a8ec6b
# Copyright (C) 2010-2012 Red Hat, Inc.
Packit a8ec6b
#
Packit a8ec6b
# Authors:
Packit a8ec6b
# Thomas Woerner <twoerner@redhat.com>
Packit a8ec6b
#
Packit a8ec6b
# This program is free software; you can redistribute it and/or modify
Packit a8ec6b
# it under the terms of the GNU General Public License as published by
Packit a8ec6b
# the Free Software Foundation; either version 2 of the License, or
Packit a8ec6b
# (at your option) any later version.
Packit a8ec6b
#
Packit a8ec6b
# This program is distributed in the hope that it will be useful,
Packit a8ec6b
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a8ec6b
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit a8ec6b
# GNU General Public License for more details.
Packit a8ec6b
#
Packit a8ec6b
# You should have received a copy of the GNU General Public License
Packit a8ec6b
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit a8ec6b
#
Packit a8ec6b
Packit a8ec6b
ALREADY_ENABLED     =   11
Packit a8ec6b
NOT_ENABLED         =   12
Packit a8ec6b
COMMAND_FAILED      =   13
Packit a8ec6b
NO_IPV6_NAT         =   14
Packit a8ec6b
PANIC_MODE          =   15
Packit a8ec6b
ZONE_ALREADY_SET    =   16
Packit a8ec6b
UNKNOWN_INTERFACE   =   17
Packit a8ec6b
ZONE_CONFLICT       =   18
Packit a8ec6b
BUILTIN_CHAIN       =   19
Packit a8ec6b
EBTABLES_NO_REJECT  =   20
Packit a8ec6b
NOT_OVERLOADABLE    =   21
Packit a8ec6b
NO_DEFAULTS         =   22
Packit a8ec6b
BUILTIN_ZONE        =   23
Packit a8ec6b
BUILTIN_SERVICE     =   24
Packit a8ec6b
BUILTIN_ICMPTYPE    =   25
Packit a8ec6b
NAME_CONFLICT       =   26
Packit a8ec6b
NAME_MISMATCH       =   27
Packit a8ec6b
PARSE_ERROR         =   28
Packit a8ec6b
ACCESS_DENIED       =   29
Packit a8ec6b
UNKNOWN_SOURCE      =   30
Packit a8ec6b
RT_TO_PERM_FAILED   =   31
Packit a8ec6b
IPSET_WITH_TIMEOUT  =   32
Packit a8ec6b
BUILTIN_IPSET       =   33
Packit a8ec6b
ALREADY_SET         =   34
Packit a8ec6b
MISSING_IMPORT      =   35
Packit a8ec6b
DBUS_ERROR          =   36
Packit a8ec6b
BUILTIN_HELPER      =   37
Packit a8ec6b
NOT_APPLIED         =   38
Packit a8ec6b
Packit a8ec6b
INVALID_ACTION      =  100
Packit a8ec6b
INVALID_SERVICE     =  101
Packit a8ec6b
INVALID_PORT        =  102
Packit a8ec6b
INVALID_PROTOCOL    =  103
Packit a8ec6b
INVALID_INTERFACE   =  104
Packit a8ec6b
INVALID_ADDR        =  105
Packit a8ec6b
INVALID_FORWARD     =  106
Packit a8ec6b
INVALID_ICMPTYPE    =  107
Packit a8ec6b
INVALID_TABLE       =  108
Packit a8ec6b
INVALID_CHAIN       =  109
Packit a8ec6b
INVALID_TARGET      =  110
Packit a8ec6b
INVALID_IPV         =  111
Packit a8ec6b
INVALID_ZONE        =  112
Packit a8ec6b
INVALID_PROPERTY    =  113
Packit a8ec6b
INVALID_VALUE       =  114
Packit a8ec6b
INVALID_OBJECT      =  115
Packit a8ec6b
INVALID_NAME        =  116
Packit a8ec6b
INVALID_FILENAME    =  117
Packit a8ec6b
INVALID_DIRECTORY   =  118
Packit a8ec6b
INVALID_TYPE        =  119
Packit a8ec6b
INVALID_SETTING     =  120
Packit a8ec6b
INVALID_DESTINATION =  121
Packit a8ec6b
INVALID_RULE        =  122
Packit a8ec6b
INVALID_LIMIT       =  123
Packit a8ec6b
INVALID_FAMILY      =  124
Packit a8ec6b
INVALID_LOG_LEVEL   =  125
Packit a8ec6b
INVALID_AUDIT_TYPE  =  126
Packit a8ec6b
INVALID_MARK        =  127
Packit a8ec6b
INVALID_CONTEXT     =  128
Packit a8ec6b
INVALID_COMMAND     =  129
Packit a8ec6b
INVALID_USER        =  130
Packit a8ec6b
INVALID_UID         =  131
Packit a8ec6b
INVALID_MODULE      =  132
Packit a8ec6b
INVALID_PASSTHROUGH =  133
Packit a8ec6b
INVALID_MAC         =  134
Packit a8ec6b
INVALID_IPSET       =  135
Packit a8ec6b
INVALID_ENTRY       =  136
Packit a8ec6b
INVALID_OPTION      =  137
Packit a8ec6b
INVALID_HELPER      =  138
Packit a8ec6b
INVALID_PRIORITY    =  139
Packit Service 161ac8
INVALID_POLICY      =  140
Packit a8ec6b
Packit a8ec6b
MISSING_TABLE       =  200
Packit a8ec6b
MISSING_CHAIN       =  201
Packit a8ec6b
MISSING_PORT        =  202
Packit a8ec6b
MISSING_PROTOCOL    =  203
Packit a8ec6b
MISSING_ADDR        =  204
Packit a8ec6b
MISSING_NAME        =  205
Packit a8ec6b
MISSING_SETTING     =  206
Packit a8ec6b
MISSING_FAMILY      =  207
Packit a8ec6b
Packit a8ec6b
RUNNING_BUT_FAILED  =  251
Packit a8ec6b
NOT_RUNNING         =  252
Packit a8ec6b
NOT_AUTHORIZED      =  253
Packit a8ec6b
UNKNOWN_ERROR       =  254
Packit a8ec6b
Packit a8ec6b
import sys
Packit a8ec6b
Packit a8ec6b
class FirewallError(Exception):
Packit a8ec6b
    def __init__(self, code, msg=None):
Packit a8ec6b
        self.code = code
Packit a8ec6b
        if msg is not None:
Packit a8ec6b
            # escape msg if needed
Packit a8ec6b
            if sys.version < '3':
Packit a8ec6b
                try:
Packit a8ec6b
                    x = str(msg) # noqa: F841
Packit a8ec6b
                except UnicodeEncodeError:
Packit a8ec6b
                    msg = unicode(msg).encode("unicode_escape") # noqa: F821
Packit a8ec6b
        self.msg = msg
Packit a8ec6b
Packit a8ec6b
    def __repr__(self):
Packit a8ec6b
        return '%s(%r, %r)' % (self.__class__, self.code, self.msg)
Packit a8ec6b
Packit a8ec6b
    def __str__(self):
Packit a8ec6b
        if self.msg:
Packit a8ec6b
            return "%s: %s" % (self.errors[self.code], self.msg)
Packit a8ec6b
        return self.errors[self.code]
Packit a8ec6b
Packit a8ec6b
    def get_code(msg):
Packit a8ec6b
        if ":" in msg:
Packit a8ec6b
            idx = msg.index(":")
Packit a8ec6b
            ecode = msg[:idx]
Packit a8ec6b
        else:
Packit a8ec6b
            ecode = msg
Packit a8ec6b
Packit a8ec6b
        try:
Packit a8ec6b
            code = FirewallError.codes[ecode]
Packit a8ec6b
        except KeyError:
Packit a8ec6b
            code = UNKNOWN_ERROR
Packit a8ec6b
Packit a8ec6b
        return code
Packit a8ec6b
Packit a8ec6b
    get_code = staticmethod(get_code)
Packit a8ec6b
Packit a8ec6b
mod = sys.modules[FirewallError.__module__]
Packit a8ec6b
FirewallError.errors = { getattr(mod,varname) : varname
Packit a8ec6b
                         for varname in dir(mod)
Packit a8ec6b
                         if not varname.startswith("_") and \
Packit a8ec6b
                         type(getattr(mod,varname)) == int }
Packit a8ec6b
FirewallError.codes =  { FirewallError.errors[code] : code
Packit a8ec6b
                         for code in FirewallError.errors }