
    Bd0              
          d Z dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZmZ ddlmZ dd	lmZmZmZmZ ej                            e                                          Zej                            ej                            e          d
          Zej                            ej                            e          d          Z ej        d          Z  ej!        d ej"        e           z   dz             Z# G d de	j$                  Z%d Z&ed fed ffD ]\  Z'Z( e)e( ej*        ej                            e'd                              D ]^Z(e(+                    d          d         Z,e,-                    d          s, e.e%de,/                                z   e&e,e'                     _dS )z"Copyright (c) 2013 Steven HiscocksGPL    N   )Regex)FilterFileContainer)FilterReader   )setUpMyTimetearDownMyTimeTEST_NOW
CONFIG_DIRconfigfiles<HOST>z\.[+\*](?!\?)[^\$\^]*z.*(?:\.[+\*].*|[^\$])$c                   R     e Zd Z fdZ fdZd Zd ZddZed             Z	 xZ
S )	FilterSamplesRegexc                     t          t          |                                            t                      | _        d| _        t                       dS )zCall before every test case.N)superr   setUpdict_filters_filterTestsr
   self	__class__s    @/usr/lib/python3/dist-packages/fail2ban/tests/samplestestcase.pyr   zFilterSamplesRegex.setUp3   s@    D!!'')))&&$-$-----    c                 r    t          t          |                                            t                       dS )zCall after every test case.N)r   r   tearDownr   r   s    r   r   zFilterSamplesRegex.tearDown:   s2    D!!**,,,r   c                     |                      t          d t          j        |           D                       dk    d           dS )z Check to ensure some tests existc                 H    g | ]}|d                               d          | S )r   testSampleRegexs
startswith).0tests     r   
<listcomp>z9FilterSamplesRegex.testFiltersPresent.<locals>.<listcomp>B   s?     / / /Aw,--/ / / /r   
   z&Expected more FilterSampleRegexs testsN)
assertTrueleninspect
getmembersr   s    r   testFiltersPresentz%FilterSamplesRegex.testFiltersPresent?   sb    // / /+D11 / / / 0 0	 ,	- - - - -r   c                 6   |                      t                              dt          z   dz                        |                      t                              dt          z   dz                        |                     t                              dt          z   dz                        |                     t                              dt          z   dz                        |                     t                              dt          z   dz                        d	S )
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assertFalser-   s    r   testReWrongGreedyCatchAllz,FilterSamplesRegex.testReWrongGreedyCatchAllG   s"   //)G36OOPPR R R//)G36OOPPR R R)G36ZZ[[] ] ].8;TTUUW W W.8;^^__a a a a ar   Nc           
         | j                             |          }|r|S t          d           }d|_        d|_        d|_        d|_        |t                      }|                                }t          |d||t          j        j                  }|                     |                                |           |                     |                                d           |                                 |                    i            |                                D ]}|d         dk    r	|d         }n/|d         dk    r
|d         g}n|                     d	|d
           |D ]}|d         dk    r||_        |d         dk    r|                    |           8|d         dk    r|                    |           Z|d         dk    r|                    |           ||d         dk    r|                    |           |                                }	|	D ]W}
t4                              |
          r;t9          d|dt;          |
                              t>          d                    X|tA                      g}|| j         |<   |S )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getFailRegexr0   r1   AssertionErrorstrreplacer2   r:   )r   fltNamenamer7   optsflt
filterConfoptoptval	regexListfrs              r   _readFilterzFilterSamplesRegex._readFilterU   s   '""# 
:t#####*	\$&&4	$D&$!:< < <*:%%''...:))++V444//!!    c	!fVFFA%!fXFFIII=>>> 
  
 v
1vS]]	Q>	!	!f	Q#	#	#	Q:		__V	Q=	 	 
    ) 4 4bB 4
.ggs2www1113 4 4 44
 
cee#$-	*r   c                 X    t          d |                                 D                       S )Nc              3   N   K   | ] \  }}|                     d           ||fV  !dS )ztest.Nr#   )r%   kvs      r   	<genexpr>z4FilterSamplesRegex._filterOptions.<locals>.<genexpr>   s;      MM41aq||G7L7LMAMMMMMMr   )r   itemsrZ   s    r   _filterOptionsz!FilterSamplesRegex._filterOptions   s'    MM4::<<MMMMMMr   )N)__name__
__module____qualname__r   r   r.   r4   ra   staticmethodri   __classcell__)r   s   @r   r   r   1   s                
- - -a a a3 3 3 3j N N ,N N N N Nr   r   c                       fd}|S )Nc                    |                      t          j                            t          j                            t
          d#                    d#z             #g}t                      }i }i }d}|t          |          k     r||         }|dz  }t          t          j                            t
          d|          dd          }d|_	        d}d}	|D ]/}
|	dz  }	t          j        d	|
          }|r	 t          j        |                    d
                    }|                    d          dk    r|}d|                    d          dk    r4g | _        d}t!          |t"                    r|n|gD ]}|r*|                                }|                    |           n|}|                      t!          |t(                               |                    d          r#t-          |                    d                     }|sz|                     |          }|                    d          }|s|rt1          |          nd}#|z   }|                     |#"|          }| j                            |||f           |                    d          dk    r|                    |           n9# t6          $ r,}t7          d||                                |	fz            d }~ww xY wt;          |          }
