o _I@sdZdZdZddlZddlZddlZddlmZddlm Z dd l m Z dd l m Z mZmZmZejejed ZGd d d e ZdS)z Daniel BlackzCopyright (c) 2013 Daniel BlackGPLN) FailTicket)Utils) DummyJail)LogCaptureTestCase with_alt_time with_tmpdirMyTimefilescseZdZfddZfddZifddZddZd d Zd d Zd dZ ddZ ddZ ddZ e ddZddZddZe eddZZS)ExecuteActionscs$tt|t|_|jj|_dS)zCall before every test case.N)superr setUpr_ExecuteActions__jailactions_ExecuteActions__actionsself __class__@/usr/lib/python3/dist-packages/fail2ban/tests/actionstestcase.pyr)szExecuteActions.setUpcstt|dS)N)rr tearDownrrrrr/szExecuteActions.tearDowncCs|jd|jd}d|dd|_d|dd|_d|dd|_d |d d|_d |d d|_d |dd|_|S)Nipz echo ip startstartzecho ip ban banzecho ip unban unbanz echo ip checkcheckz echo ip flushflushz echo ip stopstop) raddget actionstart actionban actionunban actioncheck actionflush actionstop)roactrrr defaultAction2s  zExecuteActions.defaultActioncCs"|jd|t|jjddS)Ntest)rr" assertRaises ValueErrorrrrrtestActionsAddDuplicateName=s z*ExecuteActions.testActionsAddDuplicateNamecCs|jd||jd|d|j|d|j|jd|jd=|jd=|d|j|t|jd|jd||jd| t |jj ddS)Nr-znonexistant actiontest1rz 127.0.0.1) rr" assertTrueassertIn assertNotIn assertEquallen setBanTime getBanTimer.r/removeBannedIPrrrrtestActionsManipulationAs   z&ExecuteActions.testActionsManipulationcCsj||jdd|d|||jgdd|d|d|d|ddS) N 192.0.2.1r Ban 192.0.2.1)r<z 192.0.2.2z 192.0.2.3r192.0.2.1 already bannedz Ban 192.0.2.2z Ban 192.0.2.3)r6r addBannedIP assertLoggedpruneLogassertNotLoggedrrrrtestAddBannedIPPs    zExecuteActions.testAddBannedIPcCs||j|jdddd|j|j|dddd||jddd gfg||jd ddgdS) N stdout: %rip startTwaitzip fluship stop)zCurrently bannedr)z Total bannedrzBanned IP listshort)r,rrr@r!joinr6statusrrrrtestActionsOutputZs    z ExecuteActions.testActionsOutputc sjdtjtdddidjt fdddj jd  t jjd d ijd tjtddd d tjjdtjtddd dd tjjdtjtdidS)NActionzaction.d/action.pyopt1valuezTestAction initialisedc dS)NzTestAction action start _is_loggedrrrrn z4ExecuteActions.testAddActionPython..zTestAction action stopAction3z/does/not/exist.pyAction4value2)rNopt2Action5value3)rNrYopt3)rr"ospathrJTEST_FILES_DIRr@rr3rwait_forr!r.IOError TypeErrorrrrrtestAddActionPythonfs4          z"ExecuteActions.testAddActionPythonc stjjdtjtditjjdtjtdijdtjtdij t fdddj j ddS) NrMzaction.d/action_noAction.pyzaction.d/action_nomethod.pyzaction.d/action_errors.pycrP)NzFailed to startrQrrrrrSrTz7ExecuteActions.testAddPythonActionNOK..rUzFailed to stop)r. RuntimeErrorrr"r]r^rJr_rr3rr`r!r@rrrrtestAddPythonActionNOKs.        z%ExecuteActions.testAddPythonActionNOKcCs|jdtjtdi|jdtjtdi|jtd|j | d| d| d|j | d| d | d dS) Naction1zaction.d/action_modifyainfo.pyaction2z1.2.3.4Failed to execute banzaction1 ban deleted aInfo IPzaction2 ban deleted aInfo IPzFailed to execute unbanzaction1 unban deleted aInfo IPzaction2 unban deleted aInfo IP) rr"r]r^rJr_r putFailTicketr_Actions__checkBanrBr@_Actions__flushBanrrrrtestBanActionsAInfos&         z"ExecuteActions.testBanActionsAInfocCsd|j_d|j_|jd|jtdd}|dkr3d|}|jt |d|d7}|dks|j dd d td |d krXd|}|jt |d |d7}|d ksC|j d d d |j |j | d| ddS)NrUdrz 192.0.2.%drz / 20,TrF2z / 50,zUnbanned 30, 0 ticket(s)zUnbanned 50, 0 ticket(s))r banPrecedence unbanMaxCountr8rr setTimerrirr@r!rJrB)rirrrrtestUnbanOnBusyBanBombings.       z(ExecuteActions.testUnbanOnBusyBanBombingc Cs|ddd}|jd|d<d|_|j|dd||jdd ||jd d |jd d dddd ddddd| d|j d|d<|j d |jddd| d|j |jddddddddddddd | d|j |d<||jd d |jd ddddddd|jdddd| d|j |jddddddddd|jddddddd dd| d!|j|d<|j |j|jddddd"ddd|jd#ddd$dddS)%N )rr ; exit 1actionflush?family=inet6TrDrEr<r 2001:db8::1r=Ban 2001:db8::1ip ban 192.0.2.1ip ban 2001:db8::1allrG>[test-phase 1a] simulate inconsistent irreparable env by unbanactioncheck?family=inet6z,Invariant check failed. Unban is impossible.rFz>[test-phase 1b] simulate inconsistent irreparable env by fluship flush inet4ip flush inet6Failed to flush bans'No flush occurred, do consistency check[test-phase 1c] simulate inconsistent irreparable env by flushrrrrzFailed to flush bans in jailrrrrrrr)r,r(ractionrepair_on_unbanrrrBr6r?r@r'rAr:rkr!rJrrrr"testActionsConsistencyCheckDiffFam"s                 z1ExecuteActions.testActionsConsistencyCheckDiffFamc Cs|dddddd}|d|d<d |_d |_d |_|d ||jd dgd|jddddddddddd d|d| |d|d| d|| |d|d| dt t d|d||jgdd |jd!d"d#dd$dd%d d| |d| |d|j d&d'dddd(dddd)d*d+d d t t dt|dt|d|d,||jd dgd|jd-dd.dd/d0d1dd(dd)d d|d2||jd3d |jd4dd5d d|j d-dd.dd/d0d1dd(dd)d d|d6| |d|d7| d8|| |d|jd8d9d d| d7d:|_d;|_||jtd d<d<|jd=d>d ddS)?Nz ; touch ""z ; test -f ""z ; echo -n "" > ""z ; rm -f ""z) ; echo " " >> "")rrr r!rz /FNTz%echo ip repair ; touch ""zGecho ip reban ; echo " -- rebanned" >> ""z[test-phase 0] initial banr<rzrr=r{rDrzip ban 192.0.2.1 inet4rzip ban 2001:db8::1 inet6rz[test-phase 1] check banz/inet4z192.0.2.1 inet4z2001:db8::1 inet6z/inet6z#[test-phase 2] check already banned)r<rzrrr>z2001:db8::1 already bannedzBan 2001:db8::2rrzReban 192.0.2.1zReban 2001:db8::1zip reban 192.0.2.1 inet4zip reban 2001:db8::1 inet6z192.0.2.1 inet4 -- repairedz2001:db8::1 inet6 -- repairedz3[test-phase 3a] check reban after sane env repairedrzip repair inet4zip repair inet6zReban 192.0.2.1, action 'ip'zReban 2001:db8::1, action 'ip'z>[test-phase 3a] check reban by epoch mismatch (without repair)rzReban 2001:db8::2, action 'ip'zip reban 2001:db8::2 inet6z[test-phase 4] check rebanz192.0.2.1 inet4 -- rebannedz2001:db8::1 inet6 -- rebannedz2001:db8::2 inet6 -- rebannedrzexit 1rzFailed to execute rebanzError banning 192.0.2.1)r,r actionrepair actionrebanrAr6rr?r@dumpFilerBr rttimer]remover%_Actions__reBanr)rtmpr+rrr!testActionsRebanBrokenAfterRepairs                z0ExecuteActions.testActionsRebanBrokenAfterRepair)__name__ __module__ __qualname__rrr,r0r;rCrLrcrerlr rvrrr r __classcell__rrrrr 's$       %Kor ) __author__ __copyright__ __license__rr]tempfile server.ticketr server.utilsr dummyjailrutilsrr r r r^rJdirname__file__r_r rrrrs