
    =*f0              
          S r SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJrJr  SSKJr  SS	KJrJrJrJr  \R                  R-                  \5      R/                  5       r\R2                  R5                  \R2                  R7                  \5      S
5      r\R2                  R5                  \R2                  R7                  \5      S5      r\R>                  " S5      r \RB                  " S\RD                  " \ 5      -   S-   5      r# " S S\	RH                  5      r%S r&\S 4\S 44 H  u  r'r(\)" \(\RT                  " \R2                  R5                  \'S5      5      5       HQ  r(\(RW                  S5      S   r,\,R[                  S5      (       a  M/  \." \%S\,R_                  5       -  \&" \,\'5      5        MS     M     g)z"Copyright (c) 2013 Steven HiscocksGPL    N   )Regex)FilterFileContainer)FilterReader   )setUpMyTimetearDownMyTimeTEST_NOW
CONFIG_DIRconfigfiles<HOST>z\.[+\*](?!\?)[^\$\^]*z.*(?:\.[+\*].*|[^\$])$c                   Z   ^  \ rS rSrU 4S jrU 4S jrS rS rS	S jr\	S 5       r
SrU =r$ )
FilterSamplesRegex1   c                 j   > [         [        U ]  5         [        5       U l        SU l        [        5         g)zCall before every test case.N)superr   setUpdict_filters_filterTestsr
   self	__class__s    @/usr/lib/python3/dist-packages/fail2ban/tests/samplestestcase.pyr   FilterSamplesRegex.setUp3   s'    D')&$-$-    c                 >   > [         [        U ]  5         [        5         g)zCall after every test case.N)r   r   tearDownr   r   s    r   r!   FilterSamplesRegex.tearDown:   s    D*,r   c           
          U R                  [        [        R                  " U 5       Vs/ s H   nUS   R	                  S5      (       d  M  UPM"     sn5      S:  S5        gs  snf )z Check to ensure some tests existr   testSampleRegexs
   z&Expected more FilterSampleRegexs testsN)
assertTrueleninspect
getmembers
startswith)r   tests     r   testFiltersPresent%FilterSamplesRegex.testFiltersPresent?   s`    //++D1 /1Aw,- 	1 / 0	 ,	-/s   A 
A c                    U R                  [        R                  S[        -   S-   5      5        U R                  [        R                  S[        -   S-   5      5        U R	                  [        R                  S[        -   S-   5      5        U R	                  [        R                  S[        -   S-   5      5        U R	                  [        R                  S[        -   S-   5      5        g	)
z9Tests regexp RE_WRONG_GREED is intact (positive/negative)zgreedy .* testz test not hard-anchoredzgreedy .+ testz test vary .* anchored$z" test no catch-all, hard-anchored$znon-greedy .*? testznon-greedy .+? testz! test vary catch-all .* anchored$N)r&   RE_WRONG_GREEDsearchRE_HOSTassertFalse)r   s    r   testReWrongGreedyCatchAll,FilterSamplesRegex.testReWrongGreedyCatchAllG   s    //)G36OOPR//)G36OOPR)G36ZZ[].8;TTUW.8;^^_ar   c           
         U R                   R                  U5      nU(       a  U$ [        S 5      nSUl        SUl        SUl        SUl        Uc
  [        5       nUR                  5       n[        USUU[        R                  R                  S9nU R                  UR                  5       U5        U R                  UR                  5       S5        UR!                  5         UR#                  0 5        UR%                  5        H  nUS   S:X  a  US   nO&US   S:X  a  US   /nOU R'                  S	U< S
35        W H  nUS   S:X  a  Xl        M  US   S:X  a  UR+                  U5        M0  US   S:X  a  UR-                  U5        ML  US   S:X  a  UR/                  U5        Mh  US   S:X  d  Ms  UR1                  U5        M     M     UR3                  5       n	U	 HM  n
[4        R7                  U
5      (       d  M  [9        SU< S[;        U
5      R=                  [>        S5      < 35      e   U[A        5       /nXPR                   U'   U$ )NTFjail)basedirshare_configr   z	multi-set   setzUnexpected config-token z
 in streamr   	prefregexaddfailregexaddignoreregexmaxlinesdatepatternzFollowing regexp of "z|" contains greedy catch-all before <HOST>, that is not hard-anchored at end or has not precise sub expression after <HOST>:
r   )!r   getr   returnRawHostcheckAllRegexcheckFindTimeactiver   copyr   unittestF2Br8   assertEqualgetFilegetJailNameread
getOptionsconvertfail	prefRegexaddFailRegexaddIgnoreRegexsetMaxLinessetDatePatterngetFailRegexr/   r0   AssertionErrorstrreplacer1   r:   )r   fltNamenamer7   optsflt
filterConfoptoptval	regexListfrs              r   _readFilterFilterSamplesRegex._readFilterU   s   '"#
:t#####*	\$&4	$D&$!:!:<*:%%'.:))+V4//!c	!fVFA%!fXFII=>v
1v]	Q>	!f	Q#	#	Q:	__V	Q=	   "*  )bB
s2ww13 4 4  
ce#--	*r   c                 B    [        S U R                  5        5       5      $ )Nc              3   \   #    U  H"  u  pUR                  S 5      (       a  M  X4v   M$     g7f)ztest.N)r*   ).0kvs      r   	<genexpr>4FilterSamplesRegex._filterOptions.<locals>.<genexpr>   s!     M<41q||G7L<s   ,
,)r   itemsrZ   s    r   _filterOptions!FilterSamplesRegex._filterOptions   s    M4::<MMMr   )r   r   )N)__name__
__module____qualname____firstlineno__r   r!   r,   r3   ra   staticmethodrl   __static_attributes____classcell__)r   s   @r   r   r   1   s4    
-a3j N Nr   r   c                    ^ ^ UU 4S jnU$ )Nc                 2  > U R                  [        R                  R                  [        R                  R	                  [
        ST$5      5      ST$-  5        T$/n[        5       n0 n0 nSnU[        U5      :  Ga%  X   oeS-  n[        [        R                  R	                  [
        SU5      SSS9nSUl	        SnSn	U GH  n
U	S-  n	[        R                  " S	U
5      nU(       Ga   [        R                  " UR                  S
5      5      nUR                  S5      S:X  a  UnMg  UR                  S5      S:X  Ga&  / U l        Sn[!        U["        5      (       a  UOU/ H  nU(       a"  UR%                  5       nUR'                  U5        OUnU R                  [!        U[(        5      5        UR+                  S5      (       a  [-        UR+                  S5      5      (       + nU(       a  M  U R/                  U5      nUR+                  S5      nU(       d  U(       a  [1        U5      OSnT$U-   nU R3                  UT$T#US9nU R                  R5                  XU45        M     GM  UR                  S5      S:X  a  UR5                  U5        GM   [;        U5      n
O7U(       d+  U
R=                  S5      (       d  U
R?                  5       (       d  GM  0 nU(       a  GM  U R                  (       d  T$nU R3                  UT$T#S S9nX0 4/U l        U
RA                  S5      n
U R                   GH`  u  pnUR+                  S5      (       a  [-        US   5      (       d  M2  Uu  nnURC                  5       nSn 0 nUR+                  S5      S:w  a  URE                  U
5      nOGUR+                  S5      (       a  UR+                  S5      U
-   n
URE                  S[F        U
4[H        5      nU(       ae  / nU H[  nUu  nnnnUb  UR+                  S5      (       a'  URK                  U5        URK                  UU   5        MJ  UR5                  U5        M]     UnU(       d%  U RM                  UR+                  SS5      S5        GMR  U R                  UR+                  SS5      S5        U RO                  [        U5      SSU Vs/ s H  nUS   PM
     sn-  5        U GH  nUu  nnnnURQ                  5        H  u  nnUS;  d  M  UR+                  US 5      nUc)  US :X  a  UnUS!:X  a  [        UR+                  S"0 5      5      n[!        U[        ["        [(        45      (       a  U RS                  UU5        M  U RO                  UU5        M     UR+                  S#S 5      nUb   [T        RT                  RW                  US$5      n[X        RZ                  " UR]                  5       5      nUUR^                  S&-  -  nU RO                  UUS'U[X        R`                  " S$[X        Rb                  " U5      5      U[X        R`                  " S$[X        Rb                  " U5      5      UU-
  4-  5        URK                  U5        URK                  UU   5        GM     GMc     GM     U[        U5      :  a  GM%  U Rl                  RQ                  5        HV  u  pUu  nnURC                  5       n[o        U5       H-  u  n!n"U R                  U!U;   =(       d    U"U;   S*UU!U"4-  5        M/     MX     g ! [6         a$  n[7        SUUR9                  5       U	4-  5      eS nAff = fs  snf ! [6         a$    [T        RT                  RW                  US%5      n GNf = f! [d         a  nSS K3n [e        S(UUUR9                  5       U	U
UUS:w  a  UU   OS S)R	                  U Ri                  U5      Rk                  5       5      S)R	                  U Ri                  W5      Rk                  5       5      4	-  5      eS nAff = f)+Nlogsz,No sample log file available for '%s' filterr   r	   zUTF-8T)doOpenFz4^#+ ?(failJSON|(?:file|filter)Options|addFILE):(.+)$r   fileOptionsfilterOptionsztest.conditionztest.filter-name rk   addFILEz	%s: %s:%i#z

constraintlogtypejournalztest.prefix-linenofailmatchz!Line not matched when should havez Line matched when shouldn't havezMultiple regexs matched %r)timer   descr~   hostattemptsmatchesr   z%Y-%m-%dT%H:%M:%Sz%Y-%m-%dT%H:%M:%S.%fg    .Az:UTC Time  mismatch %s (%s) != %s (%s)  (diff %.3f seconds)zC%s: %s on: %s:%i, line:
  %s
regex (%s):
  %s
faildata: %s
fail: %s
z %s: Regex has no samples: %i: %r)8r&   ospathisfilejoinTEST_FILES_DIRr:   r'   r   waitForLineEndrer   jsonloadsgroupr   
isinstancelistrE   updater   r@   evalrl   rV   ra   append
ValueErrorgetFileNamenextr*   striprstriprT   processLineTEST_NOW_STRr   addr2   rH   rj   assertSortedEqualdatetimestrptimer   mktime	timetuplemicrosecondstrftimegmtimerU   pprintpformat
splitlinesr   	enumerate)%r   	filenamesregexsUsedRe
commonOptsfaildataifilenamelogFileignoreBlocklnnumlinejsonREMatchrZ   fltOptsrX   r[   eregexsUsedIdxr_   	failregexrN   retfoundfidfail2banTimexrf   rg   fvtjsonTimeLocaljsonTimer   failRegexIndex	failRegexr7   rY   s%                                      r   
testFilter+testSampleRegexsFactory.<locals>.testFilter   sc   //77>>"'',,~vt<=1D8: f), *(!	C	Nl8FA277<<t%7 "7;5t	QJE((QSWXK%*K--a01h			1		.z			1		0t{$.x$>$>XJN8!	X	
4./88$%%)9 :;;{&&t,88./73w<'>wWE				!	!7"6	7# O$ 			1		*! 
+ MT	,,DJJLLXH WGT7>S",-T;;vD"//d\""40F+G+GS-!!#YYL7d	)			)__T"s
((%
&
&xx*+d2__b,5x@s	u3-0*	3d;$((8,,			9	%			)I.	/	S  sWe4+- oohll7E2)+
s3x#c':c!c':;= #,/)y#|T>>#41a;;hhq$J&[2*_DHHY+,2rCt,--

 
 Q
'
			"a	  $  <<%q
-	O!**33A7JK ;;}6689M--	99x	E
&94;;|;TU	4==!4dkk(6KL		 
"
"	$ #	),-E S 0s  	
C	Np mm))+lg3!9$-i$8 ~yOO}$A	\(A'	*+, %9 ,Q  *{	7 %() * **r (;2  	O!**33A7MN	O  7  G'')5ib9-d		&..*5578		&..&1134	#66 7 77s   &<\$C \(A5\ &\-D];5=];2]0];5B]; ]
3C];
]\==]];
*]8	4];7]8	8];;
`B`` )rY   r7   r   s   `` r   testSampleRegexsFactoryr      s    l,\ 	r   c                 ^    U R                  S5      (       + =(       a    U R                  S5      $ )Nzcommon.conf.conf)endswithr   s    r   <lambda>r   @  s!    AJJ}55M!**W:MMr   c                 T    U R                  S5      =(       a    U R                  S5      $ )Nzzzz-r   )r*   r   r   s    r   r   r   A  s    Q\\&1Iajj6IIr   zfilter.d.ztestSampleRegexs%s)0__copyright____license__r   r(   r   r   r   sysr   rF   server.failregexr   server.filterr   r   client.filterreaderr   utilsr
   r   r   r   utcfromtimestamp	isoformatr   r   r   dirname__file__TEST_CONFIG_DIRr   _resolveHostTagr1   compileescaper/   TestCaser   r   basedir_filter_filterlistdir
rpartition
filterNamer*   setattrupperr   r   r   <module>r      s  , 5    	 	 
   $ 1 . D D   11(;EEG'',,rwwx8(Cbggooh7A 


)4ryy7IILeef[N** [Nzod MNIJHg w


277<<*568W!!#&q)*			s	#	#
:++--J13	8	r   