
$Sc           @   s  d  Z  d Z d d l m Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z d d l m Z d d l m Z m Z m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z m Z d   Z d   Z d d  Z d d  Z d d d d d  Z d e j f d     YZ  d e f d     YZ! d e! f d     YZ" d e f d     YZ# d e j f d     YZ$ d e f d     YZ% d d  l& m' Z' d!   Z( d" e j f d#     YZ) d$ e j f d%     YZ* d& e j f d'     YZ+ d S((   s9   Copyright (c) 2004 Cyril Jaquier; 2012 Yaroslav Halchenkot   GPLi(   t   openN(   t   Jail(   t
   FilterPoll(   t   Filtert
   FileFiltert   DNSUtils(   t   FailManager(   t   FailManagerEmpty(   t	   DummyJail(   t
   mtimesleept   LogCaptureTestCasec          G   s)   t  |   d k r |  d }  n  t |    S(   s   Overload built in open so we could assure sufficiently large buffer

	Explicit .flush would be needed to assure that changes leave the buffer
	i   iP  (   iP  (   t   lent   fopen(   t   args(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR   1   s    c         C   sa   y |  j    Wn n Xy t j |  Wn n Xt j j | d  r] t d  | d  n  d  S(   Ns   .bak(   t   closet   ost   unlinkt   patht   existst	   _killfilet   None(   t   ft   name(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR   ;   s    c         C   s   |  j  | d | d  |  j  | d | p2 | d  t j | d  t j | d  } } |  j  | |  t |  d k r | d k r t j d k s t j j	 d  r d   } n t
 } |  j  | | d  | | d   n  d S(	   s   Little helper to unify comparisons with the target entries

	and report helpful failure reports instead of millions of seconds ;)
	i    i   i   i   s   
t   cygwinc         S   s   t  |   j d d  S(   Ns   \rt    (   t   reprt   replace(   t   x(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   <lambda>Y   s    N(   t   assertEqualt   timet	   localtimeR   R   R   t   linesept   syst   platformt
   startswithR   (   t   utestt   foundt   outputt   countt
   found_timet   output_timet   srepr(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   _assert_equal_entriesJ   s    !c   
      C   s   t  | t  r | j   } n | j j   } | j   } | j   } | j   } | j   } | | | | f }	 t	 |  |	 | |  d S(   sX   Additional helper to wrap most common test case

	Test filter to contain target ticket
	N(
   t
   isinstanceR	   t   getFailTickett   failManagert   toBant
   getAttemptt   getTimet   getIPt
   getMatchesR,   (
   R%   t   filter_R'   R(   t   tickett   attemptst   datet   ipt   matchesR&   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   _assert_correct_last_attempt^   s    i    t   aR   c   
      C   s  t    t |  t  r( t |  d  }  n  x  t |  D] } |  j   } q5 Wd } g  } x[ | d k sr | | k  r |  j   }	 | d k	 r |	 | k r Pn  | j |	  | d 7} qZ Wt | t  r t | |  } n  | j d j	 |   | j
   t j d  | S(   sW   Copy lines from one file to another (which might be already open)

	Returns open fout
	t   ri    i   s   
g?N(   R
   R-   t   strR   t   xranget   readlineR   t   appendt   writet   joint   flushR   t   sleep(
   t   fint   foutt   nt   skipt   modet   terminal_linet   it   _t   linest   l(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   _copy_lines_between_filesq   s&    
t   BasicFilterc           B   s   e  Z d    Z d   Z RS(   c         C   s   t  d  |  _ d  S(   NR   (   R   t   filter(   t   self(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   setUp   s    c         C   so   |  j  |  j j   d  |  j j t  |  j  |  j j   d  |  j j t  |  j  |  j j   d  d  S(   Nt   warnt   yest   no(   R   RR   t	   getUseDnst	   setUseDnst   Truet   False(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetSetUseDNS   s
    (   t   __name__t
   __module__RT   R\   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRQ      s   	t   IgnoreIPc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s/   t  j |   t   |  _ t |  j  |  _ d S(   s   Call before every test case.N(   R   RT   R	   t   jailR   RR   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT      s    c         C   sD   d } x7 | D]/ } |  j  j |  |  j |  j  j |   q Wd  S(   Ns	   127.0.0.1s   192.168.0.1s   255.255.255.255s   99.99.99.99(   s	   127.0.0.1s   192.168.0.1s   255.255.255.255s   99.99.99.99(   RR   t   addIgnoreIPt
   assertTruet   inIgnoreIPList(   RS   t   ipListR9   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPOK   s    c         C   sD   d } x7 | D]/ } |  j  j |  |  j |  j  j |   q Wd  S(   NR   s   999.999.999.999t   abcdefs
   192.168.0.(   R   s   999.999.999.999Rf   s
   192.168.0.(   RR   Ra   t   assertFalseRc   (   RS   Rd   R9   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPNOK   s    c         C   s   |  j  j d  |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   d  S(   Ns   192.168.1.0/25s   192.168.1.0s   192.168.1.1s   192.168.1.127s   192.168.1.128s   192.168.1.255s   192.168.0.255(   RR   Ra   Rb   Rc   Rg   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPCIDR   s    c         C   s   |  j  j d  |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   d  S(   Ns   192.168.1.0/255.255.255.128s   192.168.1.0s   192.168.1.1s   192.168.1.127s   192.168.1.128s   192.168.1.255s   192.168.0.255(   RR   Ra   Rb   Rc   Rg   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPMask   s    c         C   sJ   |  j  j d  |  j  j d  |  j  j d  |  j |  j d   d  S(   Ns   192.168.1.0/25s   <HOST>s%   Thu Jul 11 01:21:43 2013 192.168.1.32s   Ignore 192.168.1.32(   RR   Ra   t   addFailRegext   processLineAndAddRb   t
   _is_logged(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreInProcessLine   s    c         C   sP   |  j  j d  |  j  j d  |  j |  j d   |  j |  j d   d  S(   Ns   192.168.1.0/25s   192.168.1.32s   Ignore 192.168.1.32s\   Requested to manually ban an ignored IP 192.168.1.32. User knows best. Proceeding to ban it.(   RR   Ra   t   addBannedIPRg   Rm   Rb   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreAddBannedIP   s    c         C   sF   |  j  j d  |  j |  j  j d   |  j |  j  j d   d  S(   Ns%   testcases/files/ignorecommand.py <ip>s   10.0.0.1s   10.0.0.0(   RR   t   setIgnoreCommandRb   Rc   Rg   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreCommand   s    (
   R]   R^   RT   Re   Rh   Ri   Rj   Rn   Rp   Rr   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR_      s   									t   IgnoreIPDNSc           B   s   e  Z d    Z d   Z RS(   c         C   s-   |  j  j d  |  j |  j  j d   d  S(   Ns   www.epfl.chs   128.178.50.12(   RR   Ra   Rb   Rc   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPDNSOK   s    c         C   s_   |  j  j d  |  j |  j  j d   |  j |  j  j d   |  j |  j  j d   d  S(   Ns   www.epfl.chs   127.177.50.10s   128.178.50.11s   128.178.50.13(   RR   Ra   Rg   Rc   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIgnoreIPDNSNOK   s    (   R]   R^   Rt   Ru   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRs      s   	t   LogFilec           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   testcases/missingLogFilec         C   s   t  j |   d  S(   N(   R   RT   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT      s    c         C   s   t  j |   d  S(   N(   R   t   tearDown(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRw      s    c         C   s/   t  d   |  _ |  j t |  j j t j  d  S(   N(   R   R   RR   t   assertRaisest   IOErrort
   addLogPathRv   t   MISSING(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testMissingLogFiles   s    (   R]   R^   R{   RT   Rw   R|   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRv      s   		t   LogFileFilterPollc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   testcases/files/testcase01.logc         C   s&   t  d  |  _ |  j j t j  d S(   s   Call before every test case.N(   R   R   RR   Rz   R}   t   FILENAME(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT      s    c         C   s   d S(   s   Call after every test case.N(    (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRw      s    c         C   s<   |  j  |  j j t j   |  j |  j j t j   d  S(   N(   Rb   RR   t
   isModifiedR}   R~   Rg   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testIsModified  s    (   R]   R^   R~   RT   Rw   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR}      s   		t   LogFileMonitorc           B   st   e  Z d  Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z	 d	   Z
 d
   Z d   Z d   Z RS(   s#   Few more tests for FilterPoll API
	c         C   s   t  j |   d |  _ |  _ t j d d  \ } |  _ t |  j d  |  _ t d  |  _ |  j j
 |  j  |  j j t  |  j j d  d S(   s   Call before every test case.t   NAt   fail2bant   monitorfailuresR<   s   (?:(?:Authentication failure|Failed [-/\w+]+) for(?: [iI](?:llegal|nvalid) user)?|[Ii](?:llegal|nvalid) user|ROOT LOGIN REFUSED) .*(?: from|FROM) <HOST>N(   R   RT   RR   R   t   tempfilet   mkstempR   t   fileR   R   Rz   t	   setActiveRZ   Rk   (   RS   RM   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT     s    c         C   s$   t  j |   t |  j |  j  d  S(   N(   R   Rw   R   R   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRw     s    g       @c         C   sS   t  j    } x@ t  j    | | k  rN |  j j |  j  r> t St  j d  q Wt S(   s?   Wait up to `delay` sec to assure that it was modified or not
		g?(   R   RR   R   R   RZ   RE   R[   (   RS   t   delayt   time0(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR     s    c         C   s   |  j  d  S(   Ng?(   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   notModified'  s    c         C   sG   t  j |  j d  |  j j |  j  |  j |  j d |  j   d  S(   Ni    s   Unable to open %s(   R   t   chmodR   RR   t   getFailuresRb   Rm   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testNoLogFile+  s    c         C   sP   |  j  j d  |  j |  j d   |  j  j d  |  j |  j d   d  S(   Ni    s6   Cannot remove regular expression. Index 0 is not valid(   RR   t   delFailRegexRg   Rm   Rb   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testRemovingFailRegex0  s    c         C   s*   |  j  j d  |  j |  j d   d  S(   Ni    s6   Cannot remove regular expression. Index 0 is not valid(   RR   t   delIgnoreRegexRb   Rm   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testRemovingIgnoreRegex6  s    c         C   s}  |  j  |  j    |  j  |  j    |  j  |  j    t   xb t d  D]T } |  j j d |  |  j j   |  j  |  j    |  j  |  j    t   qM Wt j	 |  j
 |  j
 d  |  j  |  j    t |  j
 d  } |  j  |  j    |  j  |  j    t   | j d |  | j   |  j  |  j    |  j  |  j    t | |  j
  t |  j
 |  j
 d  d  S(   Ni   s   line%d
s   .oldR<   (   Rb   R   R   R
   t   rangeR   RB   RD   R   t   renameR   R   R   (   RS   RL   R   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testNewChangeViaIsModified:  s.    
c         C   s   |  j  j |  j  |  j t |  j  j j  t t j	 |  j
 d d |  j  j |  j  |  j t |  j  j j  t t j	 |  j
 d d |  j  j |  j  t |  |  j  t j  d  S(   NRH   i   RI   (   RR   R   R   Rx   R   R/   R0   RP   t   GetFailurest   FILENAME_01R   R;   t   FAILURES_01(   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt"   testNewChangeViaGetFailures_simpleX  s    c         C   s   |  j  j   t t j |  j  |  j j |  j  t |  |  j t j	  t t j |  j d d d d |  _  |  j j |  j  t |  |  j t j	  d  S(   NRI   i   RJ   t   w(
   R   R   RP   R   R   R   RR   R   R;   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt#   testNewChangeViaGetFailures_rewriteg  s    c         C   s   t  t j |  j d d d d |  _ |  j j |  j  |  j t |  j j	 j
  |  j |  j j	 j   d  t j |  j |  j d  t  t j |  j d d |  j j |  j  t |  |  j t j  |  j |  j j	 j   d  d  S(	   NRH   i   RJ   R   i   s   .bakRI   i   (   RP   R   R   R   R   RR   R   Rx   R   R/   R0   R   t   getFailTotalR   R   R;   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt    testNewChangeViaGetFailures_movey  s    (   R]   R^   t   __doc__RT   Rw   R   R   R   R   R   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR   
  s   		
							(   t   Lockc            s[   t  j d d   j f   d t j f     f d     Y d   j  f  _  S(   s8   Generator of TestCase's for different filters/backends
	R   s   monitorfailures_%st   MonitorFailuresc              s   e  Z d  Z     f d   Z d   Z d d  Z d   Z d d  Z d d  Z	 d	   Z
 d
   Z d   Z e d  Z d   Z d   Z d   Z d   Z RS(   i    c            s   d |  _  |  _ d  |  j f |  _  j d 7_ t |  j d  |  _ t   |  _   |  j  |  _  |  j  j |  j  |  j  j t	  |  j  j
 d  |  j  j   |  j   d S(   s   Call before every test case.R   s   %s-%di   R<   s   (?:(?:Authentication failure|Failed [-/\w+]+) for(?: [iI](?:llegal|nvalid) user)?|[Ii](?:llegal|nvalid) user|ROOT LOGIN REFUSED) .*(?: from|FROM) <HOST>N(   RR   R   R(   R   R   R	   R`   Rz   R   RZ   Rk   t   startt   _sleep_4_poll(   RS   (   t   Filter_R   t   testclass_name(    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT     s    c         S   s1   |  j  j   |  j  j   t |  j |  j  d  S(   N(   RR   t   stopRC   R   R   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRw     s    g       @c         S   sM   t  j    } x: t  j    | | k  rH t |  j  r8 t St  j d  q Wt S(   s@   Wait up to `delay` sec to assure that it was modified or not
			g?(   R   R   R`   RZ   RE   R[   (   RS   R   R   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   isFilled  s    c         S   s    t  |  j t  r t   n  d  S(   N(   R-   RR   R   R
   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR     s    g?c         S   s   |  j  |  S(   N(   R   (   RS   R   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   isEmpty  s    c         S   s3   |  j  |  j d   t |  |  j | d | d  S(   Ni   R(   (   Rb   R   R;   R`   (   RS   t   failuresR(   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   assert_correct_last_attempt  s    c         S   s  |  j  t |  j j j  t t j |  j d d |  j  t |  j j j  |  j	 t
 |  j   t t j |  j d d |  j |  j d   |  j t
 |  j  d  |  j  t |  j j j  |  j t j  |  j t
 |  j  d  t t j |  j d d |  j t j  d  S(   NRH   i   RI   i   i   i    id   (   Rx   R   RR   R/   R0   RP   R   R   R   Rg   R   R`   Rb   R   R   R   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_grow_file  s    c         S   sh   |  j  j   t t j |  j  |  j t j  t t j |  j d d d d |  _  |  j t j  d  S(   NRI   i   RJ   R   (   R   R   RP   R   R   R   R   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_rewrite_file  s    c         S   st  t  t j |  j d d d d |  _ |  j |  j d t t |  j	 t
   d  d d j g  |  j j D] } t |  ^ qf   |  j t |  j	 j j  |  j |  j	 j j   d  t j |  j |  j d	  t  t j |  j d
 d |  j t j  |  j |  j	 j j   d  t d  |  j d	  t  t j |  j d d |  j t j  |  j |  j	 j j   d  d  S(   NRH   i   RJ   R   i   i   s&   Queue must be empty but it is not: %s.s   , s   .bakRI   i   id   i   (   RP   R   R   R   R   Rb   R   t   intR-   RR   R   RC   R`   t   queueR>   Rx   R   R/   R0   R   R   R   R   R   R   R   R   (   RS   R   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_move_file  s    ,0c         S   s)  t  t j |  j d d j   |  j t j  |  j |  j j	 j
   d  | rq t d  |  j  t j d  n  t  t j |  j d d d j   t j |  j d |  j  |  j t j  |  j |  j j	 j
   d  t  t j |  j d d j   |  j t j  |  j |  j j	 j
   d  d  S(   NRH   id   i   g?s   .newi   i	   (   RP   R   R   R   R   R   R   R   RR   R/   R   R   R   R   RE   R   R   (   RS   t   interim_kill(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   _test_move_into_file  s     c         S   s   |  j  d t  d  S(   NR   (   R   R[   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_move_into_file,  s    c         S   s   |  j  d t  d  S(   NR   (   R   RZ   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt!   test_move_into_file_after_removed/  s    c         S   s   t  t j |  j d d |  j t j  t |  j d d  j d  t  t j |  j d d |  j t j  |  j |  j	 j
 j   d  t d  |  j d  d  S(   NRH   id   s   .bak2R   R   i   (   RP   R   R   R   R   R   R   RB   R   RR   R/   R   R   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_new_bogus_file5  s    c         S   s   t  t j |  j d d |  j t j  |  j j |  j  t  t j |  j d d |  j	 |  j
 d   |  j j |  j  |  j t j d d t  t j |  j d d |  j t j  d  S(   NRH   id   i   R(   i   (   RP   R   R   R   R   R   RR   t
   delLogPathR   Rb   R   Rz   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   test_delLogPathB  s    N(   R]   R^   R(   RT   Rw   R   R   R   R   R   R   R   R   R[   R   R   R   R   R   (    (   R   R   R   (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR     s   	
							s   MonitorFailures<%s>(%s)(   R   t   mktempR]   t   unittestt   TestCase(   R   (    (   R   R   R   s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   get_monitor_failures_testcase  s    %R   c           B   s   e  Z d  Z d Z d Z d Z d Z d d d d g d f Z d	   Z d
   Z	 d   Z
 d d d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s   testcases/files/testcase01.logs   testcases/files/testcase02.logs   testcases/files/testcase03.logs   testcases/files/testcase04.logs#   testcases/files/testcase-usedns.logs   193.168.0.128i   g  ſAsW   Aug 14 11:59:59 [sshd] error: PAM: Authentication failure for kevin from 193.168.0.128
c         C   s#   t  d  |  _ |  j j t  d S(   s   Call before every test case.N(   R   R   RR   R   RZ   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRT   n  s    c         C   s   d S(   s   Call after every test case.N(    (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyRw   v  s    c         C   s   |  j  j t j d t |  j |  j  j   d j   d  |  j  j   d j   |  j |  j  j   d j	   d  |  j  j
 t j  |  j |  j  j   g   d  S(   Nt   tailiiu  R   (   RR   Rz   R   R   RZ   R   t
   getLogPatht   getPosR   R@   R   (   RS   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testTaily  s    ##c         C   se   | p t  j } | p t  j } |  j j |  |  j j d  |  j j |  t |  |  j |  d  S(   Ns   (?:(?:Authentication failure|Failed [-/\w+]+) for(?: [iI](?:llegal|nvalid) user)?|[Ii](?:llegal|nvalid) user|ROOT LOGIN REFUSED) .*(?: from|FROM) <HOST>$(   R   R   R   RR   Rz   Rk   R   R;   (   RS   t   filenameR   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailures01  s    c      	   C   s   t  j d d d d  } t t j  t | d  } } x. | j   D]  } | j d | j d   qD W| j   | j   |  j	 d | d	 t j
 d
  g  t j
 d D] } | j d  d ^ q f  t | |  d  S(   Nt   prefixt   tmp_fail2bant   suffixt   crlfR   s   %s
s   
R   R   i   is   
(   R   R   R   R   R   t	   readlinesRB   t   rstripR   R   R   R   (   RS   t   fnameRF   RG   RO   R   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testCRLFFailures01  s    


/c         C   sv   d d d g  d
 D] } d | ^ q f } |  j  j t j  |  j  j d	  |  j  j t j  t |  |  j  |  d  S(   Ns   141.3.81.106i   g  xſAi5   i6   i9   i:   si   Aug 14 11:%d:59 i60p295 sshd[12365]: Failed publickey for roehl from ::ffff:141.3.81.106 port 51332 ssh2
s   Failed .* from <HOST>(   i5   i6   i9   i:   (   RR   Rz   R   t   FILENAME_02Rk   R   R;   (   RS   t   mR'   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailures02  s    	c         C   sS   d } |  j  j t j  |  j  j d  |  j  j t j  t |  |  j  |  d  S(   Ns   203.162.223.135i   g   zſAs%   error,relay=<HOST>,.*550 User unknown(   s   203.162.223.135i   g   zſA(   RR   Rz   R   t   FILENAME_03Rk   R   R;   (   RS   R'   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailures03  s
    c         C   s   d d g } |  j  j t j  |  j  j d  |  j  j t j  y4 x- t |  D] \ } } t |  |  j  |  qR WWn t k
 r n Xd  S(	   Ns   212.41.96.186i   g   ſAs   212.41.96.185g  ſAs   Invalid user .* <HOST>(   s   212.41.96.186i   g   ſA(   s   212.41.96.185i   g  ſA(	   RR   Rz   R   t   FILENAME_04Rk   R   t	   enumerateR;   R   (   RS   R'   RL   t   out(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailures04  s    	c         C   s   d d d d d g f } d d d d g f } x d | f d | f d	 | f f D]x \ } } t  d  d
 | } | j t  | j j d  | j t j  | j	 d  | j
 t j  t |  | |  qO Wd  S(   Ns   93.184.216.119i   g  xſAsa   Aug 14 11:54:59 i60p295 sshd[12365]: Failed publickey for roehl from example.com port 51332 ssh2
sk   Aug 14 11:58:59 i60p295 sshd[12365]: Failed publickey for roehl from ::ffff:93.184.216.119 port 51332 ssh2
i   RV   RW   RU   t   useDnss   Failed .* from <HOST>(   R   R   R   RZ   R/   t   setMaxRetryRz   R   t   FILENAME_USEDNSRk   R   R;   (   RS   t
   output_yest	   output_noR   R'   R5   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailuresUseDNS  s    			c         C   sc   d } |  j  j t j  |  j  j d  |  j  j d  |  j  j t j  t |  |  j  |  d  S(   Ns   141.3.81.106i   g  @yſAs   Failed .* from <HOST>s   Accepted .* from <HOST>(   s   141.3.81.106i   g  @yſA(   RR   Rz   R   R   Rk   R   R;   (   RS   R'   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailuresMultiRegex  s    c         C   sy   d } |  j  j t j  |  j  j d  |  j  j d  |  j  j d  |  j  j t j  |  j t |  j  j	 j
  d  S(   Ns   141.3.81.106i   g  @yſAs   Failed .* from <HOST>s   Accepted .* from <HOST>s	   for roehl(   s   141.3.81.106i   g  @yſA(   RR   Rz   R   R   Rk   t   addIgnoreRegexR   Rx   R   R/   R0   (   RS   R'   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testGetFailuresIgnoreRegex  s    N(   R]   R^   R   R   R   R   R   R   RT   Rw   R   R   R   R   R   R   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR   b  s$   							
					t   DNSUtilsTestsc           B   s   e  Z d    Z d   Z RS(   c         C   sp   t  j d d  } |  j | g   t  j d d  } |  j | d g  t  j d d  } |  j | d g  d  S(   Ns   www.example.comRW   RU   s   93.184.216.119RV   (   R   t   textToIpR   (   RS   t   res(    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt
   testUseDns  s    c         C   sh   d d d g } xR | D]J } t  j | d  } | d k rP |  j | d g  q |  j | g   q Wd  S(   Ns   www.example.coms!   doh1.2.3.4.buga.xxxxx.yyy.invalids   1.2.3.4.buga.xxxxx.yyy.invalidRV   s   93.184.216.119(   R   R   R   (   RS   t	   hostnamest   sR   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testTextToIp  s    	(   R]   R^   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR     s   	t	   JailTestsc           B   s   e  Z d    Z RS(   c         C   s   t  d d d } d  S(   Nt   testt   backendt   polling(   R   (   RS   R`   (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   testSetBackend_gh83  s    (   R]   R^   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyR     s   (,   t   __copyright__t   __license__t   __builtin__R   R   R   R   R"   R   R   t   server.jailR   t   server.filterpollR   t   server.filterR   R   R   t   server.failmanagerR   R   t	   dummyjailR	   t   utilsR
   R   R   R   R,   R;   RP   R   RQ   R_   Rs   Rv   R}   R   t	   threadingR   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/filtertestcase.pyt   <module>   s<   	
	#8	