diff --git a/ChangeLog b/ChangeLog index e466cec0..2f3bb9a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,8 @@ ver. 0.9.2 (2014/XX/XXX) - wanna-be-released - New Features: + - new interpolation feature for config readers - `%(known/parameter)s`. + (means last known option with name `parameter`). - new options for jail introduced addfailregex/addignoreregex: extends regex specified in filter (opposite to failregex/ignoreregex that overwrites it) see gh-867. diff --git a/fail2ban/client/configparserinc.py b/fail2ban/client/configparserinc.py index d819281b..6299b906 100644 --- a/fail2ban/client/configparserinc.py +++ b/fail2ban/client/configparserinc.py @@ -226,6 +226,11 @@ after = 1.conf if isinstance(s, dict): s2 = alls.get(n) if isinstance(s2, dict): + # save previous known values, for possible using in local interpolations later: + for k, v in s2.iteritems(): + if not k.startswith('known/'): + s2['known/'+k] = v + # merge section s2.update(s) else: alls[n] = s.copy() diff --git a/fail2ban/tests/clientreadertestcase.py b/fail2ban/tests/clientreadertestcase.py index 31517f5d..c684434d 100644 --- a/fail2ban/tests/clientreadertestcase.py +++ b/fail2ban/tests/clientreadertestcase.py @@ -436,6 +436,11 @@ class JailsReaderTest(LogCaptureTestCase): ['set', 'test2failregex', 'addfailregex', 'failure 1 '], ['set', 'test2failregex', 'addfailregex', 'failure 2 '], ['start', 'test2failregex'], + ['add', 'test3known-interp', 'auto'], + ['set', 'test3known-interp', 'addfailregex', 'failure test 1 (filter.d/test.conf) '], + ['set', 'test3known-interp', 'addfailregex', 'failure test 2 (filter.d/test.local) '], + ['set', 'test3known-interp', 'addfailregex', 'failure test 3 (jail.local) '], + ['start', 'test3known-interp'], ['add', 'missinglogfiles', 'auto'], ['set', 'missinglogfiles', 'addfailregex', ''], ['add', 'brokenaction', 'auto'], diff --git a/fail2ban/tests/config/filter.d/test.conf b/fail2ban/tests/config/filter.d/test.conf new file mode 100644 index 00000000..f09d3467 --- /dev/null +++ b/fail2ban/tests/config/filter.d/test.conf @@ -0,0 +1,6 @@ +#[INCLUDES] +#before = common.conf + +[Definition] +failregex = failure test 1 (filter.d/test.conf) + diff --git a/fail2ban/tests/config/filter.d/test.local b/fail2ban/tests/config/filter.d/test.local new file mode 100644 index 00000000..1b6cf55e --- /dev/null +++ b/fail2ban/tests/config/filter.d/test.local @@ -0,0 +1,7 @@ +#[INCLUDES] +#before = common.conf + +[Definition] +failregex = %(known/failregex)s + failure test 2 (filter.d/test.local) + diff --git a/fail2ban/tests/config/jail.conf b/fail2ban/tests/config/jail.conf index c9ae6c54..c79e255c 100644 --- a/fail2ban/tests/config/jail.conf +++ b/fail2ban/tests/config/jail.conf @@ -27,6 +27,11 @@ filter = simple failregex = failure 1 failure 2 +[test3known-interp] +enabled = true +filter = test +addfailregex = failure test 3 (jail.local) + [missinglogfiles] enabled = true logpath = /weapons/of/mass/destruction