ENH+BF+TST+DOC: Make fail2ban a python module

pull/165/head
Steven Hiscocks 2013-03-31 18:18:21 +01:00
parent 74e76e068c
commit dba88e842f
54 changed files with 97 additions and 113 deletions

View File

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

View File

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

View File

@ -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")

View File

@ -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")

View File

@ -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")

View File

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

View File

@ -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")

View File

@ -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")

View File

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

View File

@ -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.

View File

@ -1,6 +1,3 @@
[install]
install-purelib=/usr/share/fail2ban
[sdist] [sdist]
formats=bztar formats=bztar

View File

@ -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/."

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

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

View File

@ -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):

View File

@ -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):