
    ogfUk                         d Z dZdZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ d	d
lmZmZmZ ddlmZ  ed      Z G d de      Z ed      Z G d dej,                        Zy)zCyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL    N   )DateDetector)datedetector)DatePatternRegexDateTemplate   )setUpMyTimetearDownMyTimeLogCaptureTestCase)	getLoggerfail2banc                   v    e Zd Zd Zd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)DateDetectorTestc                 P    t        j                  |        t                d| _        yzCall before every test case.N)r   setUpr
   _DateDetectorTest__datedetectorselfs    E/usr/lib/python3/dist-packages/fail2ban/tests/datedetectortestcase.pyr   zDateDetectorTest.setUp*   s    4 -$    c                 B    t        j                  |        t                yzCall after every test case.N)r   tearDownr   r   s    r   r   zDateDetectorTest.tearDown0   s    d#r   c                     | j                   )t               | _         | j                   j                          | j                   S )N)r   r   addDefaultTemplater   s    r   r   zDateDetectorTest.datedetector5   s6    	 %4))+			r   c           	      "   t               | _        | j                  j                  d       dD ]  }dD ]  }||z  }|dz   }| j                  j	                  |      }| j                  |d|d       |\  }}| j                  t        |      |       | j                  |j                  d      t        |      t        |      dz   f         d	D ]?  }dD ]8  }||z  }|dz   }| j                  j	                  |      }| j                  |       : A y )
NEPOCHiCCl   o& %s[%s]z[%s.555]zaudit(%s.555:101)* [sshd] error: PAM: Authentication failureParse epoch time for  failedr	   z.555)	12345678999999999999999991138049999AA1138049999)r   r   appendTemplater   getTime
assertTrueassertEqualintassertIngroupstrassertFalse)r   dateUnixdatelogdatelogmatchlogs         r   testGetEpochTimez!DateDetectorTest.testGetEpochTime<   s   $$$$W-+ Lh> Lt(?D
=
=C'',GOOGGH#gxS\8,MM(..#c(mS]65I%JKLL R h> t(?D
=
=C'',GW	r   c           	         t               | _        | j                  j                  d       dD ]  }dD ]  }dD ]  }||z  }||z  }|dz   }| j                  j	                  |      }| j                  |d|d       |\  }}| j                  t        |      |       | j                  |j                  d      t        |                d	D ]?  }d
D ]8  }||z  }|dz   }| j                  j	                  |      }| j                  |       : A y )NLEPOCHr	   i  i@B r    )r"   r#   r#   zaudit(%s:101)r$   r%   r&   r	   )r'   999999999999999999r)   r*   r!   r   r   r+   r   r,   r-   r.   r/   r1   r2   r3   )r   factr4   r5   dateLongr6   r7   r8   s           r   testGetEpochMsTimez#DateDetectorTest.testGetEpochMsTimeQ   s%   $$$$X.  
8d, 	8x7 84X8OT>>S  ((-W	__W$HI$w	c'lH-	hnnQ'X78	8
8 T h> t(?D
=
=C'',GW	r   c                    t               | _        | j                  j                  d       dD ]  }dD ]  }||z  }d|z  }| j                  j	                  |      }| j                  |d|       |\  }}| j                  t        |      |       | j                  |j                  d      t        |               dD ]3  }|z  }| j                  j	                  |      }| j                  |       5 y )Nz(?<=\|\s){LEPOCH}(?=\s\|)r<   r    z"auth-error | %s | invalid passwordzParse epoch time failed: r	   )z	test%s123ztest-right | %stestztest%s | test-leftr>   )r   r?   r4   r@   r6   r7   r8   s          r   testGetEpochPatternz$DateDetectorTest.testGetEpochPatternh   s    $$$$%AB  7d, 7x$H
.
9C'',GOOGcCD#gxS\8,X^^A&H677 H c	x3&&s+7Gr   c                     d}d}| j                   j                  |      \  }}| j                  ||       | j                  |j                  d      d       y )Nz9Jan 23 21:59:59 [sshd] error: PAM: Authentication failure  }Ar	   Jan 23 21:59:59)r   r,   r.   r1   )r   r6   r4   r7   r8   s        r   testGetTimezDateDetectorTest.testGetTime{   sS    C#(
 ++33C8GX7H%8>>!$&78r   c           !      @   t               }|j                  d       t        j                  }d} |ddddd      }d| |dddd	d      fd
||fd| |ddddd      fd| |ddddd      fd | |ddddd      fd| |ddddd      fd| |ddddd      fd| |ddddd      fd| |ddddd      fd| |ddddd      fd| |ddddd      fd| |ddddd      fd| |dddd	d      fd|dz   |fd
|dz   |fd|dz   |fd |dz   |fd
|dz    |ddddd      fd |dz    |ddddd      fd
|dz    |dddd d      fd |d!z    |dddd d      fd|d"z   |fd|d#z    |ddddd      fd|d$z    |ddddd      fd|d%z    |dddd	d      ffD ]v  \  }}}t        j	                  d&||       ||_        |j                  |      \  }}	|j                  |      }
| j                  |
|d'|
d(|d)|d*|d+|j
                  d,       x | j                  t        t        |d-d.       d |_        y )/Nz#^%ExY-%Exm-%Exd %H:%M:%S(?: ?%Exz)?z2017-01-23 15:00:00i  r	         r   zUTC+0300   UTCzUTC-0430      zGMT+12      CETz+0100zCEST-01CEST   z+0200zCET+01zCET+0100zCET+0130z GMTz -1045   -   z -10:45z +0945   z +09:45z Zz CETz CESTz	 CET+0130z== test %r with TZ %rzwrong offset z != z by z with default TZ z ()
default_tzzWRONG-TZ)r   r+   datetimelogSysdebugrX   r,   utcfromtimestampr.   assertRaises
ValueErrorsetattr)r   dddtlogdtdtUTCtzr6   desiredr7   _vals              r   testDefaultTimeZonez$DateDetectorTest.testDefaultTimeZone   s    ~"9:"
%
T1b"a
 % r$2r1-.	ur$2r2./r$2q!,-r$2r1-.	r$2r1-.r$2r1-.r$2r1-.
r$2r1-.r$2r1-.r$2r1-.r$2r1-.r$2r2./fe$	fe$fe$fe$	h4B2 67iD!RB!78	h4B2 67iD!RB!78d
E"fr$2r156gr$2r156k!2dAr2r#:;= $fb#w@ 
<<'b12="**S/ZWa			W	%3C?BGSRTVXVcVcdfG$fL J\:F"-r   c                    d}dD ]   \  }}}}||dk7  r|}t         j                  d||||f       |dudf| dfdfD ]  \  }}||z   d	z   }|s|d
k(  rt         j                  d||       | j                  j                  |      }	|rf| j	                  |	dd|d|d|d|       |	\  }
}| j                  |
|d|d|d|
d|d	       | j                  |j                  d      |       n| j                  |	dd|d|d|	       | j                  j                  |      x\  }}}| j                  j                  ||      }	t         j                  d|r|j                  nd       |rf| j	                  |	dd|d|d|d|       |	\  }
}| j                  |
|d|d|d|
d|d	       | j                  |j                  d      |       n| j                  |	dd|d|d|	       t         j                  d         y)zKTest detection of various common date/time formats f2b should understand
		rE   )")FTrF   N)FFzSun Jan 23 21:59:59 2005N)FFzSun Jan 23 21:59:59N)FFzSun Jan 23 2005 21:59:59N)FTz2005/01/23 21:59:59N)FTz2005.01.23 21:59:59N)FTz23/01/2005 21:59:59N)FTz23/01/05 21:59:59N)FTz23/Jan/2005:21:59:59N)FTz23/Jan/2005:21:59:59 +0100N)FTz01/23/2005:21:59:59NFTz2005-01-23 21:59:59N)FTz2005-01-23 21:59:59,000N)FTz23-Jan-2005 21:59:59N)FTz23-Jan-2005 21:59:59.02N)FTz23-Jan-2005 21:59:59 +0100N)FTz23-01-2005 21:59:59NTT
