|
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 }
|