mirror of https://github.com/fail2ban/fail2ban
ENH+BF+TST+DOC: Make fail2ban a python module
parent
74e76e068c
commit
dba88e842f
4
DEVELOP
4
DEVELOP
|
@ -249,7 +249,7 @@ Takes care about executing start/check/ban/unban/stop commands
|
||||||
Releasing
|
Releasing
|
||||||
=========
|
=========
|
||||||
|
|
||||||
# Ensure the version is correct in ./common/version.py
|
# Ensure the version is correct in ./fail2ban/version.py
|
||||||
|
|
||||||
# Add/finalize the corresponding entry in the ChangeLog
|
# Add/finalize the corresponding entry in the ChangeLog
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ Releasing
|
||||||
|
|
||||||
# Run the following and update the wiki with output:
|
# Run the following and update the wiki with output:
|
||||||
|
|
||||||
python -c 'import common.protocol; common.protocol.printWiki()'
|
python -c 'import fail2ban.protocol; fail2ban.protocol.printWiki()'
|
||||||
|
|
||||||
# Email users and development list of release
|
# Email users and development list of release
|
||||||
|
|
||||||
|
|
76
MANIFEST
76
MANIFEST
|
@ -9,39 +9,39 @@ fail2ban-client
|
||||||
fail2ban-server
|
fail2ban-server
|
||||||
fail2ban-testcases
|
fail2ban-testcases
|
||||||
fail2ban-regex
|
fail2ban-regex
|
||||||
client/configreader.py
|
fail2ban/client/configreader.py
|
||||||
client/configparserinc.py
|
fail2ban/client/configparserinc.py
|
||||||
client/jailreader.py
|
fail2ban/client/jailreader.py
|
||||||
client/fail2banreader.py
|
fail2ban/client/fail2banreader.py
|
||||||
client/jailsreader.py
|
fail2ban/client/jailsreader.py
|
||||||
client/beautifier.py
|
fail2ban/client/beautifier.py
|
||||||
client/filterreader.py
|
fail2ban/client/filterreader.py
|
||||||
client/actionreader.py
|
fail2ban/client/actionreader.py
|
||||||
client/__init__.py
|
fail2ban/client/__init__.py
|
||||||
client/configurator.py
|
fail2ban/client/configurator.py
|
||||||
client/csocket.py
|
fail2ban/client/csocket.py
|
||||||
server/asyncserver.py
|
fail2ban/server/asyncserver.py
|
||||||
server/filter.py
|
fail2ban/server/filter.py
|
||||||
server/filterpyinotify.py
|
fail2ban/server/filterpyinotify.py
|
||||||
server/filtergamin.py
|
fail2ban/server/filtergamin.py
|
||||||
server/filterpoll.py
|
fail2ban/server/filterpoll.py
|
||||||
server/iso8601.py
|
fail2ban/server/iso8601.py
|
||||||
server/server.py
|
fail2ban/server/server.py
|
||||||
server/actions.py
|
fail2ban/server/actions.py
|
||||||
server/faildata.py
|
fail2ban/server/faildata.py
|
||||||
server/failmanager.py
|
fail2ban/server/failmanager.py
|
||||||
server/datedetector.py
|
fail2ban/server/datedetector.py
|
||||||
server/jailthread.py
|
fail2ban/server/jailthread.py
|
||||||
server/transmitter.py
|
fail2ban/server/transmitter.py
|
||||||
server/action.py
|
fail2ban/server/action.py
|
||||||
server/ticket.py
|
fail2ban/server/ticket.py
|
||||||
server/jail.py
|
fail2ban/server/jail.py
|
||||||
server/jails.py
|
fail2ban/server/jails.py
|
||||||
server/__init__.py
|
fail2ban/server/__init__.py
|
||||||
server/banmanager.py
|
fail2ban/server/banmanager.py
|
||||||
server/datetemplate.py
|
fail2ban/server/datetemplate.py
|
||||||
server/mytime.py
|
fail2ban/server/mytime.py
|
||||||
server/failregex.py
|
fail2ban/server/failregex.py
|
||||||
testcases/files/testcase-usedns.log
|
testcases/files/testcase-usedns.log
|
||||||
testcases/banmanagertestcase.py
|
testcases/banmanagertestcase.py
|
||||||
testcases/failmanagertestcase.py
|
testcases/failmanagertestcase.py
|
||||||
|
@ -58,11 +58,11 @@ testcases/files/testcase03.log
|
||||||
testcases/files/testcase04.log
|
testcases/files/testcase04.log
|
||||||
setup.py
|
setup.py
|
||||||
setup.cfg
|
setup.cfg
|
||||||
common/__init__.py
|
fail2ban/__init__.py
|
||||||
common/exceptions.py
|
fail2ban/exceptions.py
|
||||||
common/helpers.py
|
fail2ban/helpers.py
|
||||||
common/version.py
|
fail2ban/version.py
|
||||||
common/protocol.py
|
fail2ban/protocol.py
|
||||||
config/jail.conf
|
config/jail.conf
|
||||||
config/filter.d/common.conf
|
config/filter.d/common.conf
|
||||||
config/filter.d/apache-auth.conf
|
config/filter.d/apache-auth.conf
|
||||||
|
|
|
@ -25,19 +25,11 @@ __license__ = "GPL"
|
||||||
import sys, string, os, pickle, re, logging, signal
|
import sys, string, os, pickle, re, logging, signal
|
||||||
import getopt, time, shlex, socket
|
import getopt, time, shlex, socket
|
||||||
|
|
||||||
# Inserts our own modules path first in the list
|
from fail2ban.version import version
|
||||||
# fix for bug #343821
|
from fail2ban.protocol import printFormatted
|
||||||
try:
|
from fail2ban.client.csocket import CSocket
|
||||||
from common.version import version
|
from fail2ban.client.configurator import Configurator
|
||||||
except ImportError, e:
|
from fail2ban.client.beautifier import Beautifier
|
||||||
sys.path.insert(1, "/usr/share/fail2ban")
|
|
||||||
from common.version import version
|
|
||||||
|
|
||||||
# Now we can import the rest of modules
|
|
||||||
from common.protocol import printFormatted
|
|
||||||
from client.csocket import CSocket
|
|
||||||
from client.configurator import Configurator
|
|
||||||
from client.beautifier import Beautifier
|
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban.client")
|
logSys = logging.getLogger("fail2ban.client")
|
||||||
|
|
|
@ -23,19 +23,12 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2012 Yaroslav Halchenko"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import getopt, sys, time, logging, os
|
import getopt, sys, time, logging, os
|
||||||
|
|
||||||
# Inserts our own modules path first in the list
|
|
||||||
# fix for bug #343821
|
|
||||||
try:
|
|
||||||
from common.version import version
|
|
||||||
except ImportError, e:
|
|
||||||
sys.path.insert(1, "/usr/share/fail2ban")
|
|
||||||
from common.version import version
|
|
||||||
|
|
||||||
from client.configparserinc import SafeConfigParserWithIncludes
|
|
||||||
from ConfigParser import NoOptionError, NoSectionError, MissingSectionHeaderError
|
from ConfigParser import NoOptionError, NoSectionError, MissingSectionHeaderError
|
||||||
from server.filter import Filter
|
|
||||||
from server.failregex import RegexException
|
from fail2ban.version import version
|
||||||
|
from fail2ban.client.configparserinc import SafeConfigParserWithIncludes
|
||||||
|
from fail2ban.server.filter import Filter
|
||||||
|
from fail2ban.server.failregex import RegexException
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban.regex")
|
logSys = logging.getLogger("fail2ban.regex")
|
||||||
|
|
|
@ -24,15 +24,8 @@ __license__ = "GPL"
|
||||||
|
|
||||||
import getopt, sys, logging, os
|
import getopt, sys, logging, os
|
||||||
|
|
||||||
# Inserts our own modules path first in the list
|
from fail2ban.version import version
|
||||||
# fix for bug #343821
|
from fail2ban.server.server import Server
|
||||||
try:
|
|
||||||
from common.version import version
|
|
||||||
except ImportError, e:
|
|
||||||
sys.path.insert(1, "/usr/share/fail2ban")
|
|
||||||
from common.version import version
|
|
||||||
|
|
||||||
from server.server import Server
|
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban")
|
logSys = logging.getLogger("fail2ban")
|
||||||
|
|
|
@ -27,7 +27,7 @@ __license__ = "GPL"
|
||||||
|
|
||||||
import unittest, logging, sys, time, os
|
import unittest, logging, sys, time, os
|
||||||
|
|
||||||
from common.version import version
|
from fail2ban.version import version
|
||||||
from testcases import banmanagertestcase
|
from testcases import banmanagertestcase
|
||||||
from testcases import clientreadertestcase
|
from testcases import clientreadertestcase
|
||||||
from testcases import failmanagertestcase
|
from testcases import failmanagertestcase
|
||||||
|
@ -38,7 +38,7 @@ from testcases import actiontestcase
|
||||||
from testcases import sockettestcase
|
from testcases import sockettestcase
|
||||||
|
|
||||||
from testcases.utils import FormatterWithTraceBack
|
from testcases.utils import FormatterWithTraceBack
|
||||||
from server.mytime import MyTime
|
from fail2ban.server.mytime import MyTime
|
||||||
|
|
||||||
from optparse import OptionParser, Option
|
from optparse import OptionParser, Option
|
||||||
|
|
||||||
|
@ -168,20 +168,20 @@ tests.addTest(unittest.makeSuite(datedetectortestcase.DateDetectorTest))
|
||||||
# Extensive use-tests of different available filters backends
|
# Extensive use-tests of different available filters backends
|
||||||
#
|
#
|
||||||
|
|
||||||
from server.filterpoll import FilterPoll
|
from fail2ban.server.filterpoll import FilterPoll
|
||||||
filters = [FilterPoll] # always available
|
filters = [FilterPoll] # always available
|
||||||
|
|
||||||
# Additional filters available only if external modules are available
|
# Additional filters available only if external modules are available
|
||||||
# yoh: Since I do not know better way for parametric tests
|
# yoh: Since I do not know better way for parametric tests
|
||||||
# with good old unittest
|
# with good old unittest
|
||||||
try:
|
try:
|
||||||
from server.filtergamin import FilterGamin
|
from fail2ban.server.filtergamin import FilterGamin
|
||||||
filters.append(FilterGamin)
|
filters.append(FilterGamin)
|
||||||
except Exception, e: # pragma: no cover
|
except Exception, e: # pragma: no cover
|
||||||
print "I: Skipping gamin backend testing. Got exception '%s'" % e
|
print "I: Skipping gamin backend testing. Got exception '%s'" % e
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from server.filterpyinotify import FilterPyinotify
|
from fail2ban.server.filterpyinotify import FilterPyinotify
|
||||||
filters.append(FilterPyinotify)
|
filters.append(FilterPyinotify)
|
||||||
except Exception, e: # pragma: no cover
|
except Exception, e: # pragma: no cover
|
||||||
print "I: Skipping pyinotify backend testing. Got exception '%s'" % e
|
print "I: Skipping pyinotify backend testing. Got exception '%s'" % e
|
||||||
|
|
|
@ -23,7 +23,7 @@ __license__ = "GPL"
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from common.exceptions import UnknownJailException, DuplicateJailException
|
from fail2ban.exceptions import UnknownJailException, DuplicateJailException
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban.client.config")
|
logSys = logging.getLogger("fail2ban.client.config")
|
|
@ -28,9 +28,10 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
from pickle import dumps, loads, HIGHEST_PROTOCOL
|
from pickle import dumps, loads, HIGHEST_PROTOCOL
|
||||||
from common import helpers
|
|
||||||
import asyncore, asynchat, socket, os, logging, sys, traceback
|
import asyncore, asynchat, socket, os, logging, sys, traceback
|
||||||
|
|
||||||
|
from fail2ban import helpers
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban.server")
|
logSys = logging.getLogger("fail2ban.server")
|
||||||
|
|
|
@ -21,7 +21,7 @@ __author__ = "Cyril Jaquier, Yaroslav Halchenko"
|
||||||
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2013- Yaroslav Halchenko"
|
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2013- Yaroslav Halchenko"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
from common.exceptions import DuplicateJailException, UnknownJailException
|
from fail2ban.exceptions import DuplicateJailException, UnknownJailException
|
||||||
|
|
||||||
from jail import Jail
|
from jail import Jail
|
||||||
from threading import Lock
|
from threading import Lock
|
|
@ -32,7 +32,7 @@ from jails import Jails
|
||||||
from transmitter import Transmitter
|
from transmitter import Transmitter
|
||||||
from asyncserver import AsyncServer
|
from asyncserver import AsyncServer
|
||||||
from asyncserver import AsyncServerException
|
from asyncserver import AsyncServerException
|
||||||
from common import version
|
from fail2ban import version
|
||||||
import logging, logging.handlers, sys, os, signal
|
import logging, logging.handlers, sys, os, signal
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
|
@ -1,6 +1,3 @@
|
||||||
[install]
|
|
||||||
install-purelib=/usr/share/fail2ban
|
|
||||||
|
|
||||||
[sdist]
|
[sdist]
|
||||||
formats=bztar
|
formats=bztar
|
||||||
|
|
||||||
|
|
15
setup.py
15
setup.py
|
@ -23,11 +23,12 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
from common.version import version
|
|
||||||
from os.path import isfile, join, isdir
|
from os.path import isfile, join, isdir
|
||||||
from sys import argv
|
import sys
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
|
from fail2ban.version import version
|
||||||
|
|
||||||
longdesc = '''
|
longdesc = '''
|
||||||
Fail2Ban scans log files like /var/log/pwdfail or
|
Fail2Ban scans log files like /var/log/pwdfail or
|
||||||
/var/log/apache/error_log and bans IP that makes
|
/var/log/apache/error_log and bans IP that makes
|
||||||
|
@ -38,7 +39,7 @@ commands.'''
|
||||||
setup(
|
setup(
|
||||||
name = "fail2ban",
|
name = "fail2ban",
|
||||||
version = version,
|
version = version,
|
||||||
description = "Ban IPs that make too many password failure",
|
description = "Ban IPs that make too many password failures",
|
||||||
long_description = longdesc,
|
long_description = longdesc,
|
||||||
author = "Cyril Jaquier",
|
author = "Cyril Jaquier",
|
||||||
author_email = "cyril.jaquier@fail2ban.org",
|
author_email = "cyril.jaquier@fail2ban.org",
|
||||||
|
@ -51,9 +52,9 @@ setup(
|
||||||
'fail2ban-regex'
|
'fail2ban-regex'
|
||||||
],
|
],
|
||||||
packages = [
|
packages = [
|
||||||
'common',
|
'fail2ban',
|
||||||
'client',
|
'fail2ban.client',
|
||||||
'server'
|
'fail2ban.server'
|
||||||
],
|
],
|
||||||
data_files = [
|
data_files = [
|
||||||
('/etc/fail2ban',
|
('/etc/fail2ban',
|
||||||
|
@ -117,7 +118,7 @@ if isdir("/usr/lib/fail2ban"):
|
||||||
print
|
print
|
||||||
|
|
||||||
# Update config file
|
# Update config file
|
||||||
if argv[1] == "install":
|
if sys.argv[1] == "install":
|
||||||
print
|
print
|
||||||
print "Please do not forget to update your configuration files."
|
print "Please do not forget to update your configuration files."
|
||||||
print "They are in /etc/fail2ban/."
|
print "They are in /etc/fail2ban/."
|
||||||
|
|
|
@ -29,9 +29,10 @@ __license__ = "GPL"
|
||||||
|
|
||||||
import unittest, time
|
import unittest, time
|
||||||
import logging, sys
|
import logging, sys
|
||||||
from server.action import Action
|
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
from fail2ban.server.action import Action
|
||||||
|
|
||||||
class ExecuteAction(unittest.TestCase):
|
class ExecuteAction(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -28,8 +28,9 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from server.banmanager import BanManager
|
|
||||||
from server.ticket import BanTicket
|
from fail2ban.server.banmanager import BanManager
|
||||||
|
from fail2ban.server.ticket import BanTicket
|
||||||
|
|
||||||
class AddFailure(unittest.TestCase):
|
class AddFailure(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,11 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2011-2013 Yaroslav Halchenko"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import os, shutil, tempfile, unittest
|
import os, shutil, tempfile, unittest
|
||||||
from client.configreader import ConfigReader
|
|
||||||
from client.jailreader import JailReader
|
from fail2ban.client.configreader import ConfigReader
|
||||||
from client.jailsreader import JailsReader
|
from fail2ban.client.jailreader import JailReader
|
||||||
from client.configurator import Configurator
|
from fail2ban.client.jailsreader import JailsReader
|
||||||
|
from fail2ban.client.configurator import Configurator
|
||||||
|
|
||||||
class ConfigReaderTest(unittest.TestCase):
|
class ConfigReaderTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,9 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from server.datedetector import DateDetector
|
|
||||||
from server.datetemplate import DateTemplate
|
from fail2ban.server.datedetector import DateDetector
|
||||||
|
from fail2ban.server.datetemplate import DateTemplate
|
||||||
|
|
||||||
class DateDetectorTest(unittest.TestCase):
|
class DateDetectorTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,9 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import unittest, socket, time, pickle
|
import unittest, socket, time, pickle
|
||||||
from server.failmanager import FailManager, FailManagerEmpty
|
|
||||||
from server.ticket import FailTicket
|
from fail2ban.server.failmanager import FailManager, FailManagerEmpty
|
||||||
|
from fail2ban.server.ticket import FailTicket
|
||||||
|
|
||||||
class AddFailure(unittest.TestCase):
|
class AddFailure(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,11 @@ import sys
|
||||||
import time
|
import time
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from server.jail import Jail
|
from fail2ban.server.jail import Jail
|
||||||
from server.filterpoll import FilterPoll
|
from fail2ban.server.filterpoll import FilterPoll
|
||||||
from server.filter import FileFilter, DNSUtils
|
from fail2ban.server.filter import FileFilter, DNSUtils
|
||||||
from server.failmanager import FailManager
|
from fail2ban.server.failmanager import FailManager
|
||||||
from server.failmanager import FailManagerEmpty
|
from fail2ban.server.failmanager import FailManagerEmpty
|
||||||
|
|
||||||
#
|
#
|
||||||
# Useful helpers
|
# Useful helpers
|
||||||
|
|
|
@ -28,8 +28,9 @@ __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import unittest, socket, time, tempfile, os
|
import unittest, socket, time, tempfile, os
|
||||||
from server.server import Server
|
|
||||||
from common.exceptions import UnknownJailException
|
from fail2ban.server.server import Server
|
||||||
|
from fail2ban.exceptions import UnknownJailException
|
||||||
|
|
||||||
class StartStop(unittest.TestCase):
|
class StartStop(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,9 @@ __copyright__ = "Copyright (c) 2013 Steven Hiscocks"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import unittest, time, tempfile, os, threading
|
import unittest, time, tempfile, os, threading
|
||||||
from server.asyncserver import AsyncServer, AsyncServerException
|
|
||||||
from client.csocket import CSocket
|
from fail2ban.server.asyncserver import AsyncServer, AsyncServerException
|
||||||
|
from fail2ban.client.csocket import CSocket
|
||||||
|
|
||||||
class Socket(unittest.TestCase):
|
class Socket(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue