#! /bin/sh /usr/share/dpatch/dpatch-run ## 10_multiple_HOST_regexp.dpatch by Yaroslav Halchenko ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: No description. @DPATCH@ diff -urNad fail2ban-0.7.5~/server/filter.py fail2ban-0.7.5/server/filter.py --- fail2ban-0.7.5~/server/filter.py 2006-11-26 15:37:31.000000000 -0500 +++ fail2ban-0.7.5/server/filter.py 2006-12-22 13:30:25.000000000 -0500 @@ -170,8 +170,17 @@ self.__failRegex = value self.__failRegexObj = None else: - # Replace "" with default regular expression for host. - regex = value.replace("", "(?:::f{4,6}:)?(?P\S+)") + # Replace ""s with regular expression for a hostname, + # naming groups hostX where X is a number starting with 1 + regex = value + oldregex = ''; k = 0 + while ( regex != oldregex ): + oldregex = regex + k += 1 + regex = regex.replace("", + "(?:::f{4,6}:)?(?P\S+)" % k, + 1) + self.__failRegex = regex self.__failRegexObj = re.compile(regex) logSys.info("Set failregex = %s" % self.__failRegex) @@ -435,12 +444,18 @@ + "this format") else: try: - ipMatch = DNSUtils.textToIp(match.group("host")) - if ipMatch: - for ip in ipMatch: - failList.append([ip, date]) + allGroups = match.groupdict() + hostRe = re.compile('host\d*$') + # Select only groups named host\d* + hostGroups = filter(lambda x: hostRe.match(x[0]) and x[1], + allGroups.iteritems()) + for hostGroup, hostEntry in hostGroups: + ipMatch = DNSUtils.textToIp(hostEntry) + if ipMatch: + for ip in ipMatch: + failList.append([ip, date]) except IndexError: - logSys.error("There is no 'host' group in the rule. " + + logSys.error("There is no 'hostX' group in the rule. " + "Please correct your configuration.") return failList