1106513999N)FTz01-23-2005 21:59:59.252N)FFz@4000000041f4104f00000000N)FTz2005-01-23T20:59:59.252ZN)FTz2005-01-23T15:59:59-05:00Nrj   )FT20050123T215959N)FTz20050123 215959N)TTz<01/23/05@21:59:59>N)FTz050123 21:59:59N)TTzJan-23-05 21:59:59N)FTzJan 23, 2005 9:59:59 PMNrk   )TT1106513999.000N)TTz[1106513999.000]rn   )FTzaudit(1106513999.000:987)rn   )TTno date lineNNro   z
== test %r zbogus-prefix )Fword-boundaryz)[sshd] error: PAM: Authentication failurerq   z  -- test %-5s for %rz'getTime retrieved nothing: failure for z by prefix z, anchored: z, log: zgetTime comparison failure for z: by prefix z "z
" is not ""r	   z$getTime should have not matched for z Got: z  -- found - %rFz: "z  -- OK)	rZ   r[   r   r,   assertNotEqualr.   r1   	matchTimename)r   r4   anchoredboundsdaterdateshould_matchprefixr6   logtimelogUnixlogMatch	timeMatchtemplatert   s                  r   testVariousTimesz!DateDetectorTest.testVariousTimes   s2    (#( I#hueH m/	<<xu=>
$	\?##  #|V
 5.F
FCV.
LL(,<'',G	$Z_agiqsvwy$w	gxPUW]_fhpqs	hnnQ'/	gtGLfV]^` )-(9(9(C(CC(HHYI''Y7G
LL"YHMMEJ	$Z_agiqsvwy$w	gxPUW]_fhpqs	hnnQ'/	gtGLfV]^`
LLG#MIr   c                     | j                  t        | j                  j                  | j                  j                  d          y )Nr   )r]   r^   r   r+   	templatesr   s    r   testAllUniqueTemplateNamesz+DateDetectorTest.testAllUniqueTemplateNames  s4    J 1 1 @ @##A&(r   c           
         t        j                  t        j                  dddddd      j                               }| j                  j                  d      }| j                  |d        |\  }}| j                  ||       | j                  |j                  d      d	       t        d      D ]S  }| j                  j                  d
      \  }}| j                  ||       | j                  |j                  d      d       U | j                  j                  d      \  }}| j                  ||       | j                  |j                  d      d	       y )Ni  
      r   %      z#2012/10/11 02:37:17 [error] 18434#0r	   z2012/10/11 02:37:17z#11/10/2012 02:37:17 [error] 18434#0z11/10/2012 02:37:17)
timemktimerY   	timetupler   r,   rs   r.   r1   range)r   mulogdatelogTimer~   is         r   testFullYearMatch_gh130z(DateDetectorTest.testFullYearMatch_gh130  s,    {{8$$T2r1b"=GGIJ"%%&KL'gt$!GX7B8>>!$&;<9 >a,,445Z[WhGR HNN1%'<=>
 ++334YZGX7B8>>!$&;<r   c                    t               }|j                  d       | j                  |j                  d       | j	                  t
        |j                  d       | j                  |j                  d      j                  d      d       t               }d|_
        | j                  d|j                  v        d}| j                  |j                  d	|z   d	z         j                  d      |       | j                  |j                  |      j                  d      |       d
}| j                  |j                  |             t               }d|_
        | j                  d|j                  v        d}| j                  |j                  d	|z                | j                  |j                  |d	z                | j                  |j                  d|z   dz         j                  d      |       | j                  |j                  |      j                  d      |       d}| j                  |j                  |             t               }d|_
        | j                  d|j                  v        d}| j                  |j                  |      j                  d      |       d}| j                  |j                  |      j                  d      |       d}| j                  |j                  |      j                  d      |       y )Nz^a{3,5}b?c*$z^(a{3,5}b?c*)$rp   aaaacr	   z'(?iu)**time:%ExY%Exm%ExdT%ExH%ExM%ExS**z**zTIME:20050102T010203XzTIME:50050102T010203z'{^LN-BEG}time:%ExY%Exm%ExdT%ExH%ExM%ExS^ztime:20050102T010203z##z...z	^%Y %b %dz(?iu)z2005 jun 03z2005 Jun 03z2005 JUN 03)r   setRegexr.   regexr]   	ExceptiongetDate	matchDater1   r   patternr3   r-   )r   tra   s      r   testDateTemplatez!DateDetectorTest.testDateTemplate#  s`   n!**^177,-Iqyy"-1;;w'--a0': !7!)4177?#"1;;sRx#~.44Q7<1;;r?((+R0"1;;r?# !7!)//#.!"1;;sRx()1;;rCx()1;;tby50177:B?1;;r?((+R0"1;;r?# !!)//'QWW$%"d&&q{{2'<'<Q'?D"d&&q{{2'<'<Q'?D"d&&q{{2'<'<Q'?Dr   c                     dD ]i  }t               }|j                  |       dD ]G  }dD ]@  }|j                  ||z        }| j                  |d   |d   j	                         fd|f       B I k y )N)z%H:%M:%Sz{UNB}%H:%M:%S)z%s testz%8s testztest %sztest %8s)	00:01:0200:01:200:1:20:1:2r   r   r   r   r   r   r	   g  gA)r   r+   r,   r.   r1   )r   dpr`   fmtra   r   s         r   testNotAnchoredCollisionz)DateDetectorTest.testNotAnchoredCollisionM  s    + @b2R< @s
 @ 
