ogfZdZdZdZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z ddl mZdd lmZmZdd lmZd d lmZd d lmZd dlmZmZGddeZGddeZGddeZy)zSerg G. Brester (sebres)z"Copyright (c) 2014 Serg G. BresterGPLN)MyTime) FailTicket BanTicket) FailManager) ObserversObserverThread)Utils)LogCaptureTestCase) DummyJail) getFail2BanDb Fail2BanDbcBeZdZfdZfdZdZddZdZdZxZ S) BanTimeIncrctt| t|_|j |j_t |_yCall before every test case.N)superrsetUpr_BanTimeIncr__jail calcBanTimer Observerself __class__s A/usr/lib/python3/dist-packages/fail2ban/tests/observertestcase.pyrzBanTimeIncr.setUp.s5 T " $+ ,,$++ "$-c*tt| yN)rrtearDownrs rr"zBanTimeIncr.tearDown5s T#%rcP|jj|j||Sr!)rrr)rbanTimebanCounts rrzBanTimeIncr.calcBanTime8s  " "4;; BBrc|j}|jdd|j|jdd|jdd|j|jdd|jdd|jdd|jd ||jt d d Dcgc]}|j d |c}gd |jddgd}|7t |jd}|d kr|d|d z ||dz gd |z zz}|jt d d Dcgc]}|j d |c}||jdd|jdd|jt d d Dcgc]}|j d |c}gd|jdd|jt d d Dcgc]}t|j d |c}gd|jdd|jdd|jt d d Dcgc]}|j d |c}gd|jdd|jdd|jdt dDcgc]-}dt dDcgc]}|j d d c}v/c}}v|jdd|jdt dDcgc]-}dt dDcgc]}|j d d c}v/c}}v|jd d|jdd|jdd|jddycc}wcc}wcc}wcc}wcc}wcc}wcc}}wcc}wcc}}w)N incrementtrueTmaxtime1dQrndtimefactor multipliersr X ` %K,r+r+r+30d) r2r3r4r5r6r7r8iXii`  rr2) r3r4r5r6r7r8r+r+r+r+z1.33) i<ix ii1icir+r+r+r+12h r2r3r4r5r6r7r>r>r>24h5mF r2) rsetBanTimeExtra assertEqualgetBanTimeExtrarangerlensplitint assertTrue assertFalse)rr.aiarrmultcntcs r testDefaultzBanTimeIncr.testDefault;sf kk!K(1$$[148It$1$$Y/:It$Hd#M;/#(B<0aAMM#q0E Iu%M# ""3' (7 l a s719~."W*= >C#(B<0aAMM#q0It$Hc"#(B<0aAMM#q0F Hf%(-a 51C c15FHd#Iu%#(B<0aAMM#q0EIu%It$//r SATU2Y?ammC+? ? SSIt$r SATU2Y?ammC+? ? SSM4(Hd#Iu%It$c111 61@ S@ SsNN. N3+N89"N="OO O/O *O =OO O O c |jd|jdjtdDcgc]}td|zc}ycc}w)Nz1 2 4 8 16 32 64 128 256r:r )rPjoinrEstr)rrLs rtestMultiplierszBanTimeIncr.testMultiplierszsB-.388b :1SAY:;<:sA c|j}|jdd|jdd|jdd|jdd|jdd|jtd d Dcgc]}t |j d |c}gd |jdd |jtd d Dcgc]}t |j d |c}gd|jdd|jdd|jtd d Dcgc]}t |j d |c}gd|jdd|jdd|jtd d Dcgc]}t |j d |c}gd|jdd|jdd|j dtdDcgc]6}dtdDcgc]}t |j d d c}v8c}}v|jdd|jdtdDcgc]6}dtdDcgc]}t |j d d c}v8c}}v|jdd|jdd|jdd|jdd|jddycc}wcc}wcc}wcc}wcc}wcc}}wcc}wcc}}w)Nr)r?r,formulazGban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)r-z2.0 / 2.885385r.r r/r0r1r9) r2r3r4r5r6r7r8iXii` 1) i^iQi/ir+r+r+r+r+r+r<r=r@FrAr2)rrBrCrErHrrIrJ)rrKrLrOs r testFormulazBanTimeIncr.testFormulas kk!Iu%It$IhiH./M4((-a 51C c15E Iu%(-a 51C c15HIu%Hc"(-a 51C c15GH./Iu%(-a 51C c15EIu%It$//eTVi XT%)DQc!--Q/0D D XXIt$eTVi XT%)DQc!--Q/0D D XXHd#M4(Hd#Iu%It$M6 666E XE XsH"L""L'"L,)"L1L; &"L6L; M "M8M 6L; M r!) __name__ __module__ __qualname__rr"rrPrUrY __classcell__rs@rrr,s##&C=%~= 0%rrc<eZdZfdZfdZddZdZdZxZS) BanTimeIncrDBcztt| tt j dtyt jdd\}|_t|j|_ t|_ |j|j_ t|_|jt _y)rNzEUnable to import fail2ban database module as sqlite is not available.z.db fail2ban_)rr`rrunittestSkipTesttempfilemkstemp dbFilenamerdbrjaildatabaser rr Main)r_rs rrzBanTimeIncrDB.setUps t"$     ''{;!T_ $// *$'k$)ww$)) "$-==).rcty|jjdt_t j |jtt|+yzCall after every test case.N) rrstopr rkosremovergrr`r"rs rr"zBanTimeIncrDB.tearDowns@ --).))DOO t%'rc|j}|)|j|jj}|jd|jj |||}|Sr!)ri getBanTimeactions setBanTimer incrBanTime)rticketr$riincrTimes rrvzBanTimeIncrDB.incrBanTimesX $ _   t||668 97D ]] & &tWf =( /rc ty|j}|jj||jj d|j dd|j ddd}ttj}t||g}|jtdDcgc]}|j|dc}gd|j|jj|||j|jj!||dd Dcgc] \}}}|||f c}}}d |dfg|j#|d z|j|j|dd |jj|||j|jj!||dd Dcgc] \}}}|||f c}}}d |d zd fg|j|jj!|dddDcgc] \}}}|||f c}}}d |d zd fg|j|jj!|||Dcgc] \}}}|||f c}}}d |d zd fg|j|jj%d|d g|jj%|d } |jt'| d|d|d zd|jj%|d } |jt'| d|d|d zd|jj%||d } |jt'| d|d|d zdd }tdD]^}|j#||zdz|j|d} |j| |d z|jj||| }`|j#||zdz|j|d} |j)| |d z|j| ||jj||| }t|dz|dz g} | j d| j|jj|| t|dz|dz g} | j d | j|jj|| |jj%|d } |jt+| d |jt'| d!d|d||zdzd"|d#|jt'| d d|dzd|dz d"d d$|jj%|d%z d } |jt+| d|jt'| d d|dzd|dz d"dd$|j-| d j/||j-| d j/||j1| d j/||j-| d j/|d%z t|d&z|d z g}|j1|j/|d'|j-|j/|d(|j d(|j-|j/|d'|j-|j/|d(|j d'|j1|j/|d(|j d(|j|jj|||jj%|d } |jt+| d|jt'| d d|d&zd|d z d"d(d$|jj3|jj%|d } |jt+| d|j d'|j|jj|||jj3|jj%|d } |jt+| d |j| d!j5|d)|j_|jj3|jj%|d } |jt+| d |j| d!j5|dzd*|j_|jj3|jj%|d } |j| gt9d+,} d | j:_| j dd|j| _|jj| t9d-d+.} d | j:_|j| _|jj| t||g}|j d/|j|jj| |t||d/z g} | j d0| jAd | j|jj| | |jj%| |d } |jt+| d |jt'| d!d|d|d"d/d$|jj%| |d } |jt+| d |jt'| d!d|d|d/z d"d0d1|jj!|| D]}|j|d |d/fn|jj!|| D]}|j|d |d/z d0fn|jj!|d2D]}|j|d|d3fn| jCd 4| jE}|j1|jF|jt'|d|d|d"d/d$| jCd 4|j| jEd | j d5d6| jC| jE}|j1|jF|jt'|d|d|d"d'd$| jC|j| jEd ycc}wcc}}}wcc}}}wcc}}}wcc}}}w)7NrAr'r(r.z&1 2 4 8 16 32 64 128 256 512 1024 2048 192.0.2.1)rArArAFr rT) forbantimefromtimei)rrcorrectBanTime)iprzFailTicket: ip=z time=z- bantime=20 bancount=2 #attempts=0 matches=[])rrz[FailTicket: ip=z. bantime=20 bancount=2 #attempts=0 matches=[]]rirrr;r+r>rXi@rz bantime=z# bancount=13 #attempts=0 matches=[]z" bancount=1 #attempts=0 matches=[]i 3r0i]pollingbackendz DummyJail-2)nameripi.z" bancount=2 #attempts=0 matches=[]) overalljailsiPF)rr)10m)$rrirhaddJailrtrurBrHrtimerrCrErv incrBanCountaddBangetBansetTimegetCurrentBansrTassertNotEqualrFrJ isTimedOutrIpurgegetID _purgeAgerfilter ignoreSelfrj setBanCountrestoreCurrentBans getFailTicketrestored)rrirstimerwrLr% timeOfBan lastBanTimerestored_ticketsr$ticket2jail1jail2ticket1rows rtestBanTimeIncrzBanTimeIncrDB.testBanTimeIncrs  $''//$,,"{F+}&NO" fkkm % b% $&*/(3QDVR 3  ''..vOSww~~^`bfhlnsOtuu+K8Y Xy+&urN  ..4##FB/4''..vOSww~~^`bfhlnsOtuu+K8Y Xy+&u B OSww~~^`bdfjlpOqrr+K8Y Xy+&r B OSww~~^`mr~C~PDEE+K8Y Xy+&E B 77YuU WW++r%+HPRTY\^T^_ WW++U5+QRTV[^`V`a WW++V[+\RTV[^`V`a + 9a >>%+%)*   fb )7G[1_-77>>$;  ..$q()   VR ('g{Q/7K(''..v+ r#vuX~r 2' X ''..w r#vuX~r 2' X ''..wWW++U5+Q3'(!,PRTY\gTgjkTkmxyOQRUvW\]eWegop WW++U8^TY+Z3'(!,OQRUvW\]eWegop #A&11%89#A&11%89//"1%0078#A&11%.AB BsFE(NB /&//&##E3/06$$UB/0B6$$UC016$$UB/0C//&##E2./ B''..vWW++U5+Q3'(!,OQRUvW\]eWegij ''--/WW++U5+Q3'(!,C''..v''--/WW++U5+Q3'(!,#A&,,.3 $''''--/WW++U5+Q3'(!,#A&,,.37!$''''--/WW++U5+Q#R( I &%!%,, V,77%.''//%  :%!%,,77%.''//% r5" %' T ''.. r5:r *' U a ''.. WW++W\+]3'(!,OQSXZ^_WW++W\+]3'(!,OQSXY]S]_de WW^^B & cC!UD)* WW^^B & cC!U4Z/0 WW^^BT^ 2 cC!UE*+ %0    &//&//"3v;OQSXZ^_%05&&(%0 5)    &//&//"3v;OQSXZ]^5&&(%0q4vv s Es2w.w w' w. 'w5 ctytdx}|_|j|_|jj ||j jd|jddtj}|j|j|j|jd|jdd|j_|j!d d d |j#d d |j%d|jd|jdt't)j*}|jj-}|j/|gd}t1||dz g}t3x}|j4_|j9dt;dD]&}|j=||jd||(|jd|j/|j?d|jA|jC |jEd|jjG|||jjI||dz d} |j/tK| dt1||g}t3x}|j4_|j9d|j=||jd|||jdtMjN|jBd} |jA| |j/| jQ|jS| } tUjV| } |j/| | |jd| |d|jd|j/| jYd|j/| j?d|jjI||d} |j/tK| d|j/| djYd|j/| dj?dt1||dz dg}|j[||j]|j j_t1|t)j*dg}|j[||jA|j j_|jd|jjI||d} |j/tK| d|j/| djYd|j/| dj?dt1|d zt)j*d!g}|jd"|j[||jA|j j_|jdt1|d zt)j*d!g}|jd#|j[||j]|j j_|jd|jjI||d} |j/tK| d$|j/| djYd"|j/| dj?d|jay)%NrrrAr'r(noprrDB_PURGEgMbP?db_purgezPurge database event occurredT)waitg?rzxr{ failureFoundrFrr banFound<ztest-expired-ban-timez test-actionsi@rXztest-permanentrr0r)1rrrirhrjrrtrurBr rkstartdb_setadd wait_emptyradd_named_timer assertLogged wait_idlerHrrgetBansrCrrr failManager setMaxRetryrE addFailure getBanCountrIrrrrrFr wait_forgetRetry getMaxRetryrwraprs putFailTicketrJcheckBanro) rriobsrticketsrrwrrLrr failticket2s r testObserverzBanTimeIncrDB.testObservers y11$''$-''//$,,"{F+#))+**TWW''%... $''j%43$?--''%... fkkm % GGOO '7B" b%)R (&*5-7+ ' ! 8)a&!77>4()..6%%'+//d((**+Q''..vWW++c Z_+`3'(!, b% $&*5-7+ ' !  ''.$'.. NN4--r 2'//'7##%{'>'>'@A+ NN; ''7K(''*gtR(..7%%'-7&&(!,WW++V[+\3'(!,#A&113S9#A&224a8 b%(%<$= >&V4<<((*+ b&++-.)9 :&V//$,,'')*..WW++V[+\3'(!,#A&113S9#A&224a8 bffkkm.>-? @&BV//$,,'')*.. bffkkm.>-? @&CV4<<((*+..WW++V[+\3'(!,#A&113R8#A&224a8((*rr!) rZr[r\rr"rvrrr]r^s@rr`r`s! (g1Rq rr`cJeZdZfdZfdZdZGddeZdZxZ S) ObserverTestc*tt| yr)rrrrs rrzObserverTest.setUp7s d!#rc*tt| yrn)rrr"rs rr"zObserverTest.tearDown;s d$&rct}|j|jdtdg}|j d|j |j d|jd|j d|j|j|j|tdgd|_ |j d|j |j d|jd|j dtjz|j|j|j|tdgd|_ |j d|j|tdg|j|j|j|j|j!d}y) Nr testcalltest2Ttest3rAF)r rrsetrclearrrJis_fullrCpausedr DEFAULT_SLEEP_TIMErIisActiveisAlivero)rros rtestObserverBanTimeIncrz$ObserverTest.testObserverBanTimeIncr?sI#))+-- 6(m!''&!''''&!%%!..3;;1c7)n%#*''&!''''&!%%!..e...///#++1c7)n%#*..1c7)n%//#,,.!//#++- ((* #rceZdZdZy)ObserverTest._BadObserverctd)Nrun bad thread exception) RuntimeError)rs rrunzObserverTest._BadObserver.run_s 0 11rN)rZr[r\rrr _BadObserverr^s2rrc<tj}d|_tj}gfdt_ |j |j |jjtjfdd|t_jdjtdjddtjtdddy#|t_wxYw) Ncy)Nrr)vs rz1ObserverTest.testObserverBadRun..esrc&j|Sr!)append)argsxs rrz1ObserverTest.testObserverBadRun..isQXXd^rc@txrjdS)NUnhandled exception)rF _is_logged)rrsrrz1ObserverTest.testObserverBadRun..nsCF,]tG\7]rr{rr rr)rrrsys__excepthook__rrorSrIr rrrCrFrrT)rr prev_exchookrs` @rtestObserverBadRunzObserverTest.testObserverBadRunbs!!###.##,!3#%99;88:88:??ENN$]_`ac$3)*3q611Q47L)3qtAw2N2=rr) __author__ __copyright__ __license__rprrcrer server.mytimer server.ticketrrserver.failmanagerrserver.observerr r server.utilsr utilsr dummyjailrdatabasetestcaserrrr`rrrrrsj.( 4   "1,7 % 7D%$D%N@ &@ D ?=%?=r