#! /bin/sh /usr/share/dpatch/dpatch-run
## 10_multiple_HOST_regexp.dpatch by Yaroslav Halchenko <debian@onerussian.com>
##
## 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 "<HOST>" with default regular expression for host.
-				regex = value.replace("<HOST>", "(?:::f{4,6}:)?(?P<host>\S+)")
+				# Replace "<HOST>"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("<HOST>",
+										  "(?:::f{4,6}:)?(?P<host%d>\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