C"H	Q	qtQqTZZ\*\2,>?@@	@r   c                 <   | j                   }dD ]  \  }}}t        j                  d|||f       t        |      D ]^  }t        j                  d|       |j	                  |      \  }}| j                  |       | j                  |j                  d      |       `  y )N))z030324  0:03:59z9some free text 030324  0:03:59 -- 2003-03-07 17:05:01 ...r	   )z2003-03-07 17:05:01z+some free text 2003-03-07 17:05:01 test ...rJ   )z030324  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 testr   )zSep 16 21:30:26z[server mysqld[1020]: Sep 16 21:30:26 server mysqld: 030916 21:30:26 [Warning] Access deniedrJ   )z2005-10-07 06:09:42zEserver mysqld[5906]: 2005-10-07 06:09:42 5907 [Warning] Access denied   )z2005-10-08T15:26:18.237955zFserver mysqld[5906]: 2005-10-08T15:26:18.237955 6 [Note] Access deniedr   )z051009 10:05:30z@server mysqld[1000]: 051009 10:05:30 [Warning] Access denied ...2   == test: %rzLine: %sr	   )r   rZ   r[   r   rt   r-   r.   r1   )r   r`   debitlinecntr   matchr   s           r   testAmbiguousInOrderedTemplatesz0DateDetectorTest.testAmbiguousInOrderedTemplatesb  s    " ,udC  
<<tS12#J ,q
LLT"ll4(OE8OOEU[[^U+	,#,r   c                    	 t         j                  | _        t         j                  t        j	                         dz   k  r t        j	                         dz   t         _        | j                   }d}dD ]_  \  }}t        |||z   dz         D ]E  }t        j                  d||z  |f       |j                  ||z        \  }}| j                  |       G a 	 | j                  t         _        y # | j                  t         _        w xY w)Nr	   r   ))Gserver mysqld[5906]: 2005-10-07 06:09:%02i 5907 [Warning] Access deniedr   )zCserver mysqld[5906]: 051007 06:10:%02i 5907 [Warning] Access deniedrV   )r   r   r   )	r   logLevel _DateDetectorTest__old_eff_levelrZ   getEffectiveLevelr   r[   rt   r-   )r   r`   r   r   r   r   r   s          r   testLowLevelLoggingz$DateDetectorTest.testLowLevelLogging{  s    0&//4f668::"446q8L21 {c
 1aeAg \\-$(C1||D1H-_UH	__U  //<4//<s   CC( (C?c                     t        d      }| j                  t        |j                  d       | j	                  d|j
                  z         t               }| j                  t        |j                  d       y )Nz(%ExY%Exm%Exdz	(20050101zCompile %r failedro   )r   r]   r   r   assertLoggedru   r   r   )r   r   s     r   testWrongTemplatez"DateDetectorTest.testWrongTemplate  sW    '!Iq{{K8'!&&01n!Iqyy.9r   N)__name__
