p!ranha?
Server IP : 103.169.32.36  /  Your IP : 216.73.217.13
Web Server : Apache
System : Linux web.dpmptsp 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 5.6.40
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python2.7/site-packages/firewall/core/

Upload File :
Curr3nt_D!r [ Writeable ] D0cum3nt_r0Ot [ Writeable ]

 
Command :
Current File : /lib/python2.7/site-packages/firewall/core/fw_ipset.py
# -*- coding: utf-8 -*-
#
# Copyright (C) 2015-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/>.
#

"""ipset backend"""

__all__ = [ "FirewallIPSet" ]

from firewall.core.logger import log
from firewall.core.ipset import remove_default_create_options as rm_def_cr_opts
from firewall.core.io.ipset import IPSet
from firewall import errors
from firewall.errors import FirewallError

class FirewallIPSet(object):
    def __init__(self, fw):
        self._fw = fw
        self._ipsets = { }

    def __repr__(self):
        return '%s(%r)' % (self.__class__, self._ipsets)

    # ipsets

    def cleanup(self):
        self._ipsets.clear()

    def check_ipset(self, name):
        if name not in self.get_ipsets():
            raise FirewallError(errors.INVALID_IPSET, name)

    def query_ipset(self, name):
        return name in self.get_ipsets()

    def get_ipsets(self):
        return sorted(self._ipsets.keys())

    def has_ipsets(self):
        return len(self._ipsets) > 0

    def get_ipset(self, name, applied=False):
        self.check_ipset(name)
        obj = self._ipsets[name]
        if applied:
            self.check_applied_obj(obj)
        return obj

    def _error2warning(self, f, name, *args):
        # transform errors into warnings
        try:
            f(name, *args)
        except FirewallError as error:
            msg = str(error)
            log.warning("%s: %s" % (name, msg))

    def backends(self):
        backends = []
        if self._fw.nftables_enabled:
            backends.append(self._fw.nftables_backend)
        if self._fw.ipset_enabled:
            backends.append(self._fw.ipset_backend)
        return backends

    def add_ipset(self, obj):
        if obj.type not in self._fw.ipset_supported_types:
            raise FirewallError(errors.INVALID_TYPE,
                                "'%s' is not supported by ipset." % obj.type)
        self._ipsets[obj.name] = obj

    def remove_ipset(self, name, keep=False):
        obj = self._ipsets[name]
        if obj.applied and not keep:
            try:
                for backend in self.backends():
                    backend.set_destroy(name)
            except Exception as msg:
                raise FirewallError(errors.COMMAND_FAILED, msg)
        else:
            log.debug1("Keeping ipset '%s' because of timeout option", name)
        del self._ipsets[name]

    def apply_ipsets(self):
        for name in self.get_ipsets():
            obj = self._ipsets[name]
            obj.applied = False

            log.debug1("Applying ipset '%s'" % name)

            for backend in self.backends():
                if backend.name == "ipset":
                    active = backend.set_get_active_terse()

                    if name in active and ("timeout" not in obj.options or \
                                           obj.options["timeout"] == "0" or \
                                           obj.type != active[name][0] or \
                                           rm_def_cr_opts(obj.options) != \
                                           active[name][1]):
                        try:
                            backend.set_destroy(name)
                        except Exception as msg:
                            raise FirewallError(errors.COMMAND_FAILED, msg)

                if self._fw.individual_calls() \
                   or backend.name == "nftables":
                    try:
                        backend.set_create(obj.name, obj.type, obj.options)
                    except Exception as msg:
                        raise FirewallError(errors.COMMAND_FAILED, msg)
                    else:
                        obj.applied = True
                        if "timeout" in obj.options and \
                           obj.options["timeout"] != "0":
                            # no entries visible for ipsets with timeout
                            continue

                    for entry in obj.entries:
                        try:
                            backend.set_add(obj.name, entry)
                        except Exception as msg:
                            raise FirewallError(errors.COMMAND_FAILED, msg)
                else:
                    try:
                        backend.set_restore(obj.name, obj.type,
                                                       obj.entries, obj.options,
                                                       None)
                    except Exception as msg:
                        raise FirewallError(errors.COMMAND_FAILED, msg)
                    else:
                        obj.applied = True

    # TYPE

    def get_type(self, name):
        return self.get_ipset(name, applied=True).type

    # DIMENSION
    def get_dimension(self, name):
        return len(self.get_ipset(name, applied=True).type.split(","))

    def check_applied(self, name):
        obj = self.get_ipset(name)
        self.check_applied_obj(obj)

    def check_applied_obj(self, obj):
        if not obj.applied:
            raise FirewallError(
                errors.NOT_APPLIED, obj.name)

    # OPTIONS

    def get_family(self, name):
        obj = self.get_ipset(name, applied=True)
        if "family" in obj.options:
            if obj.options["family"] == "inet6":
                return "ipv6"
        return "ipv4"

    # ENTRIES

    def __entry_id(self, entry):
        return entry

    def __entry(self, enable, name, entry):
        pass

    def add_entry(self, name, entry):
        obj = self.get_ipset(name, applied=True)

        IPSet.check_entry(entry, obj.options, obj.type)
        if entry in obj.entries:
            raise FirewallError(errors.ALREADY_ENABLED,
                                "'%s' already is in '%s'" % (entry, name))

        try:
            for backend in self.backends():
                backend.set_add(obj.name, entry)
        except Exception as msg:
            raise FirewallError(errors.COMMAND_FAILED, msg)
        else:
            if "timeout" not in obj.options or obj.options["timeout"] == "0" \
               and entry not in obj.entries:
                # no entries visible for ipsets with timeout
                obj.entries.append(entry)

    def remove_entry(self, name, entry):
        obj = self.get_ipset(name, applied=True)

        # no entry check for removal
        if entry not in obj.entries:
            raise FirewallError(errors.NOT_ENABLED,
                                "'%s' not in '%s'" % (entry, name))
        try:
            for backend in self.backends():
                backend.set_delete(obj.name, entry)
        except Exception as msg:
            raise FirewallError(errors.COMMAND_FAILED, msg)
        else:
            if "timeout" not in obj.options or obj.options["timeout"] == "0" \
               and entry not in obj.entries:
                # no entries visible for ipsets with timeout
                obj.entries.remove(entry)

    def query_entry(self, name, entry):
        obj = self.get_ipset(name, applied=True)
        if "timeout" in obj.options and obj.options["timeout"] != "0":
            # no entries visible for ipsets with timeout
            raise FirewallError(errors.IPSET_WITH_TIMEOUT, name)

        return entry in obj.entries

    def get_entries(self, name):
        obj = self.get_ipset(name, applied=True)
        return obj.entries

    def set_entries(self, name, entries):
        obj = self.get_ipset(name, applied=True)

        for entry in entries:
            IPSet.check_entry(entry, obj.options, obj.type)
        if "timeout" not in obj.options or obj.options["timeout"] == "0":
            # no entries visible for ipsets with timeout
            obj.entries = entries

        try:
            for backend in self.backends():
                backend.set_flush(obj.name)
        except Exception as msg:
            raise FirewallError(errors.COMMAND_FAILED, msg)
        else:
            obj.applied = True

        try:
            for backend in self.backends():
                if self._fw.individual_calls() \
                   or backend.name == "nftables":
                    for entry in obj.entries:
                        backend.set_add(obj.name, entry)
                else:
                    backend.set_restore(obj.name, obj.type, obj.entries,
                                                   obj.options, None)
        except Exception as msg:
            raise FirewallError(errors.COMMAND_FAILED, msg)
        else:
            obj.applied = True

        return
