From 883892a683f59432d5491372e778a40ba5dc9fc7 Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Sat, 16 Mar 2013 17:55:22 +0000 Subject: [PATCH] Additional date/time formats for datedetector testcases Also made a note that some workarounds for certain date/time formats may cause week/year day to be incorrect. This does not affect functionality of fail2ban so no urgency to fix. --- server/datetemplate.py | 3 +++ testcases/datedetectortestcase.py | 24 +++++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/server/datetemplate.py b/server/datetemplate.py index f663862e..9efa2128 100644 --- a/server/datetemplate.py +++ b/server/datetemplate.py @@ -158,6 +158,7 @@ class DateStrptime(DateTemplate): "pattern" % (opattern, e)) if date[0] < 2000: # There is probably no year field in the logs + # NOTE: Possibly makes week/year day incorrect date[0] = MyTime.gmtime()[0] # Bug fix for #1241756 # If the date is greater than the current time, we suppose @@ -166,10 +167,12 @@ class DateStrptime(DateTemplate): logSys.debug( u"Correcting deduced year from %d to %d since %f > %f" % (date[0], date[0]-1, time.mktime(date), MyTime.time())) + # NOTE: Possibly makes week/year day incorrect date[0] -= 1 elif date[1] == 1 and date[2] == 1: # If it is Jan 1st, it is either really Jan 1st or there # is neither month nor day in the log. + # NOTE: Possibly makes week/year day incorrect date[1] = MyTime.gmtime()[1] date[2] = MyTime.gmtime()[2] return date diff --git a/testcases/datedetectortestcase.py b/testcases/datedetectortestcase.py index 34ce22ce..524ff175 100644 --- a/testcases/datedetectortestcase.py +++ b/testcases/datedetectortestcase.py @@ -46,35 +46,45 @@ class DateDetectorTest(unittest.TestCase): date = [2006, 1, 23, 21, 59, 59, 0, 23, 0] dateUnix = 1138049999.0 - self.assertEqual(self.__datedetector.getTime(log), date) + self.assertEqual(self.__datedetector.getTime(log)[:6], date[:6]) self.assertEqual(self.__datedetector.getUnixTime(log), dateUnix) def testGetTime(self): log = "Jan 23 21:59:59 [sshd] error: PAM: Authentication failure" - date = [2005, 1, 23, 21, 59, 59, 1, 23, -1] + date = [2005, 1, 23, 21, 59, 59, 6, 23, -1] dateUnix = 1106513999.0 - self.assertEqual(self.__datedetector.getTime(log), date) + self.assertEqual(self.__datedetector.getTime(log)[:6], date[:6]) self.assertEqual(self.__datedetector.getUnixTime(log), dateUnix) def testVariousTimes(self): """Test detection of various common date/time formats f2b should understand """ - date = [2005, 1, 23, 21, 59, 59, 1, 23, -1] + date = [2005, 1, 23, 21, 59, 59, 6, 23, -1] dateUnix = 1106513999.0 for sdate in ( "Jan 23 21:59:59", + "Sun Jan 23 21:59:59 2005", + "Sun Jan 23 21:59:59", + "2005/01/23 21:59:59", "2005.01.23 21:59:59", "23/01/2005 21:59:59", + "23/01/05 21:59:59", + "23/Jan/2005:21:59:59", + "01/23/2005:21:59:59", + "2005-01-23 21:59:59", + "23-Jan-2005 21:59:59", + "23-01-2005 21:59:59", "01-23-2005 21:59:59.252", # reported on f2b, causes Feb29 fix to break + #"@4000000041f41e5f00000000", # TAI64N + "2005-01-23T21:59:59.252Z", #ISO 8601 + "2005-01-23T21:59:59-05:00Z", #ISO 8601 with TZ + "<01/23/05@21:59:59>", ): log = sdate + "[sshd] error: PAM: Authentication failure" # exclude - # TODO (Yarik is confused): figure out why for above it is - # "1" as day of the week which would be Tue, although it - # was Sun self.assertEqual(self.__datedetector.getTime(log)[:6], date[:6]) self.assertEqual(self.__datedetector.getUnixTime(log), dateUnix)