n/|s)|
                    d          s|
                                sYi }|r_| j        s&#}|                     |#"d           }||i fg| _        |
                     d          }
| j        D ]\  }}}|                    d          rt-          |d                   s2|\  }}|!                                }d}	 i }|                    d          dk    r|"                    |
          }nP|                    d          r|                    d          |
z   }
|"                    dtF          |
ftH                    }|rmg }|D ]f}|\  }}}}||                    d          r1|%                    |           |%                    ||                    Q|                    |           g|}|s,| &                    |                    dd          d           l|                      |                    dd          d           | '                    t          |          ddd |D             z             |D ]}|\  }}}}|(                                D ]\  }}|d vr|                    |d           }|1|d!k    r|}|d"k    r#t          |                    d#i                     }t!          |t          t"          t(          f          r| )                    ||           | '                    ||           |                    d$d           }|	 tT          j*        +                    |d%          }n0# t6          $ r# tT          j*        +                    |d&          }Y nw xY wtY          j-        |.                                          }||j/        d'z  z  }| '                    ||d(|tY          j0        d%tY          j1        |                    |tY          j0        d%tY          j1        |                    ||z
  fz             |%                    |           |%                    ||                    # td          $ r}dd l3}te          d)|||                                |	|
||dk    r||         nd d*                    |4                    |          5                                          d*                    |4                    |          5                                          f	z            d }~ww xY w1|t          |          k     | j6        (                                D ]U\  }}|\  }}|!                                }to          |          D ]'\  } }!|                      | |v p|!|v d+|| |!fz             (Vd S ),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 rh   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 %rc                     g | ]
}|d          S )r    )r%   xs     r   r'   z?testSampleRegexsFactory.<locals>.testFilter.<locals>.<listcomp>  s    ':':':!':':':r   )timer}   descrx   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@   evalri   rV   ra   append
ValueErrorgetFileNamenextr$   striprstriprT   processLineTEST_NOW_STRr   addr3   rH   rg   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fail2banTimerd   re   fvtjsonTimeLocaljsonTimer   failRegexIndex	failRegexr7   rY   s$                                     r   
testFilterz+testSampleRegexsFactory.<locals>.testFilter   sj	   //7>>"',,~vt<<==1D8: : : f), *(!	C	NNl8AFA27<< t% % %7 "7;5 L7 L7t	QJE(QSWXXK +%*K--a0011h			1			.	.z			1			0	0t{$.x$>$>NXJ 8 88 	!!	X				
4..///88$%% 	<)9 : :;;; 	8&&t,,88.//	B7#B3w<<<'>wWEE			!	!7C"6	7	7	7			1			*	*!!! 
+  * * *{	7  %() * * ** MMTT	 ,, DJJLL XH  .WGT7>>S"C,-T;;vD"/ S7 S7d\"" 40F+G+G S-!!##YYL7d	)				)	)__T""ss
((%
&
& 3xx*++d2__b,5x@@s	 u  3-0*	3d;$((8,,;			9	%	%	%			)I.	/	/	/	Ss We44+- - - oohll7E22)+ + +
s3xx#':':c':':':;= = =  ". ".#,/)y#|T>>## ! !41a;;;hhq$J&[[2*__DHHY++,,2rCt,-- 


 
 Q
'
'
'
			"a	 	 	 <<%%q
-	O!*33A7JKK 	O 	O 	O!*33A7MNN	O;}668899M-	99x	E
&94;|;T;TUU	4=!4dk(6K6KLL		 
"
"	$ 	$ 	$ ###	),----E".F  7 7 7mmm  G''))5ib9--d		&..**557788		&..&&113344	#66 7 7 77YS7E 	
C	NNp m))++ , ,lgs3!!9$-i$8$8 , , ~yOO}$A	\(A'	*+, , , ,,, ,sl   8AJ:;EJ:	.J::
K0'K++K0D]+D5]! Y]*Y/	,].Y/	/C]
`B/_>>`r   )rY   r7   r   s   `` r   testSampleRegexsFactoryr      s1    l, l, l, l, l, l,\ 	r   c                 X    |                      d           o|                      d          S )Nzcommon.conf.conf)endswithr   s    r   <lambda>r   @  s&    AJJ}555M!**W:M:M r   c                 V    |                      d          o|                     d          S )Nzzzz-r   )r$   r   r   s    r   r   r   A  s#    Q\\&11Iajj6I6I r   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   _resolveHostTagr2   compileescaper0   TestCaser   r   basedir_filter_filterlistdir
rpartition
filterNamer$   setattrupperr   r   r   <module>r      s  , 5    				 				 



   $ $ $ $ $ $ 1 1 1 1 1 1 1 1 . . . . . . D D D D D D D D D D D D  11(;;EEGG',,rwx88(CCbgooh77AA  %

)
)4yry7I7IILeeff[N [N [N [N [N* [N [N [Nzo o od MMNIIJ 3 3Hg w
27<<*55668 8 3 3W!!#&&q)*			s	#	# 3
7:++---J113 3 3	3	3 3r   