N4m3
5!z3
L45t M0d!f!3d
0wn3r / Gr0up
P3Rm!55!0n5
0pt!0n5
..
--
December 20 2023 04:52:59
0 / 0
0755
io
--
December 20 2023 04:52:59
0 / 0
0755
__init__.py
0 KB
April 28 2021 13:31:12
0 / 0
0644
__init__.pyc
0.142 KB
April 28 2021 13:31:13
0 / 0
0644
__init__.pyo
0.142 KB
April 28 2021 13:31:13
0 / 0
0644
base.py
1.936 KB
April 28 2021 13:31:12
0 / 0
0644
base.pyc
1.29 KB
April 28 2021 13:31:13
0 / 0
0644
base.pyo
1.29 KB
April 28 2021 13:31:13
0 / 0
0644
ebtables.py
9.128 KB
April 28 2021 13:31:12
0 / 0
0644
ebtables.pyc
9.036 KB
April 28 2021 13:31:13
0 / 0
0644
ebtables.pyo
9.036 KB
April 28 2021 13:31:13
0 / 0
0644
fw.py
43.706 KB
April 28 2021 13:31:12
0 / 0
0644
fw.pyc
30.673 KB
April 28 2021 13:31:13
0 / 0
0644
fw.pyo
30.673 KB
April 28 2021 13:31:13
0 / 0
0644
fw_config.py
35.99 KB
April 28 2021 13:31:12
0 / 0
0644
fw_config.pyc
30.686 KB
April 28 2021 13:31:13
0 / 0
0644
fw_config.pyo
30.686 KB
April 28 2021 13:31:13
0 / 0
0644
fw_direct.py
20.115 KB
April 28 2021 13:31:12
0 / 0
0644
fw_direct.pyc
14.772 KB
April 28 2021 13:31:13
0 / 0
0644
fw_direct.pyo
14.772 KB
April 28 2021 13:31:13
0 / 0
0644
fw_helper.py
1.79 KB
April 28 2021 13:31:12
0 / 0
0644
fw_helper.pyc
2.57 KB
April 28 2021 13:31:13
0 / 0
0644
fw_helper.pyo
2.57 KB
April 28 2021 13:31:13
0 / 0
0644
fw_icmptype.py
2.773 KB
April 28 2021 13:31:12
0 / 0
0644
fw_icmptype.pyc
2.995 KB
April 28 2021 13:31:13
0 / 0
0644
fw_icmptype.pyo
2.995 KB
April 28 2021 13:31:13
0 / 0
0644
fw_ifcfg.py
2.502 KB
April 28 2021 13:31:12
0 / 0
0644
fw_ifcfg.pyc
1.838 KB
April 28 2021 13:31:13
0 / 0
0644
fw_ifcfg.pyo
1.838 KB
April 28 2021 13:31:13
0 / 0
0644
fw_ipset.py
8.96 KB
April 28 2021 13:31:12
0 / 0
0644
fw_ipset.pyc
9.018 KB
April 28 2021 13:31:13
0 / 0
0644
fw_ipset.pyo
9.018 KB
April 28 2021 13:31:13
0 / 0
0644
fw_nm.py
6.494 KB
April 28 2021 13:31:12
0 / 0
0644
fw_nm.pyc
5.929 KB
April 28 2021 13:31:13
0 / 0
0644
fw_nm.pyo
5.929 KB
April 28 2021 13:31:13
0 / 0
0644
fw_policies.py
2.737 KB
April 28 2021 13:31:12
0 / 0
0644
fw_policies.pyc
2.941 KB
April 28 2021 13:31:13
0 / 0
0644
fw_policies.pyo
2.941 KB
April 28 2021 13:31:13
0 / 0
0644
fw_service.py
1.601 KB
April 28 2021 13:31:12
0 / 0
0644
fw_service.pyc
2.145 KB
April 28 2021 13:31:13
0 / 0
0644
fw_service.pyo
2.145 KB
April 28 2021 13:31:13
0 / 0
0644
fw_test.py
22.056 KB
April 28 2021 13:31:12
0 / 0
0644
fw_test.pyc
17.445 KB
April 28 2021 13:31:13
0 / 0
0644
fw_test.pyo
17.445 KB
April 28 2021 13:31:13
0 / 0
0644
fw_transaction.py
10.539 KB
April 28 2021 13:31:12
0 / 0
0644
fw_transaction.pyc
10.958 KB
April 28 2021 13:31:13
0 / 0
0644
fw_transaction.pyo
10.958 KB
April 28 2021 13:31:13
0 / 0
0644
fw_zone.py
75.604 KB
April 28 2021 13:31:12
0 / 0
0644
fw_zone.pyc
57.309 KB
April 28 2021 13:31:13
0 / 0
0644
fw_zone.pyo
57.309 KB
April 28 2021 13:31:13
0 / 0
0644
helper.py
0.785 KB
April 28 2021 13:31:12
0 / 0
0644
helper.pyc
0.217 KB
April 28 2021 13:31:13
0 / 0
0644
helper.pyo
0.217 KB
April 28 2021 13:31:13
0 / 0
0644
icmp.py
3.028 KB
April 28 2021 13:31:12
0 / 0
0644
icmp.pyc
2.894 KB
April 28 2021 13:31:13
0 / 0
0644
icmp.pyo
2.894 KB
April 28 2021 13:31:13
0 / 0
0644
ipXtables.py
47.679 KB
April 28 2021 13:31:12
0 / 0
0644
ipXtables.pyc
34.804 KB
April 28 2021 13:31:13
0 / 0
0644
ipXtables.pyo
34.804 KB
April 28 2021 13:31:13
0 / 0
0644
ipset.py
9.1 KB
April 28 2021 13:31:12
0 / 0
0644
ipset.pyc
9.15 KB
April 28 2021 13:31:13
0 / 0
0644
ipset.pyo
9.15 KB
April 28 2021 13:31:13
0 / 0
0644
logger.py
30.311 KB
April 28 2021 13:31:12
0 / 0
0644
logger.pyc
27.429 KB
April 28 2021 13:31:13
0 / 0
0644
logger.pyo
27.429 KB
April 28 2021 13:31:13
0 / 0
0644
modules.py
3.627 KB
April 28 2021 13:31:12
0 / 0
0644
modules.pyc
3.563 KB
April 28 2021 13:31:13
0 / 0
0644
modules.pyo
3.563 KB
April 28 2021 13:31:13
0 / 0
0644
nftables.py
60.549 KB
April 28 2021 13:31:12
0 / 0
0644
nftables.pyc
38.556 KB
April 28 2021 13:31:13
0 / 0
0644
nftables.pyo
38.556 KB
April 28 2021 13:31:13
0 / 0
0644
prog.py
1.475 KB
April 28 2021 13:31:12
0 / 0
0644
prog.pyc
0.965 KB
April 28 2021 13:31:13
0 / 0
0644
prog.pyo
0.965 KB
April 28 2021 13:31:13
0 / 0
0644
rich.py
29.336 KB
April 28 2021 13:31:12
0 / 0
0644
rich.pyc
23.73 KB
April 28 2021 13:31:13
0 / 0
0644
rich.pyo
23.73 KB
April 28 2021 13:31:13
0 / 0
0644
watcher.py
3.152 KB
April 28 2021 13:31:12
0 / 0
0644
watcher.pyc
3.549 KB
April 28 2021 13:31:13
0 / 0
0644
watcher.pyo
3.549 KB
April 28 2021 13:31:13
0 / 0
0644