ogf0 zdZdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZddlmZdd lmZmZmZmZejj-ej/Zej2j5ej2j7ed Zej2j5ej2j7ed Ze j>d Z ejBd ejDe zdzZ#Gdde jHZ%dZ&edfedffD]\Z'Z(e)e(ejTej2j5e'dD]JZ(e(jWddZ,e,j[dr)e.e%de,j_ze&e,e'Ly)z"Copyright (c) 2013 Steven HiscocksGPLN)Regex)Filter FileContainer) FilterReader) setUpMyTimetearDownMyTimeTEST_NOW CONFIG_DIRconfigfilesz\.[+\*](?!\?)[^\$\^]*z.*(?:\.[+\*].*|[^\$])$cLeZdZfdZfdZdZdZddZedZ xZ S)FilterSamplesRegexcjtt| t|_d|_t y)zCall before every test case.N)superrsetUpdict_filters _filterTestsr self __class__s @/usr/lib/python3/dist-packages/fail2ban/tests/samplestestcase.pyrzFilterSamplesRegex.setUp3s'D')&$-$ -c>tt| ty)zCall after every test case.N)rrtearDownr rs rrzFilterSamplesRegex.tearDown:sD*,rc |jttj|Dcgc]}|dj dr|c}dk\dycc}w)z Check to ensure some tests existrtestSampleRegexs z&Expected more FilterSampleRegexs testsN) assertTrueleninspect getmembers startswith)rtests rtestFiltersPresentz%FilterSamplesRegex.testFiltersPresent?sZ//++D1/ Aw,- /0 , -/sA c|jtjdtzdz|jtjdtzdz|j tjdtzdz|j tjdtzdz|j tjdtzdzy ) z9Tests regexp RE_WRONG_GREED is intact (positive/negative)zgreedy .* testz test not hard-anchoredzgreedy .+ testz test vary .* anchored$z" test no catch-all, hard-anchored$znon-greedy .*? testznon-greedy .+? testz! test vary catch-all .* anchored$N)r#RE_WRONG_GREEDsearchRE_HOST assertFalse)rs rtestReWrongGreedyCatchAllz,FilterSamplesRegex.testReWrongGreedyCatchAllGs//)G36OOPR//)G36OOPR)G36ZZ[].8;TTUW.8;^^_arc R|jj|}|r|Std}d|_d|_d|_d|_| t}|j}t|d||tjj}|j|j||j|jd|j!|j#i|j%D]}|ddk(r|d}n$|ddk(r|dg}n|j'd |d D]z}|d d k(r||_|d d k(r|j+|-|d dk(r|j-|G|d dk(r|j/|a|d dk(sj|j1|||j3} | D]E} t4j7| st9d|dt;| j=t>d|tAg}||j|<|S)NTFjail)basedir share_configrz multi-setsetzUnexpected config-token z in streamr prefregex addfailregexaddignoreregexmaxlines datepatternzFollowing regexp of "z|" contains greedy catch-all before , that is not hard-anchored at end or has not precise sub expression after : r)!rgetr returnRawHost checkAllRegex checkFindTimeactivercopyrunittestF2Br3 assertEqualgetFile getJailNameread getOptionsconvertfail prefRegex addFailRegexaddIgnoreRegex setMaxLinessetDatePattern getFailRegexr+r,AssertionErrorstrreplacer-r5) rfltNamenamer2optsflt filterConfoptoptval regexListfrs r _readFilterzFilterSamplesRegex._readFilterUs '"# :t #####* \$&4 $D&$ !:!:<*:%%'.:))+V4 //     ! c !f  VF A%!fXFII=>  v 1vS] Q> !f Q# # Q: __V Q=    * ) 4bB  s2ww13 444 ce #$-- *rcBtd|jDS)Nc3NK|]\}}|jdr||fyw)ztest.N)r').0kvs r z4FilterSamplesRegex._filterOptions..s#M41aq||G7LAMs% %)ritemsrUs r_filterOptionsz!FilterSamplesRegex._filterOptionss M4::<M MMr)N) __name__ __module__ __qualname__rrr)r/r\ staticmethodre __classcell__)rs@rrr1s4 - a3 jNNrrcfd}|S)Nc|jtjjtjj t d$d$z$g}t }i}i}d}|t|kr||}|dz }ttjj t d|dd}d|_ d}d} |D]F} | dz } tjd | } | r tj| jd }| jdd k(r|}^| jdd k(rg|_d}t!|t"r|n|gD]}|r"|j%} | j'|n|} |jt!| t(| j+d rt-| j+d  }|rw|j/| } | j+d}|s| r t1| nd}$|z}|j3|$#| }|jj5||| fw| jddk(r|j5| t;|} n'|s!| j=ds| j?si}|r|js"$}|j3|$#d}||ifg|_| jAd} |jD]"\}}} |j+drt-|ds(|\}}|jC}d} i}| j+ddk7r|jE| }nB| j+dr| j+d| z} |jEdtF| ftH}|r\g}|D]S}|\}}}}||j+dr&|jK||jK||C|j5|U|}|s$|jM|j+ddd.|j|j+ddd|jOt|dd|Dcgc]}|d c}z|D]}|\}}}}|jQD]\}}|dvs |j+|d}|'|d k(r|}|d!k(rt|j+d"i}t!|t t"t(fr|jS||t|jO|||j+d#d}| tTjTjW|d$}tYjZ|j]}||j^d&z z }|jO||d'|tYj`d$tYjb||tYj`d$tYjb|||z fz|jK||jK||%I|t|kr|jljQD]M\}}|\}}|jC}to|D]%\}!}"|j|!|vxs|"|vd*||!|"fz'Oy#t6$r$}t7d||j9| fzd}~wwxYwcc}w#t6$r$tTjTjW|d%}YwxYw#td$r}ddl3} ted(|||j9| | ||dk7r||ndd)j | ji|jkd)j | jijkf zd}~wwxYw)+Nlogsz,No sample log file available for '%s' filterrr zUTF-8T)doOpenFz4^#+ ?(failJSON|(?:file|filter)Options|addFILE):(.+)$r fileOptions filterOptionsztest.conditionztest.filter-namerdaddFILEz %s: %s:%i#z constraintlogtypejournalztest.prefix-linenofailmatchz!Line not matched when should havez Line matched when shouldn't havezMultiple regexs matched %r)timerydescrthostattemptsmatchesrzz%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#ospathisfilejoinTEST_FILES_DIRr5r$rwaitForLineEndreryjsonloadsgroupr isinstancelistr@updaterr;evalrerQr\append ValueError getFileNamenextr'striprstriprO processLine TEST_NOW_STRr addr.rCrcassertSortedEqualdatetimestrptimerzmktime timetuple microsecondstrftimegmtimerPpprintpformat splitlinesr enumerate)%r filenames regexsUsedRe commonOptsfaildataifilenamelogFile ignoreBlocklnnumline jsonREMatchrUfltOptsrSrVe regexsUsedIdxrZ failregexrIretfoundfid fail2banTimexr`rafvt jsonTimeLocaljsonTimerfailRegexIndex failRegexr2rTs% r testFilterz+testSampleRegexsFactory..testFiltersw//77>>"'',,~vt<=1D8:f),* (! C Nl8AFA 277<< t%7"7; 5L7t QJE((QSWXK%*K--a01h   1  .z   1  0t{$.x$>XJ88 ! X   4./ 88$ %)9 :;;&&t,88./73w<'>wWE   ! !7C"6 7#8$   1  *! + MT ,DJJL XH   W   GT7  >S"C,-T ;;v D"//S7d \"40F+GS-!!#YYL7 d )  ) __T "s ((% &xx*+d2 __b,5x @s u3-0* 3 d ;$((8,   9 %   )I. /  Ss   We4+- oohll7E2)+ s3x#c':!':;=".#,/)y#|T>>#!41a ; ;hhq$ J &[2 *_DHHY+,2 rCt, -  Q '   "a ! << %q - O!**33A7JK;;}6689M-- 99 x E  &94;;|;TU 4==!4dkk(6KL   " " $ # ),-E".SS7sL7 C Npmm))+,lgs3 !9$-i$8, ~yOO}$A \(A' *+,,,Q * { 7   %() ***r(;2 O!**33A7MN O 7  G'')5 ib9-d &..*5578 &..&1134 #66 777s$:ZB)Z A-Z8%Z"C,[+=[+ Z60[+ B[+ Z;r@s AJJ}55M!**W:MrcJ|jdxr|jdS)Nzzzz-r)r'rrs rrrAsQ\\&1Iajj6Irzfilter.d.ztestSampleRegexs%s)0 __copyright__ __license__rr%rrrsysrzrAserver.failregexr server.filterrrclient.filterreaderrutilsr r r r utcfromtimestamp isoformatrrrdirname__file__TEST_CONFIG_DIRr_resolveHostTagr-compileescaper+TestCaserrbasedir_filter_filterlistdir rpartition filterNamer'setattrupperrrrrs,5   $1.DD  11(;EEG '',,rwwx8(Cbggooh7A %   )4yryy7IILeef[N**[Nzod MNIJ 3Hgw 277<<*5683W!!#&q)*   s # :++--J13 3 3r