summaryrefslogtreecommitdiff
path: root/fail2ban/client/configparserinc.py
diff options
context:
space:
mode:
Diffstat (limited to 'fail2ban/client/configparserinc.py')
-rw-r--r--fail2ban/client/configparserinc.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/fail2ban/client/configparserinc.py b/fail2ban/client/configparserinc.py
index 70dfd91b..cc4ada0a 100644
--- a/fail2ban/client/configparserinc.py
+++ b/fail2ban/client/configparserinc.py
@@ -29,7 +29,7 @@ import re
import sys
from ..helpers import getLogger
-if sys.version_info >= (3,2):
+if sys.version_info >= (3,): # pragma: 2.x no cover
# SafeConfigParser deprecated from Python 3.2 (renamed to ConfigParser)
from configparser import ConfigParser as SafeConfigParser, BasicInterpolation, \
@@ -61,7 +61,7 @@ if sys.version_info >= (3,2):
return super(BasicInterpolationWithName, self)._interpolate_some(
parser, option, accum, rest, section, map, *args, **kwargs)
-else: # pragma: no cover
+else: # pragma: 3.x no cover
from ConfigParser import SafeConfigParser, \
InterpolationMissingOptionError, NoOptionError, NoSectionError
@@ -73,6 +73,17 @@ else: # pragma: no cover
return self._cp_interpolate_some(option, accum, rest, section, map, *args, **kwargs)
SafeConfigParser._interpolate_some = _interpolate_some
+def _expandConfFilesWithLocal(filenames):
+ """Expands config files with local extension.
+ """
+ newFilenames = []
+ for filename in filenames:
+ newFilenames.append(filename)
+ localname = os.path.splitext(filename)[0] + '.local'
+ if localname not in filenames and os.path.isfile(localname):
+ newFilenames.append(localname)
+ return newFilenames
+
# Gets the instance of the logger.
logSys = getLogger(__name__)
logLevel = 7
@@ -245,6 +256,7 @@ after = 1.conf
def _getIncludes(self, filenames, seen=[]):
if not isinstance(filenames, list):
filenames = [ filenames ]
+ filenames = _expandConfFilesWithLocal(filenames)
# retrieve or cache include paths:
if self._cfg_share:
# cache/share include list:
@@ -360,7 +372,8 @@ after = 1.conf
s2 = alls.get(n)
if isinstance(s2, dict):
# save previous known values, for possible using in local interpolations later:
- self.merge_section('KNOWN/'+n, s2, '')
+ self.merge_section('KNOWN/'+n,
+ dict(filter(lambda i: i[0] in s, s2.iteritems())), '')
# merge section
s2.update(s)
else: