o ×¼_˜Iã@sŠdZdZdZddlZddlZddlZddlmZddlm Z dd l m Z dd l m Z mZmZmZej ej e¡d ¡ZGd d „d e ƒZdS)z Daniel BlackzCopyright (c) 2013 Daniel BlackÚGPLéNé)Ú FailTicket)ÚUtilsé)Ú DummyJail)ÚLogCaptureTestCaseÚ with_alt_timeÚ with_tmpdirÚMyTimeÚfilescs˜eZdZ‡fdd„Z‡fdd„Zifdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z e dd„ƒZdd„Zdd„Ze edd„ƒƒZ‡ZS)ÚExecuteActionscs$tt|ƒ ¡tƒ|_|jj|_dS)zCall before every test case.N)Úsuperr ÚsetUprÚ_ExecuteActions__jailÚactionsÚ_ExecuteActions__actions©Úself©Ú __class__©ú@/usr/lib/python3/dist-packages/fail2ban/tests/actionstestcase.pyr)szExecuteActions.setUpcstt|ƒ ¡dS)N)rr ÚtearDownrrrrr/szExecuteActions.tearDowncCs†|j d¡|jd}d| dd¡|_d| dd¡|_d| dd¡|_d | d d¡|_d | d d¡|_d | dd¡|_|S)NÚipz echo ip startÚstartÚzecho ip ban Úbanzecho ip unban Úunbanz echo ip checkÚcheckz echo ip flushÚflushz echo ip stopÚstop) rÚaddÚgetÚ actionstartÚ actionbanÚ actionunbanÚ actioncheckÚ actionflushÚ actionstop)rÚoÚactrrrÚ defaultAction2s  zExecuteActions.defaultActioncCs"|j d¡| t|jjd¡dS)NÚtest)rr"Ú assertRaisesÚ ValueErrorrrrrÚtestActionsAddDuplicateName=s z*ExecuteActions.testActionsAddDuplicateNamecCs¨|j d¡| |jd¡| d|j¡| d|j¡|j d¡|jd=|jd=| d|j¡| t|jƒd¡|j d¡| |j ¡d¡|  t |jj d¡dS)Nr-znonexistant actionÚtest1réz 127.0.0.1) rr"Ú assertTrueÚassertInÚ assertNotInÚ assertEqualÚlenÚ setBanTimeÚ getBanTimer.r/ÚremoveBannedIPrrrrÚtestActionsManipulationAs   z&ExecuteActions.testActionsManipulationcCsj| |j d¡d¡| d¡| ¡| |j gd¢¡d¡| d¡| d¡| d¡| d¡dS) Nú 192.0.2.1rú Ban 192.0.2.1)r<z 192.0.2.2z 192.0.2.3rú192.0.2.1 already bannedz Ban 192.0.2.2z Ban 192.0.2.3)r6rÚ addBannedIPÚ assertLoggedÚpruneLogÚassertNotLoggedrrrrÚtestAddBannedIPPs    zExecuteActions.testAddBannedIPcCs„| ¡|j ¡|jdddd|j ¡|j ¡| dddd¡| |j ¡ddd gfg¡| |j d ¡ddg¡dS) Nú stdout: %rúip startT©Úwaitzip flushúip stop)zCurrently bannedr)z Total bannedrzBanned IP listÚshort)r,rrr@r!Újoinr6ÚstatusrrrrÚtestActionsOutputZs   ÿ ÿz ExecuteActions.testActionsOutputc sìˆj dtj td¡ddi¡ˆ d¡ˆj ¡ˆ t   ‡fdd„d¡¡ˆj  ¡ˆj ¡ˆ d ¡ˆ  t ˆjjd d i¡ˆj d tj td¡dd dœ¡ˆ  tˆjjdtj td¡dd ddœ¡ˆ  tˆjjdtj td¡i¡dS)NÚActionzaction.d/action.pyÚopt1ÚvaluezTestAction initialisedcó ˆ d¡S)NzTestAction action start©Ú _is_loggedrrrrÚnó z4ExecuteActions.testAddActionPython..ézTestAction action stopÚAction3z/does/not/exist.pyÚAction4Úvalue2)rNÚopt2ÚAction5Úvalue3)rNrYÚopt3)rr"ÚosÚpathrJÚTEST_FILES_DIRr@rr3rÚwait_forr!r.ÚIOErrorÚ TypeErrorrrrrÚtestAddActionPythonfs4þ      ÿþ   ý þz"ExecuteActions.testAddActionPythonc s ˆ tˆjjdtj td¡i¡ˆ tˆjjdtj td¡i¡ˆj dtj td¡i¡ˆj ¡ˆ  t   ‡fdd„d¡¡ˆj  ¡ˆj ¡ˆ  d¡dS) NrMzaction.d/action_noAction.pyzaction.d/action_nomethod.pyzaction.d/action_errors.pycrP)NzFailed to startrQrrrrrS“rTz7ExecuteActions.testAddPythonActionNOK..rUzFailed to stop)r.Ú RuntimeErrorrr"r]r^rJr_rr3rr`r!r@rrrrÚtestAddPythonActionNOK…s.  ÿý  ÿý ÿý   z%ExecuteActions.testAddPythonActionNOKcCs˜|j dtj td¡i¡|j dtj td¡i¡|j tdƒ¡|j  ¡|  d¡|  d¡|  d¡|j  ¡|  d¡|  d ¡|  d ¡dS) NÚaction1zaction.d/action_modifyainfo.pyÚaction2z1.2.3.4úFailed 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__flushBanrrrrÚtestBanActionsAInfo˜s& ý ý       z"ExecuteActions.testBanActionsAInfocCsêd|j_d|j_|j d¡|j ¡t d¡d}|dkr3d|}|j t |dƒ¡|d7}|dks|j dd d t d ¡|d krXd|}|j t |d ƒ¡|d7}|d ksC|j d d d |j  ¡|j  ¡|  d¡|  d¡dS)NrUéédréz 192.0.2.%drz / 20,TrFéÈé2z / 50,zUnbanned 30, 0 ticket(s)zUnbanned 50, 0 ticket(s))rÚ banPrecedenceÚ unbanMaxCountr8rr ÚsetTimerrirr@r!rJrB)rÚirrrrÚtestUnbanOnBusyBanBombing±s.   ý ý   z(ExecuteActions.testUnbanOnBusyBanBombingc Csü| dddœ¡}|jd|d<d|_|j ¡| dd¡| |j d¡d ¡| |j d ¡d ¡|jd d dddd ddddd|  d¡|j d|d<|j  d ¡|jddd|  d¡|j  ¡|jddddddddddddd |  d¡|j |d<| |j d ¡d ¡|jd ddddddd|jdddd|  d¡|j  ¡|jddddddddd|jddddddd dd|  d!¡|j|d<|j  ¡|j ¡|jddddd"ddd|jd#ddd$dddS)%Nú )rr ú; exit 1úactionflush?family=inet6TrDrEr<rú 2001:db8::1r=úBan 2001:db8::1úip ban 192.0.2.1úip ban 2001:db8::1©ÚallrGú>[test-phase 1a] simulate inconsistent irreparable env by unbanúactioncheck?family=inet6z,Invariant check failed. Unban is impossible.rFz>[test-phase 1b] simulate inconsistent irreparable env by flushúip flush inet4úip flush inet6úFailed to flush bansú'No flush occurred, do consistency checkú[test-phase 1c] simulate inconsistent irreparable env by flushr‚rƒr„r…zFailed to flush bans in jailr‡rˆrŠrrŽrr)r,r(r‘Úactionrepair_on_unbanrrrBr6r?r@r'rAr:rkr!rJr’rrrÚ"testActionsConsistencyCheckDiffFam"sØ û  þü úý   ø þ  ýý   üú   û ýz1ExecuteActions.testActionsConsistencyCheckDiffFamc CsÚ| ddddddœ¡}|d|d<d |_d |_d |_| d ¡| |j d dg¡d¡|jddddddddddd d| d¡|  |d¡| d¡|  d¡| ¡|  |d¡| d¡|  d¡t   t   ¡d¡| d¡| |j gd¢¡d ¡|jd!d"d#dd$dd%d d|  |d¡|  |d¡|j d&d'dddd(dddd)d*d+d d t   t   ¡d¡t |d¡t |d¡| d,¡| |j d dg¡d¡|jd-dd.dd/d0d1dd(dd)d d| d2¡| |j d3¡d ¡|jd4dd5d d|j d-dd.dd/d0d1dd(dd)d d| d6¡|  |d¡| d7¡|  d8¡| ¡|  |d¡|jd8d9d d|  d7¡d:|_d;|_| |j td 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{rDr”zip ban 192.0.2.1 inet4r•zip ban 2001:db8::1 inet6r‰z[test-phase 1] check banz/inet4z192.0.2.1 inet4z2001:db8::1 inet6z/inet6éz#[test-phase 2] check already banned)r<rzr–rr>z2001:db8::1 already bannedzBan 2001:db8::2rˆr‹zReban 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 repairedr†zip 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)r–zReban 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 rtÚtimer]Úremover%Ú_Actions__reBanr)rÚtmpr+rrrÚ!testActionsRebanBrokenAfterRepair‘sÀû  û      üù  ù ýù   þ  þz0ExecuteActions.testActionsRebanBrokenAfterRepair)Ú__name__Ú __module__Ú __qualname__rrr,r0r;rCrLrcrerlr rvr“r˜r r¢Ú __classcell__rrrrr 's$       %Kor )Ú __author__Ú __copyright__Ú __license__ržr]ÚtempfileÚ server.ticketrÚ server.utilsrÚ dummyjailrÚutilsrr r r r^rJÚdirnameÚ__file__r_r rrrrÚs