__module____qualname__r   r   propertyr   r9   rA   rC   rG   rh   r   r   r   r   r   r   r   r    r   r   r   r   (   sg    
  *.&	9/bRh(=((ET@*,20(:r   r   z%Y-%m-%d[T ]%H:%M:%S(?:\.%f)?%zc                   *    e Zd Zd Zd Zd Zd Zd Zy)CustomDateFormatsTestc                 V    t         j                  j                  |        t                yr   )unittestTestCaser   r
   r   s    r   r   zCustomDateFormatsTest.setUp  s    
$-r   c                 V    t         j                  j                  |        t                yr   )r   r   r   r   r   s    r   r   zCustomDateFormatsTest.tearDown  s    
T"r   c           
      l   t         j                   j                  t        j                  d      d         }| j	                  |t        j                   ddddd             | j                  t        t        j                  d        | j                  t        t        j                  |       | j	                  t        j                  d      d        | j	                  t        j                  d      d        | j	                  t        j                  d	      d        | j	                  t        j                  d
      d        t         j                   j                  t        j                  d      d         }| j	                  |t        j                   ddddd             t         j                   j                  t        j                  d      d         }| j	                  |t        j                   ddddd             t         j                   j                  t        j                  d      d         }| j	                  |t        j                   ddddd             t         j                   j                  t        j                  d      d         }| j	                  |t        j                   ddddd             y )Nz2007-01-25T12:00:00Zr   i  r	      rK   rp   Zz2007-01-01T120:00:00Zz2007-13-01T12:00:00Zz2007-01-25T12:00:00+0400   z2007-01-25T12:00:00+04:00z2007-01-25T12:00:00-0400   z2007-01-25T12:00:00-04)rY   r\   iso8601r   r.   r]   	TypeError)r   r5   s     r   testIso8601z!CustomDateFormatsTest.testIso8601  s'   				+	+
??)*1-
/$T1b"a(* Iw5Iw57??2&-7??3'.7??#:;TB7??#9:DA				+	+
??-.q1
3$T1b!Q') 
			+	+
??./2
4$T1b!Q') 
			+	+
??-.q1
3$T1b"a(* 
			+	+
??+,Q/
1$T1b"a(*r   c                    t               }|j                          dD ]  \  }}}t        j                  d|||f       ||}nt               }|j	                  |       |j                  |      }|r\| j                  |       t        |t              r%| j                  ||d   j                  d             | j                  ||d          | j                  |d         y )N)))rF   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)zAug 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\**ztest*20:00:00 01.02.2003*test)r   r   z192.0.2.1 20:00:00 01.02.2003)r   r   z20: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   )z20030101 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   )  EgAr   $[2003-12-30 01:02:03 UTC] server ...)r   r   r   )r   r   "[2003-12-30 01:02:03 Z] server ...)r   r   z&[2003-12-30 01:02:03 +0000] server ...)r   r   r   r   r	   r   )r   r   rZ   r[   r+   r,   r-   
isinstancer2   r.   r1   )r   defDDmatchedr   r   r`   r5   s          r   testAmbiguousDatePatternz.CustomDateFormatsTest.testAmbiguousDatePattern  s    
.%= L!wD| 
<<T23j	B	Bb
**T
4OOD'3	gtAw}}Q/0	gtAw'T4 YL!r   c                    dD ]  \  }}}t         j                  d|||f       t               }|j                  |       |j	                  |      }|r\| j                  |       t        |t              r%| j                  ||d   j                  d             | j                  ||d          | j                  |d         y )N)
)g  ?|Az^%B %Exd %I:%ExM:%ExS**zJanuary 23 12:59:59)g  '\Az^%y %U %A %ExH:%ExM:%ExS**01 11 Wednesday 21:59:59)g  WAz^%y %W %A %ExH:%ExM:%ExS**r   )g  ZA^%y %W %w %ExH:%ExM:%ExS**z01 11 0 21:59:59)g  'YAr   z01 11 6 21:59:59)g  OA^%ExH:%ExM:%ExS**z21:59:59)g  @XAr   z00:00:01)g  MAz^%m/%d %ExH:%ExM:%ExS**z09/01 21:59:59)g   8=MAz^%Y-%m-%d**z
2004-09-01)g   @DMAz^%Y-%m-%d%z**z2004-09-01Zr   r	   r   )
rZ   r[   r   r+   r,   r-   r   r2   r.   r1   )r   r   r   r   r`   r5   s         r   testVariousFormatSpecsz,CustomDateFormatsTest.testVariousFormatSpecs  s      !wD* 
<<T232R
**T
4OOD'3	gtAw}}Q/0	gtAw'T4 A !r   N)r   r   r   r   r   r   r   r   r   r   r   r   r     s    

!*FO!b!!r   r   )
__author____copyright____license__r   r   rY   server.datedetectorr   serverr   server.datetemplater   r   utilsr
   r   r   helpersr   rZ   r   r   r   r   r   r   r   <module>r      sl   . 
2    . ! @ B B 	:	n:) n:b =
>a!H-- a!r   