mirror of https://github.com/fail2ban/fail2ban
compatibility fix (virtualenv, running test cases in py3)
# Conflicts: # MANIFESTpull/1511/head
parent
38d53a72fd
commit
6cdc1ce685
1
MANIFEST
1
MANIFEST
|
@ -194,6 +194,7 @@ fail2ban/server/server.py
|
|||
fail2ban/server/strptime.py
|
||||
fail2ban/server/ticket.py
|
||||
fail2ban/server/transmitter.py
|
||||
fail2ban/setup.py
|
||||
fail2ban-testcases-all
|
||||
fail2ban-testcases-all-python3
|
||||
fail2ban/tests/action_d/__init__.py
|
||||
|
|
|
@ -38,7 +38,8 @@ if os.path.exists("fail2ban/__init__.py"):
|
|||
from fail2ban.version import version
|
||||
|
||||
from fail2ban.tests.utils import gatherTests
|
||||
from fail2ban.helpers import updatePyExec, FormatterWithTraceBack, getLogger
|
||||
from fail2ban.helpers import FormatterWithTraceBack, getLogger
|
||||
from fail2ban.setup import updatePyExec
|
||||
from fail2ban.server.mytime import MyTime
|
||||
|
||||
from optparse import OptionParser, Option
|
||||
|
|
|
@ -113,24 +113,6 @@ class FormatterWithTraceBack(logging.Formatter):
|
|||
return logging.Formatter.format(self, record)
|
||||
|
||||
|
||||
def updatePyExec(bindir, executable=None):
|
||||
"""Update fail2ban-python link to current python version (where f2b-modules located/installed)
|
||||
"""
|
||||
bindir = os.path.realpath(bindir)
|
||||
if executable is None:
|
||||
executable = sys.executable
|
||||
pypath = os.path.join(bindir, 'fail2ban-python')
|
||||
# if not exists or point to another version - update link:
|
||||
isfile = os.path.isfile(pypath)
|
||||
if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
|
||||
if isfile:
|
||||
os.unlink(pypath)
|
||||
os.symlink(executable, pypath)
|
||||
# extend current environment path (e.g. if fail2ban not yet installed):
|
||||
if bindir not in os.environ["PATH"].split(os.pathsep):
|
||||
os.environ["PATH"] = os.environ["PATH"] + os.pathsep + bindir;
|
||||
|
||||
|
||||
def getLogger(name):
|
||||
"""Get logging.Logger instance with Fail2Ban logger name convention
|
||||
"""
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: t -*-
|
||||
# vi: set ft=python sts=4 ts=4 sw=4 noet :
|
||||
|
||||
# This file is part of Fail2Ban.
|
||||
#
|
||||
# Fail2Ban 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.
|
||||
#
|
||||
# Fail2Ban 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 Fail2Ban; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
__author__ = "Serg G. Brester"
|
||||
__license__ = "GPL"
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def updatePyExec(bindir, executable=None):
|
||||
"""Update fail2ban-python link to current python version (where f2b-modules located/installed)
|
||||
"""
|
||||
bindir = os.path.realpath(bindir)
|
||||
if executable is None:
|
||||
executable = sys.executable
|
||||
pypath = os.path.join(bindir, 'fail2ban-python')
|
||||
# if not exists or point to another version - update link:
|
||||
isfile = os.path.isfile(pypath)
|
||||
if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
|
||||
if isfile:
|
||||
os.unlink(pypath)
|
||||
os.symlink(executable, pypath)
|
||||
# extend current environment path (e.g. if fail2ban not yet installed):
|
||||
if bindir not in os.environ["PATH"].split(os.pathsep):
|
||||
os.environ["PATH"] = os.environ["PATH"] + os.pathsep + bindir;
|
|
@ -70,16 +70,21 @@ class HelpersTest(unittest.TestCase):
|
|||
self.assertEqual(splitwords(' 1\n 2, 3'), ['1', '2', '3'])
|
||||
|
||||
|
||||
if sys.version_info >= (2,7):
|
||||
def _sh_call(cmd):
|
||||
import subprocess, locale
|
||||
ret = subprocess.check_output(cmd, shell=True)
|
||||
if sys.version_info >= (3,):
|
||||
ret = ret.decode(locale.getpreferredencoding(), 'replace')
|
||||
return str(ret).rstrip()
|
||||
else:
|
||||
def _sh_call(cmd):
|
||||
import subprocess
|
||||
ret = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read()
|
||||
return str(ret).rstrip()
|
||||
|
||||
def _getSysPythonVersion():
|
||||
import subprocess, locale
|
||||
sysVerCmd = "fail2ban-python -c 'import sys; print(tuple(sys.version_info))'"
|
||||
if sys.version_info >= (2,7):
|
||||
sysVer = subprocess.check_output(sysVerCmd, shell=True)
|
||||
else:
|
||||
sysVer = subprocess.Popen(sysVerCmd, shell=True, stdout=subprocess.PIPE).stdout.read()
|
||||
if sys.version_info >= (3,):
|
||||
sysVer = sysVer.decode(locale.getpreferredencoding(), 'replace')
|
||||
return str(sysVer).rstrip()
|
||||
return _sh_call("fail2ban-python -c 'import sys; print(tuple(sys.version_info))'")
|
||||
|
||||
class SetupTest(unittest.TestCase):
|
||||
|
||||
|
@ -142,9 +147,13 @@ class SetupTest(unittest.TestCase):
|
|||
'etc/fail2ban/jail.conf'):
|
||||
self.assertTrue(os.path.exists(os.path.join(tmp, f)),
|
||||
msg="Can't find %s" % f)
|
||||
self.assertEqual(
|
||||
os.path.realpath(os.path.join(tmp, 'usr/local/bin/fail2ban-python')),
|
||||
os.path.realpath(sys.executable))
|
||||
# Because the install (test) path in virtual-env differs from some development-env,
|
||||
# it is not a `tmp + '/usr/local/bin/'`, so search for it:
|
||||
installedPath = _sh_call('find ' + tmp+ ' -name fail2ban-python').split('\n')
|
||||
self.assertTrue(len(installedPath) > 0)
|
||||
for installedPath in installedPath:
|
||||
self.assertEqual(
|
||||
os.path.realpath(installedPath), os.path.realpath(sys.executable))
|
||||
|
||||
finally:
|
||||
# clean up
|
||||
|
|
18
setup.py
18
setup.py
|
@ -49,20 +49,7 @@ import sys
|
|||
import warnings
|
||||
from glob import glob
|
||||
|
||||
|
||||
def updatePyExec(bindir, executable=None):
|
||||
"""Update fail2ban-python link to current python version (where f2b-modules located/installed)
|
||||
"""
|
||||
bindir = os.path.realpath(bindir)
|
||||
if executable is None:
|
||||
executable = sys.executable
|
||||
pypath = os.path.join(bindir, 'fail2ban-python')
|
||||
# if not exists or point to another version - update link:
|
||||
isfile = os.path.isfile(pypath)
|
||||
if not isfile or os.path.realpath(pypath) != os.path.realpath(executable):
|
||||
if isfile:
|
||||
os.unlink(pypath)
|
||||
os.symlink(executable, pypath)
|
||||
from fail2ban.setup import updatePyExec
|
||||
|
||||
|
||||
# Wrapper to install python binding (to current python version):
|
||||
|
@ -80,6 +67,9 @@ class install_scripts_f2b(install_scripts):
|
|||
return outputs
|
||||
|
||||
|
||||
# Update fail2ban-python env to current python version (where f2b-modules located/installed)
|
||||
updatePyExec(os.path.join(os.path.dirname(__file__), 'bin'))
|
||||
|
||||
if setuptools and "test" in sys.argv:
|
||||
import logging
|
||||
logSys = logging.getLogger("fail2ban")
|
||||
|
|
Loading…
Reference in New Issue