mirror of https://github.com/fail2ban/fail2ban
code review, change log entries added;
parent
73a06d55a8
commit
7d3e6e9935
|
@ -16,6 +16,8 @@ ver. 0.9.1 (2014/xx/xx) - better, faster, stronger
|
||||||
provides defaults for the chain, port, protocol and name tags
|
provides defaults for the chain, port, protocol and name tags
|
||||||
|
|
||||||
- Fixes:
|
- Fixes:
|
||||||
|
* start of file2ban aborted (on slow hosts, systemd considers the server has been
|
||||||
|
timed out and kills him), see gh-824
|
||||||
* UTF-8 fixes in pure-ftp thanks to Johannes Weberhofer. Closes gh-806.
|
* UTF-8 fixes in pure-ftp thanks to Johannes Weberhofer. Closes gh-806.
|
||||||
* systemd backend error on bad utf-8 in python3
|
* systemd backend error on bad utf-8 in python3
|
||||||
* badips.py action error when logging HTTP error raised with badips request
|
* badips.py action error when logging HTTP error raised with badips request
|
||||||
|
@ -64,6 +66,10 @@ ver. 0.9.1 (2014/xx/xx) - better, faster, stronger
|
||||||
- Added Cloudflare API action
|
- Added Cloudflare API action
|
||||||
|
|
||||||
- Enhancements
|
- Enhancements
|
||||||
|
* Start performance of fail2ban-client (and tests) increased, start time
|
||||||
|
and cpu usage rapidly reduced. Introduced a shared storage logic, to bypass
|
||||||
|
reading lots of config files (see gh-824).
|
||||||
|
Thanks to Joost Molenaar for good catch (reported gh-820).
|
||||||
* Fail2ban-regex - add print-all-matched option. Closes gh-652
|
* Fail2ban-regex - add print-all-matched option. Closes gh-652
|
||||||
* Suppress fail2ban-client warnings for non-critical config options
|
* Suppress fail2ban-client warnings for non-critical config options
|
||||||
* Match non "Bye Bye" disconnect messages for sshd locked account regex
|
* Match non "Bye Bye" disconnect messages for sshd locked account regex
|
||||||
|
|
|
@ -70,7 +70,12 @@ class ConfigReader():
|
||||||
return self._cfg_share
|
return self._cfg_share
|
||||||
|
|
||||||
def read(self, name, once=True):
|
def read(self, name, once=True):
|
||||||
# shared ?
|
""" Overloads a default (not shared) read of config reader.
|
||||||
|
|
||||||
|
To prevent mutiple reads of config files with it includes, reads into
|
||||||
|
the config reader, if it was not yet cached/shared by 'name'.
|
||||||
|
"""
|
||||||
|
# already shared ?
|
||||||
if not self._cfg:
|
if not self._cfg:
|
||||||
self.touch(name)
|
self.touch(name)
|
||||||
# performance feature - read once if using shared config reader:
|
# performance feature - read once if using shared config reader:
|
||||||
|
@ -85,7 +90,12 @@ class ConfigReader():
|
||||||
self._cfg.read_cfg_files = ret
|
self._cfg.read_cfg_files = ret
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def touch(self, name = ''):
|
def touch(self, name=''):
|
||||||
|
""" Allocates and share a config file by it name.
|
||||||
|
|
||||||
|
Automatically allocates unshared or reuses shared handle by given 'name' and
|
||||||
|
init arguments inside a given shared storage.
|
||||||
|
"""
|
||||||
if not self._cfg and self._cfg_share is not None:
|
if not self._cfg and self._cfg_share is not None:
|
||||||
self._cfg = self._cfg_share.get(name)
|
self._cfg = self._cfg_share.get(name)
|
||||||
if not self._cfg:
|
if not self._cfg:
|
||||||
|
@ -124,7 +134,7 @@ class ConfigReader():
|
||||||
class ConfigReaderUnshared(SafeConfigParserWithIncludes):
|
class ConfigReaderUnshared(SafeConfigParserWithIncludes):
|
||||||
"""Unshared config reader (previously ConfigReader).
|
"""Unshared config reader (previously ConfigReader).
|
||||||
|
|
||||||
Does not use this class (internal not shared/cached represenation).
|
Do not use this class (internal not shared/cached represenation).
|
||||||
Use ConfigReader instead.
|
Use ConfigReader instead.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -191,7 +201,7 @@ class ConfigReaderUnshared(SafeConfigParserWithIncludes):
|
||||||
# 1 -> the name of the option
|
# 1 -> the name of the option
|
||||||
# 2 -> the default value for the option
|
# 2 -> the default value for the option
|
||||||
|
|
||||||
def getOptions(self, sec, options, pOptions = None):
|
def getOptions(self, sec, options, pOptions=None):
|
||||||
values = dict()
|
values = dict()
|
||||||
for option in options:
|
for option in options:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue