o ;s*bMiã@s¢dZdZdZddlZddlZddlZddlmZddlm Z ddl m Z m Z d d l mZmZmZdd lmZed ƒZGd d„deƒZe dƒZGdd„dejƒZdS)z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierÚGPLéNé)Ú DateDetector)Ú datedetector)ÚDatePatternRegexÚ DateTemplateé)Ú setUpMyTimeÚtearDownMyTimeÚLogCaptureTestCase)Ú getLoggerÚfail2banc@seZdZdd„Zdd„Zedd„ƒZdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!S)"ÚDateDetectorTestcCst |¡tƒd|_dS©zCall before every test case.N)r ÚsetUpr Ú_DateDetectorTest__datedetector©Úself©rúE/usr/lib/python3/dist-packages/fail2ban/tests/datedetectortestcase.pyr*s  zDateDetectorTest.setUpcCst |¡tƒdS©zCall after every test case.N)r ÚtearDownr rrrrr0s  zDateDetectorTest.tearDowncCs"|jdurtƒ|_|j ¡|jS)N)rrÚaddDefaultTemplaterrrrr5s  zDateDetectorTest.datedetectorcCsÎtƒ|_|j d¡dD];}dD]6}||}|d}|j |¡}| |d|f¡|\}}| t|ƒ|¡| |  d¡t |ƒt |ƒdf¡qq dD]}dD]}||}|d}|j |¡}|  |¡qNqJdS) NÚEPOCH©iÏCÕClÿo€&©ú%sú[%s]z[%s.555]zaudit(%s.555:101)ú* [sshd] error: PAM: Authentication failureúParse epoch time for %s failedrz.555)Ú 123456789Ú9999999999999999Ú 1138049999AÚ A1138049999) rrÚappendTemplaterÚgetTimeÚ assertTrueÚ assertEqualÚintÚassertInÚgroupÚstrÚ assertFalse)rÚdateUnixÚdateÚlogÚdatelogÚmatchlogrrrÚtestGetEpochTime<s(  $ù   üÿz!DateDetectorTest.testGetEpochTimecCsÔtƒ|_|j d¡dD]>}dD]9}dD]4}||}||}|d}|j |¡}| |d|f¡|\}}| t|ƒ|¡| | d¡t |ƒ¡qqq dD]}d D]}||}|d}|j |¡}|  |¡qQqMdS) NÚLEPOCH©rièi@Br)rrrz audit(%s:101)rrr)r Ú999999999999999999r"r#r© rrr$rr%r&r'r(r*r+r,)rÚfactr-r.ÚdateLongr/r0r1rrrÚtestGetEpochMsTimeQs.  øÿ   üÿz#DateDetectorTest.testGetEpochMsTimecCs°tƒ|_|j d¡dD]5}dD]0}||}d|}|j |¡}| |d|f¡|\}}| t|ƒ|¡| | d¡t |ƒ¡qq dD]}||}|j |¡}|  |¡qDdS)Nz(?<=\|\s){LEPOCH}(?=\s\|)r4rz"auth-error | %s | invalid passwordzParse epoch time failed: %rr)z test%s123ztest-right | %stestztest%s | test-leftr6)rr7r-r8r/r0r1rrrÚtestGetEpochPatternhs"  ù   ýz$DateDetectorTest.testGetEpochPatterncCs:d}d}|j |¡\}}| ||¡| | d¡d¡dS)Nz9Jan 23 21:59:59 [sshd] error: PAM: Authentication failureçÀ}ÐArúJan 23 21:59:59)rr%r'r*)rr/r-r0r1rrrÚ testGetTime{s  zDateDetectorTest.testGetTimec Cs~tƒ}| d¡tj}d}|dddddƒ}d||dddd dƒfd ||fd ||dddd d ƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddddƒfd||dddd d ƒfd|d|fd |d|fd |d|fd|d|fd |d|dddddƒfd|d|dddddƒfd |d|dddd dƒfd|d!|dddd dƒfd|d"|fd|d#|dddddƒfd|d$|dddddƒfd|d%|dddd d ƒffD]+\}}}t d&||¡||_| |¡\}} | |¡} | | |d'| ||||jf¡q|  t t |d(d)¡d|_dS)*Nz#^%ExY-%Exm-%Exd %H:%M:%S(?: ?%Exz)?z2017-01-23 15:00:00iáréérzUTC+0300é ÚUTCzUTC-0430éézGMT+12ééÚCETz+0100zCEST-01ÚCESTé z+0200zCET+01zCET+0100zCET+0130z GMTz -1045éé-z -10:45z +0945éz +09:45z Zz CETz CESTz CET+0130z== test %r with TZ %rz3wrong offset %r != %r by %r with default TZ %r (%r)Ú default_tzzWRONG-TZ) rr$ÚdatetimeÚlogSysÚdebugrLr%Úutcfromtimestampr'Ú assertRaisesÚ ValueErrorÚsetattr) rÚddÚdtÚlogdtÚdtUTCÚtzr/Údesiredr0Ú_ÚvalrrrÚtestDefaultTimeZone†sN      â  ÿ z$DateDetectorTest.testDefaultTimeZonec Cs²d}dD]Ò\}}}}|dur|dkr|}t d||||f¡|dudf| dfdfD]«\}}||d }|s;|d kr;q*t d ||¡|j |¡} |rr| | dd ||||f¡| \} } | | |d ||| |f¡| |  d¡|¡n | | dd||| f¡|j |¡\} } }|j ||¡} t d| r—| jnd¡|rÄ| | dd ||||f¡| \} } | | |d||| |f¡| |  d¡|¡n | | dd||| f¡t d¡q*qdS)zKTest detection of various common date/time formats f2b should understand r;)")FTr<N)FFzSun Jan 23 21:59:59 2005N)FFzSun Jan 23 21:59:59N)FFzSun Jan 23 2005 21:59:59N)FTz2005/01/23 21:59:59N)FTz2005.01.23 21:59:59N)FTz23/01/2005 21:59:59N)FTz23/01/05 21:59:59N)FTz23/Jan/2005:21:59:59N)FTz23/Jan/2005:21:59:59 +0100N)FTz01/23/2005:21:59:59N©FTz2005-01-23 21:59:59N)FTz2005-01-23 21:59:59,000N)FTz23-Jan-2005 21:59:59N)FTz23-Jan-2005 21:59:59.02N)FTz23-Jan-2005 21:59:59 +0100N)FTz23-01-2005 21:59:59N©TTÚ 1106513999N)FTz01-23-2005 21:59:59.252N)FFz@4000000041f4104f00000000N)FTz2005-01-23T20:59:59.252ZN)FTz2005-01-23T15:59:59-05:00Nr])FTÚ20050123T215959N)FTz20050123 215959N)TTz<01/23/05@21:59:59>N)FTz050123 21:59:59N)TTzJan-23-05 21:59:59N)FTzJan 23, 2005 9:59:59 PMNr^)TTú1106513999.000N)TTz[1106513999.000]ra)FTzaudit(1106513999.000:987)ra)TTú no date lineNNrbz == test %rÚz bogus-prefix )Fú word-boundaryz)[sshd] error: PAM: Authentication failurerdz -- test %-5s for %rzMgetTime retrieved nothing: failure for %s by prefix %r, anchored: %r, log: %sz@getTime comparison failure for %s: by prefix %r "%s" is not "%s"rz;getTime should have not matched for %r by prefix %r Got: %sz -- found - %rFz@getTime comparison failure for %s by prefix %r: "%s" is not "%s"z -- OK) rNrOrr%ÚassertNotEqualr'r*Ú matchTimeÚname)rr-ÚanchoredÚboundÚsdateÚrdateÚ should_matchÚprefixr/ÚlogtimeÚlogUnixÚlogMatchÚ timeMatchÚtemplaterfrrrÚtestVariousTimes·sT$  ý  ÿÿ ÿÿÿ ÿ ÝÚz!DateDetectorTest.testVariousTimescCs| t|jj|jjd¡dS)Nr)rQrRrr$Ú templatesrrrrÚtestAllUniqueTemplateNames s  ÿz+DateDetectorTest.testAllUniqueTemplateNamesc CsÊt t dddddd¡ ¡¡}|j d¡}| |d¡|\}}| ||¡| | d¡d ¡t dƒD]}|j d ¡\}}| ||¡| | d¡d ¡q2|j d¡\}}| ||¡| | d¡d ¡dS) NiÜé é ré%éz#2012/10/11 02:37:17 [error] 18434#0rz2012/10/11 02:37:17z#11/10/2012 02:37:17 [error] 18434#0z11/10/2012 02:37:17) ÚtimeÚmktimerMÚ timetuplerr%rer'r*Úrange)rÚmuÚlogdateÚlogTimerpÚirrrÚtestFullYearMatch_gh130s      z(DateDetectorTest.testFullYearMatch_gh130cCsºtƒ}| d¡| |jd¡| t|jd¡| | d¡ d¡d¡t ƒ}d|_ |  d|jv¡d}| | d |d ¡ d¡|¡| | |¡ d¡|¡d }|  | |¡¡t ƒ}d |_ |  d |jv¡d }|  | d |¡¡|  | |d ¡¡| | d|d¡ d¡|¡| | |¡ d¡|¡d}|  | |¡¡t ƒ}d|_ |  d|jv¡d}| | |¡ d¡|¡d}| | |¡ d¡|¡d}| | |¡ d¡|¡dS)Nz ^a{3,5}b?c*$z^(a{3,5}b?c*)$rcÚaaaacrz'(?iu)**time:%ExY%Exm%ExdT%ExH%ExM%ExS**z**zTIME:20050102T010203ÚXzTIME:50050102T010203z'{^LN-BEG}time:%ExY%Exm%ExdT%ExH%ExM%ExSú^ztime:20050102T010203z##z...z ^%Y %b %dz(?iu)z 2005 jun 03z 2005 Jun 03z 2005 JUN 03) rÚsetRegexr'ÚregexrQÚ ExceptionÚgetDateÚ matchDater*rÚpatternr,r&)rÚtrUrrrÚtestDateTemplate#s:    z!DateDetectorTest.testDateTemplatecCs`dD]+}tƒ}| |¡dD]}dD]}| ||¡}| |d|d ¡fd|f¡qqqdS)N)z%H:%M:%Sz {UNB}%H:%M:%S)z%s testz%8s testztest %sztest %8s) ú00:01:02ú00:01:2ú00:1:2ú0:1:2rrrŽr‘rŽrrg€g›¿ÐA)rr$r%r'r*)rÚdprTÚfmtrUrŒrrrÚtestNotAnchoredCollisionMs  "ôÿüz)DateDetectorTest.testNotAnchoredCollisioncCsp|j}dD]0\}}}t d|||f¡t|ƒD]}t d|¡| |¡\}}| |¡| | d¡|¡qqdS)N))z030324 0:03:59z9some free text 030324 0:03:59 -- 2003-03-07 17:05:01 ...r)z2003-03-07 17:05:01z+some free text 2003-03-07 17:05:01 test ...r?)z030324 0:04:00z{server mysqld[1000]: 030324 0:04:00 [Warning] Access denied ... foreign-input just some free text 2003-03-07 17:05:01 testrv)zSep 16 21:30:26z[server mysqld[1020]: Sep 16 21:30:26 server mysqld: 030916 21:30:26 [Warning] Access deniedr?)z2005-10-07 06:09:42zEserver mysqld[5906]: 2005-10-07 06:09:42 5907 [Warning] Access deniedé)z2005-10-08T15:26:18.237955zFserver mysqld[5906]: 2005-10-08T15:26:18.237955 6 [Note] Access deniedr•)z051009 10:05:30z@server mysqld[1000]: 051009 10:05:30 [Warning] Access denied ...é2ú == test: %rzLine: %sr)rrNrOr}rfr&r'r*)rrTÚdebitÚlineÚcntrÚmatchrrrrrÚtestAmbiguousInOrderedTemplatesbs   üïz0DateDetectorTest.testAmbiguousInOrderedTemplatescCs¢zKtj|_tjt ¡dkrt ¡dt_|j}d}dD](\}}t|||dƒD]}t d|||f¡| ||¡\}}| |¡q)qW|jt_dS|jt_w)Nrr))úGserver mysqld[5906]: 2005-10-07 06:09:%02i 5907 [Warning] Access deniedr)zCserver mysqld[5906]: 051007 06:10:%02i 5907 [Warning] Access deniedrK)rrvr—) rÚlogLevelÚ _DateDetectorTest__old_eff_levelrNÚgetEffectiveLevelr}rOrfr&)rrTrr™ršr›rrrrrÚtestLowLevelLogging{s  ýû z$DateDetectorTest.testLowLevelLoggingcCsBtdƒ}| t|jd¡| d|j¡tƒ}| t|jd¡dS)Nz (%ExY%Exm%Exdz (20050101zCompile %r failedrb)rrQrˆrŠÚ assertLoggedrgrr‰)rrŒrrrÚtestWrongTemplates z"DateDetectorTest.testWrongTemplateN)Ú__name__Ú __module__Ú __qualname__rrÚpropertyrr2r9r:r=r\rsrur‚rr”rœr¡r£rrrrr(s$  1T* rz%Y-%m-%d[T ]%H:%M:%S(?:\.%f)?%zc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚCustomDateFormatsTestcCótj |¡tƒdSr)ÚunittestÚTestCaserr rrrrró  zCustomDateFormatsTest.setUpcCr©r)rªr«rr rrrrr¢r¬zCustomDateFormatsTest.tearDownc Cs\tj t d¡d¡}| |t ddddd¡¡| ttjd¡| ttj|¡| t d¡d¡| t d¡d¡| t d ¡d¡| t d ¡d¡tj t d ¡d¡}| |t dddd d¡¡tj t d ¡d¡}| |t dddd d¡¡tj t d¡d¡}| |t ddddd¡¡tj t d¡d¡}| |t ddddd¡¡dS)Nz2007-01-25T12:00:00Zri×rér@rcÚZz2007-01-01T120:00:00Zz2007-13-01T12:00:00Zz2007-01-25T12:00:00+0400éz2007-01-25T12:00:00+04:00z2007-01-25T12:00:00-0400éz2007-01-25T12:00:00-04)rMrPÚiso8601r‰r'rQÚ TypeError)rr.rrrÚ testIso8601§sR ÿþ ÿþ ÿþ ÿþ ÿþz!CustomDateFormatsTest.testIso8601cCsªtƒ}| ¡dD]I\}}}t d|||f¡|dur|}ntƒ}| |¡| |¡}|rL| |¡t|tƒrC|  ||d  d¡¡q |  ||d¡q |  |d¡q dS)N)&)r<Nz*Test failure Jan 23 21:59:59 for 192.0.2.1)FNz7Test failure TestJan 23 21:59:59.011 2015 for 192.0.2.1)FNz3Test failure Jan 23 21:59:59123456789 for 192.0.2.1)úAug 8 11:25:50Nz@Aug 8 11:25:50 20030f2329b8 Authentication failed from 192.0.2.1)r´NzB[Aug 8 11:25:50] 20030f2329b8 Authentication failed from 192.0.2.1)zAug 8 11:25:50 2014NzEAug 8 11:25:50 2014 20030f2329b8 Authentication failed from 192.0.2.1)ú20:00:00 01.02.2003z%H:%M:%S %d.%m.%Y$z 192.0.2.1 at 20:00:00 01.02.2003)ú[20:00:00 01.02.2003]ú\[%H:%M:%S %d.%m.%Y\]ú192.0.2.1[20:00:00 01.02.2003])r¶r·ú[20:00:00 01.02.2003]192.0.2.1)r¶z\[%H:%M:%S %d.%m.%Y\]$r¸)r¶z^\[%H:%M:%S %d.%m.%Y\]r¹)ú[17/Jun/2011 17:00:45]z^\[%d/%b/%Y %H:%M:%S\]z4[17/Jun/2011 17:00:45] Attempt, IP address 192.0.2.1)rºú\[%d/%b/%Y %H:%M:%S\]z3Attempt [17/Jun/2011 17:00:45] IP address 192.0.2.1)rºr»z:Attempt IP address 192.0.2.1, date: [17/Jun/2011 17:00:45])Fú%H:%M:%S %d.%m.%Yú192.0.2.1x20:00:00 01.02.2003)Fr¼ú20:00:00 01.02.2003x192.0.2.1)rµú**%H:%M:%S %d.%m.%Y**r½)rµr¿r¾)z*20:00:00 01.02.2003*z\**%H:%M:%S %d.%m.%Y\**ztest*20:00:00 01.02.2003*test)rµr¼z192.0.2.1 20:00:00 01.02.2003)rµr¼z20:00:00 01.02.2003 192.0.2.1)Nz%Y-%Exm-%Exd %ExH:%ExM:%ExSú)0000-12-30 00:00:00 - 2003-12-30 00:00:00)ú2003-12-30 00:00:00z%ExY-%Exm-%Exd %ExH:%ExM:%ExSrÀ)rÁNrÀ)z 200333 010203z %Y%m%d %H%M%Sú)text:200333 010203 | date:20031230 010203)ú20031230 010203ú%ExY%Exm%Exd %ExH%ExM%ExSrÂ)rÃNrÂ)z20030101 000000rÄú!00001230 010203 - 20030101 000000)Nú"{^LN-BEG}%ExY%Exm%Exd %ExH%ExM%ExSrÅ)rÃrÆz!20031230 010203 - 20030101 000000)Ú20031230010203ú#{^LN-BEG}%ExY%Exm%Exd%ExH%ExM%ExS**Ú2003123001020320030101000000)rÇrÈz#2003123001020320030101000000)rÇrÈz##2003123001020320030101000000)rÇz!{^LN-BEG}%ExY%Exm%Exd%ExH%ExM%ExSz[20031230010203]20030101000000)ç€=`øÏAú.{^LN-BEG}%ExY-%Exm-%Exd %ExH:%ExM:%ExS(?: %z)?ú [2003-12-30 01:02:03] server ...)rÊú.{^LN-BEG}%ExY-%Exm-%Exd %ExH:%ExM:%ExS(?: %Z)?rÌ)ç€EgøÏArËú$[2003-12-30 01:02:03 UTC] server ...)rÎrÍrÏr—rr) rrrNrOr$r%r&Ú isinstancer+r'r*)rÚdefDDÚmatchedr’r™rTr.rrrÚtestAmbiguousDatePatternÊs ;    ·z.CustomDateFormatsTest.testAmbiguousDatePatterncCsŽdD]B\}}}t d|||f¡tƒ}| |¡| |¡}|r>| |¡t|tƒr5| ||d  d¡¡q| ||d¡q| |d¡qdS)N))gÀ?º|ÐAz^%B %Exd %I:%ExM:%ExS**zJanuary 23 12:59:59)g€'‹\ÍAz^%y %U %A %ExH:%ExM:%ExS**ú01 11 Wednesday 21:59:59)g€çíWÍAz^%y %W %A %ExH:%ExM:%ExS**rÔ)g€çZÍAú^%y %W %w %ExH:%ExM:%ExS**z01 11 0 21:59:59)g€'èYÍArÕz01 11 6 21:59:59)gÀO”¿ÐAú^%ExH:%ExM:%ExS**z21:59:59)g@X›¿ÐArÖz00:00:01)gÀŠMÐAz^%m/%d %ExH:%ExM:%ExS**z09/01 21:59:59r—rr) rNrOrr$r%r&rÐr+r'r*)rrÒr’r™rTr.rrrÚtestVariousFormatSpecss    ãz,CustomDateFormatsTest.testVariousFormatSpecsN)r¤r¥r¦rrr³rÓr×rrrrr¨›s # Nr¨)Ú __author__Ú __copyright__Ú __license__rªrzrMÚserver.datedetectorrÚserverrÚserver.datetemplaterrÚutilsr r r Úhelpersr rNrr±r«r¨rrrrÚs"   s