
    =*fJ                         S r SrSrSSKrSSKrSSKrSSKJr  SSKJ	r	  SS	K
Jr  SS
KJrJrJrJr  \R"                  R%                  \R"                  R'                  \5      S5      r " S S\5      rg)zDaniel BlackzCopyright (c) 2013 Daniel BlackGPL    N   )
FailTicket)Utils   )	DummyJail)LogCaptureTestCasewith_alt_timewith_tmpdirMyTimefilesc                      ^  \ rS rSrU 4S jrU 4S jr0 4S jrS rS rS r	S r
S	 rS
 rS r\S 5       rS rS r\\S 5       5       rSrU =r$ )ExecuteActions'   c                 ~   > [         [        U ]  5         [        5       U l        U R                  R
                  U l        g)zCall before every test case.N)superr   setUpr   _ExecuteActions__jailactions_ExecuteActions__actionsself	__class__s    @/usr/lib/python3/dist-packages/fail2ban/tests/actionstestcase.pyr   ExecuteActions.setUp)   s*    #%$+;;&&$.    c                 *   > [         [        U ]  5         g )N)r   r   tearDownr   s    r   r   ExecuteActions.tearDown/   s    &(r   c                    U R                   R                  S5        U R                   S   nSUR                  SS5      -   Ul        SUR                  SS5      -   Ul        SUR                  SS5      -   Ul        S	UR                  S
S5      -   Ul        SUR                  SS5      -   Ul        SUR                  SS5      -   Ul        U$ )Nipzecho ip startstart zecho ip ban <ip>banzecho ip unban <ip>unbanzecho ip checkcheckzecho ip flushflushzecho ip stopstop)	r   addgetactionstart	actionbanactionunbanactioncheckactionflush
actionstop)r   oacts      r   defaultActionExecuteActions.defaultAction2   s    ..Tt##AEE'2$66#/$QUU5"%55#-(w);;#/#AEE'2$66#/#AEE'2$66#/!!%%"33#.	*r   c                     U R                   R                  S5        U R                  [        U R                   R                  S5        g )Ntest)r   r)   assertRaises
ValueErrorr   s    r   testActionsAddDuplicateName*ExecuteActions.testActionsAddDuplicateName=   s0    ..VJ 2 2F;r   c                    U R                   R                  S5        U R                  U R                   S   5        U R                  SU R                   5        U R	                  SU R                   5        U R                   R                  S5        U R                   S	 U R                   S	 U R	                  SU R                   5        U R                  [        U R                   5      S5        U R                   R                  S5        U R                  U R                   R                  5       S5        U R                  [        U R                   R                  S5        g )Nr6   znonexistant actiontest1r      z	127.0.0.1)r   r)   
assertTrueassertInassertNotInassertEquallen
setBanTime
getBanTimer7   r8   removeBannedIPr9   s    r   testActionsManipulation&ExecuteActions.testActionsManipulationA   s    ..V//$..()--''8..W
nnV
nnW64>>*3t~~&*..C 4>>,,.s3J = ={Kr   c                 ~   U R                  U R                  R                  S5      S5        U R                  S5        U R	                  5         U R                  U R                  R                  / SQ5      S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )	N	192.0.2.1r   Ban 192.0.2.1)rJ   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)rB   r   addBannedIPassertLoggedpruneLogassertNotLoggedr9   s    r   testAddBannedIPExecuteActions.testAddBannedIPP   s    4>>--k:A>O$--/4>>--.UVXYZ./'O$O$r   c                    U R                  5         U R                  R                  5         U R                  SS-  SS9  U R                  R	                  5         U R                  R                  5         U R                  SS-  SS-  5        U R                  U R                  R                  5       SSS	/ 4/5        U R                  U R                  R                  S
5      SS/5        g )N
stdout: %rip startTwaitzip fluship stop)zCurrently bannedr   )zTotal bannedr   zBanned IP listshort)r3   r   r"   rN   r(   joinrB   statusr9   s    r   testActionsOutput ExecuteActions.testActionsOutputZ   s    ..L:-D9....L:-|i/GH4>>((*,D#&6%<,> ?4>>((13K#3% &r   c           
        ^  T R                   R                  S[        R                  R	                  [
        S5      SS05        T R                  S5        T R                   R                  5         T R                  [        R                  " U 4S jS5      5        T R                   R                  5         T R                   R	                  5         T R                  S5        T R                  [        T R                   R                  S	S
0 5        T R                   R                  S[        R                  R	                  [
        S5      SSS.5        T R                  [        T R                   R                  S[        R                  R	                  [
        S5      SSSS.5        T R                  [        T R                   R                  S[        R                  R	                  [
        S5      0 5        g )NActionzaction.d/action.pyopt1valuezTestAction initialisedc                  &   > T R                  S5      $ )NzTestAction action start
_is_loggedr9   s   r   <lambda>4ExecuteActions.testAddActionPython.<locals>.<lambda>n   s    $//:S*Tr      zTestAction action stopAction3z/does/not/exist.pyAction4value2)r`   opt2Action5value3)r`   rk   opt3)r   r)   ospathrZ   TEST_FILES_DIRrN   r"   r?   r   wait_forr(   r7   IOError	TypeErrorr9   s   `r   testAddActionPython"ExecuteActions.testAddActionPythonf   sd   ..RWW\\.*>?
G ,-..//5>>"TVWXZ....,-G>>y"6< ..bggll>+?@X&( dnn  )77<< 45Xx8:
 dnn  )77<< 45r;r   c           	        ^  T R                  [        T R                  R                  S[        R
                  R                  [        S5      0 5        T R                  [        T R                  R                  S[        R
                  R                  [        S5      0 5        T R                  R                  S[        R
                  R                  [        S5      0 5        T R                  R                  5         T R                  [        R                  " U 4S jS5      5        T R                  R                  5         T R                  R                  5         T R                  S5        g )Nr_   zaction.d/action_noAction.pyzaction.d/action_nomethod.pyzaction.d/action_errors.pyc                  &   > T R                  S5      $ )NzFailed to startrc   r9   s   r   re   7ExecuteActions.testAddPythonActionNOK.<locals>.<lambda>   s    $//:K*Lr   rg   zFailed to stop)r7   RuntimeErrorr   r)   ro   rp   rZ   rq   r"   r?   r   rr   r(   rN   r9   s   `r   testAddPythonActionNOK%ExecuteActions.testAddPythonActionNOK   s    L$.."4"4RWW\\.!# L$.."4"4RWW\\.!# ..RWW\\.! ..//5>>"LaPR....$%r   c                 |   U R                   R                  S[        R                  R	                  [
        S5      0 5        U R                   R                  S[        R                  R	                  [
        S5      0 5        U R                  R                  [        S5      5        U R                   R                  5         U R                  S5        U R                  S5        U R                  S5        U R                   R                  5         U R                  S5        U R                  S	5        U R                  S
5        g )Naction1zaction.d/action_modifyainfo.pyaction2z1.2.3.4Failed to execute banzaction1 ban deleted aInfo IPzaction2 ban deleted aInfo IPzFailed to execute unbanzaction1 unban deleted aInfo IPzaction2 unban deleted aInfo IP)r   r)   ro   rp   rZ   rq   r   putFailTicketr   _Actions__checkBanrP   rN   _Actions__flushBanr9   s    r   testBanActionsAInfo"ExecuteActions.testBanActionsAInfo   s    ..77<< @A ..77<< @A ++Jy12..##% ./2323..##% 014545r   c                    SU R                   l        SU R                   l        U R                   R                  S5        U R                   R	                  5         [
        R                  " S5        SnUS:  a7  SU-  nU R                  R                  [        US5      5        US-  nUS:  a  M7  U R                  SS	S
9  [
        R                  " S5        US:  a7  SU-  nU R                  R                  [        US5      5        US-  nUS:  a  M7  U R                  SS	S
9  U R                   R                  5         U R                   R                  5         U R                  S5        U R                  S5        g )Nrg      d   r      z
192.0.2.%dr   z / 20,TrV      2   z / 50,zUnbanned 30, 0 ticket(s)zUnbanned 50, 0 ticket(s))r   banPrecedenceunbanMaxCountrD   r"   r   setTimer   r   r   rN   r(   rZ   rP   )r   ir!   s      r   testUnbanOnBusyBanBombing(ExecuteActions.testUnbanOnBusyBanBombing   s;    "#$..!"$....C ....!	Bq2;;ZA./61 	
B H4(..	Bq2;;ZC0161 	
B H4(...../12r   c                    U R                  SSS.5      nUR                  S-   US'   SUl        SUR                  -   Ul        SUR                  -   Ul        U R
                  R                  5         U R                  SS-  5        U R                  U R
                  R                  S	5      S
5        U R                  U R
                  R                  S5      S
5        U R                  SSSS-  SS-  SS-  SSS9  U R                  S5        UR                  S-   US'   U R
                  R                  S5        U R                  SSS9  U R                  S5        U R
                  R                  5         U R                  SS-  SS-  SSSSS-  SSSS9	  U R                  S5        UR                  US'   U R                  U R
                  R                  S5      S
5        U R                  SSS-  SS-  SSS9  U R                  SS-  SS9  U R                  S5        U R
                  R                  5         U R                  SSSS-  SS -  SSS9  U R                  SS-  SS-  SS-  S!SS9  U R                  S"5        UR                  US'   U R
                  R                  5         U R
                  R!                  5         U R                  SS-  SS-  S#SSS9  U R                  S$SS-  S%SS9  g )&N	 <family>)r&   r'   ; exit 1actionflush?family=inet6T<actioncheck> ; rT   rU   rJ   r   2001:db8::1rK   Ban 2001:db8::1ip ban 192.0.2.1ip ban 2001:db8::1allrW   >[test-phase 1a] simulate inconsistent irreparable env by unbanactioncheck?family=inet6z,Invariant check failed. Unban is impossible.rV   z>[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<Invariant check failed. Trying to restore a sane environmentrX   [test-phase 2] consistent envip check inet4r   -[test-phase 3] failed flush in consistent envip check inet6Unable to restore environment![test-phase end] flush successfulaction ip terminatedERRORUnban tickets each individualy)r3   r/   actionstart_on_demandr,   r-   r   r"   rP   rB   rM   rN   rO   r.   rF   r   r(   rZ   r   r2   s     r   testActionsConsistencyCheck*ExecuteActions.testActionsConsistencyCheck   s0   KEF#$'OOj$@# !"#$s}}4#-&8#/..|j014>>--k:A>4>>--m<a@O%6*$$&&$	   --PQ$'OOj$@# !...B  --PQ..##%"""",A)$   --/0$'OO# !4>>--m<a@%*&&$   |&66   --?@..##%*,""""$	  
 "")*"   --34$'OO# !...."")$	   w""#  r   c                    U R                  SSSSS.5      nUR                  S-   US'   SUl        SUl        SUR                  -   Ul        SUR
                  -   Ul        U R                  R                  5         U R                  SS-  5        U R                  U R                  R                  S	5      S
5        U R                  U R                  R                  S5      S
5        U R                  SSSS-  SS-  SS-  SS-  SSS9  UR                  S-   US'   U R                  S5        U R                  R                  S5        U R                  SSS-  SSS9  U R                  SS-  SS-  SS-  SS9  U R                  S5        U R                  U R                  R                  S5      S
5        U R                  SSS-  SS-  SS-  SSSSS9  U R                  SS-  SS-  SS9  UR                  US'   U R                  U R                  R                  S5      S
5        UR                  S-   US'   U R                  S5        U R                  R                  5         U R                  SS-  SS -  S!S"SSS-  S#SSS9	  U R                  SS-  SS9  U R                  S$5        UR                  US'   U R                  U R                  R                  S5      S
5        U R                  SSS-  SS-  SSS9  U R                  SS%-  SS-  SS9  U R                  S&5        UR                  US'   U R                  R                  5         U R                  S!S"SS -  SS-  SSS9  U R                  SS-  SS-  SS-  SS-  SS-  SS9  U R                  S'5        UR                  US'   U R                  R!                  5         U R                  R#                  5         U R                  SS -  SS-  SS-  S(SSS9  U R                  S)SS-  S*SS9  g )+Nr   )r"   r&   r'   r(   r   r   Tr   rT   rU   rJ   r   r   rK   r   ip start inet4r   ip start inet6r   r   r   r   r   zip stop inet6zip stop inet4r   z<[test-phase 1b] simulate inconsistent irreparable env by banr   r   r   2001:db8::2z>[test-phase 1c] simulate inconsistent irreparable env by flushr   r   r   r   zFailed to flush bans in jailr   r   r   r   r   r   r   )r3   r/   r   actionrepair_on_unbanr,   r-   r   r"   rP   rB   rM   rN   r.   rO   rF   r   r(   rZ   r   s     r   "testActionsConsistencyCheckDiffFam1ExecuteActions.testActionsConsistencyCheckDiffFam%  s   Kkbmno#$'OOj$@# !"#"#$s}}4#-&8#/..|j014>>--k:A>4>>--m<a@O%6""$$""&&$   %(OOj$@# !--PQ...R/!$   ""/!""	   --NO4>>--m<a@R/!"""""$   /!""  
 %(OO# !4>>--m<a@$'OOj$@# !--PQ..##%"""",A/!!$   /!  
 --/0$'OO# !4>>--m<a@%""&&$   """"  
 --?@$'OO# !..##%*,""""$	  
 ""/!""/!""   --34$'OO# !....""/!/!$   w""#  r   c                    U R                  SSSSSS.5      nUS-   US'   S	Ul        S
Ul        SUl        U R	                  S5        U R                  U R                  R                  SS/5      S5        U R                  SSSS-  SS-  SS-  SS-  S	S9  U R	                  S5        U R                  US-   5        U R                  S5        U R                  S5        U R	                  5         U R                  US-   5        U R                  S5        U R                  S5        [        R                  " [        R                  " 5       S-   5        U R	                  S5        U R                  U R                  R                  / SQ5      S 5        U R                  S!S"S#SS$-  SS%-  S	S9  U R                  US-   5        U R                  US-   5        U R                  S&S'SS-  SS(-  SS-  SS)-  S*S+S	S9	  [        R                  " [        R                  " 5       S-   5        [        R                  " US-   5        [        R                  " US-   5        U R	                  S,5        U R                  U R                  R                  SS/5      S5        U R                  S-SS.-  SS/-  S0S1SS(-  SS)-  S	S9  U R	                  S25        U R                  U R                  R                  S35      S 5        U R                  S4SS5-  S	S9  U R                  S-SS.-  SS/-  S0S1SS(-  SS)-  S	S9  U R	                  S65        U R                  US-   5        U R                  S75        U R                  S85        U R	                  5         U R                  US-   5        U R                  S8S9S	S9  U R                  S75        S:Ul        S;Ul        U R                  U R                  R#                  [%        SS<5      5      S<5        U R                  S=S>S	S9  g )?Nz <family>; touch "<FN>"z <family>; test -f "<FN>"z <family>; echo -n "" > "<FN>"z <family>; rm -f "<FN>"z) <family>; echo "<ip> <family>" >> "<FN>")r"   r&   r'   r(   r$   z	/<family>FNTz%echo ip repair <family>; touch "<FN>"zGecho ip reban <ip> <family>; echo "<ip> <family> -- rebanned" >> "<FN>"z[test-phase 0] initial banrJ   r   r   rK   r   rT   r   zip ban 192.0.2.1 inet4r   zip ban 2001:db8::1 inet6r   z[test-phase 1] check banz/inet4z192.0.2.1 inet4z2001:db8::1 inet6z/inet6   z#[test-phase 2] check already banned)rJ   r   r   r   rL   z2001:db8::1 already bannedzBan 2001:db8::2r   r   zReban 192.0.2.1zReban 2001:db8::1zip reban 192.0.2.1 inet4zip reban 2001:db8::1 inet6z192.0.2.1 inet4 -- repairedz2001:db8::1 inet6 -- repairedz3[test-phase 3a] check reban after sane env repairedr   zip repair inet4zip repair inet6zReban 192.0.2.1, action 'ip'zReban 2001:db8::1, action 'ip'z>[test-phase 3a] check reban by epoch mismatch (without repair)r   zReban 2001:db8::2, action 'ip'zip reban 2001:db8::2 inet6z[test-phase 4] check rebanz192.0.2.1 inet4 -- rebannedz2001:db8::1 inet6 -- rebannedz2001:db8::2 inet6 -- rebannedr#   zexit 1r   zFailed to execute rebanzError banning 192.0.2.1)r3   r   actionrepairactionrebanrO   rB   r   rM   rN   dumpFilerP   r   r   timero   remover,   _Actions__reBanr   )r   tmpr2   s      r   !testActionsRebanBrokenAfterRepair0ExecuteActions.testActionsRebanBrokenAfterRepair  s'    	$&+$6 	# +o#d)"#<#]#/--,-4>>--{M.JKQOO%6""**"",,   --*+--H%&*+--/--H'(() 	.."#--564>>--.YZ\]^;=N""""	  
 --H--H(*=**,,,,.. "   	.."#))CL))CL--EF4>>--{M.JKQOA####!#C,,..   --PQ4>>--m<a@#..   A####!#C,,..   --,---H1267--/--H""  . 45 #/#-4>>11*[!2LMqQ$  (r   )	__actions__jail)__name__
__module____qualname____firstlineno__r   r   r3   r:   rG   rQ   r\   ru   r{   r   r
   r   r   r   r   r   __static_attributes____classcell__)r   s   @r   r   r   '   s|    ')  	<L%
&;>&&62 #3 #3JL\pd g(  g(r   r   )
__author____copyright____license__r   ro   tempfileserver.ticketr   server.utilsr   	dummyjailr   utilsr	   r
   r   r   rp   rZ   dirname__file__rq   r    r   r   <module>r      s^   . 
1  	  &     I Ibggooh7AY(' Y(r   