
$Sc           @   sV  d  Z  d Z d Z d d l 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
 m Z m Z d d l m Z m Z d d l m Z d d l m Z d	 e j f d
     YZ d e f d     YZ d e j f d     YZ d e f d     YZ d e f d     YZ d e j f d     YZ d e j f d     YZ d S(   s   Cyril Jaquiers    Copyright (c) 2004 Cyril Jaquiert   GPLiN(   t   Regext	   FailRegext   RegexException(   t   Servert   logSys(   t   Jail(   t   UnknownJailExceptiont	   StartStopc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s0   t    |  _ |  j j d  |  j j t  d S(   s   Call before every test case.i    N(   R   t   _StartStop__servert   setLogLevelt   startt   False(   t   self(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   setUp#   s    c         C   s   |  j  j   d S(   s   Call after every test case.N(   R	   t   quit(   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   tearDown)   s    c         C   sG   d } |  j  j |  |  j  j |  t j d  |  j  j |  d  S(   Nt   TestCasei   (   R	   t   addJailt	   startJailt   timet   sleept   stopJail(   R   t   name(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testStartStopJail-   s
    (   t   __name__t
   __module__R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   !   s   		t
   TestServerc           B   s   e  Z d    Z d   Z RS(   c         O   s   d  S(   N(    (   R   t   argst   kwargs(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR
   5   s    c         O   s   d  S(   N(    (   R   R   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   setLogTarget7   s    (   R   R   R
   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   4   s   	t   TransmitterBasec           B   sG   e  Z d    Z d   Z d d d  Z d d  Z d   Z d   Z RS(   c         C   s   |  j  j |  _ t j d d  \ } } t j |  t j d d  \ } } t j |  |  j  j | | d t d |  _	 |  j  j
 |  j	 d  d S(   s   Call before every test case.s   fail2ban.sockt   transmitters   fail2ban.pidt   forcet	   TestJail1t   autoN(   t   servert   _Server__transmt   transmt   tempfilet   mkstempt   ost   closeR   R   t   jailNameR   (   R   t   sock_fdt	   sock_namet
   pidfile_fdt   pidfile_name(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   <   s    	c         C   s   |  j  j   d S(   s   Call after every test case.N(   R$   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   H   s    c         C   s   d | | g } d | g } | d  k	 rJ | j d |  | j d |  n  | d  k r_ | } n  |  j |  j j |  d | f  |  j |  j j |  d | f  d  S(   Nt   sett   geti   i    (   t   Nonet   insertt   assertEqualR&   t   proceed(   R   t   cmdt   inValuet   outValuet   jailt   setCmdt   getCmd(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt
   setGetTestL   s    	"c         C   s   d | | g } d | g } | d  k	 rJ | j d |  | j d |  n  |  j j |  d } |  j |  j j |  d d  |  j |  j j |  d | f  d  S(   NR0   R1   i   i    (   R2   R3   R&   R5   R4   (   R   R6   R7   R9   R:   R;   t	   initValue(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   setGetTestNOKX   s     c         C   sO  d | } d | } |  j  |  j j d | | g  d g  f  x t |  D]u \ } } |  j  |  j j d | | | g  d | | d  f  |  j  |  j j d | | g  d | | d  f  qL Wx t |  D]u \ } } |  j  |  j j d | | | g  d | | d f  |  j  |  j j d | | g  d | | d f  q Wd  S(   Nt   addt   delR1   i    R0   i   (   R4   R&   R5   t	   enumerate(   R   R6   t   valuesR9   t   cmdAddt   cmdDelt   nt   value(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   jailAddDelTeste   s$    

%c   	      C   sd  d | } d | } | d  k r) | } n  |  j |  j j d | | g  d g  f  x t |  D]u \ } } |  j |  j j d | | | g  d | | d  f  |  j |  j j d | | g  d | | d  f  qa Wx t |  D]u \ } } |  j |  j j d | | d g  d | | d f  |  j |  j j d | | g  d | | d f  q Wd  S(   NR?   R@   R1   i    R0   i   (   R2   R4   R&   R5   RA   (	   R   R6   t   inValuest	   outValuesR9   RC   RD   RE   RF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   jailAddDelRegexTestz   s(    

	%N(	   R   R   R   R   R2   R<   R>   RG   RJ   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   :   s   			t   Transmitterc           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s#   t    |  _ t t |   j   d  S(   N(   R   R$   t   superRK   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR      s    c         C   s#   |  j  |  j j d g  d  d  S(   Nt   stopi    (   i    N(   R4   R&   R5   R2   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testStopServer   s    c         C   s#   |  j  |  j j d g  d  d  S(   Nt   pingi    t   pong(   i    RP   (   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testPing   s    c         C   sX   t  j    } |  j |  j j d d g  d  t  j    } |  j | | d d d d  S(   NR   t   1i    i   t   placesi   (   i    N(   R   R4   R&   R5   R2   t   assertAlmostEqual(   R   t   t0t   t1(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt	   testSleep   s    "c         C   s  d } d } d } |  j  |  j j d | d g  d | f  |  j  |  j j d | g  d | f  |  j  |  j j d | d g  d d  |  j  |  j j d | d	 g  d | f  |  j  |  j j d |  j d g  d d  |  j  |  j j d d
 d g  d d  d  S(   Nt	   TestJail2t	   TestJail3t	   TestJail4R?   t   pollingi    s   invalid backendi   R#   t   all(   R4   R&   R5   R+   (   R   t   jail2t   jail3t   jail4(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testAddJail   s    %(#%&c         C   sw   |  j  |  j j d |  j g  d  t j d  |  j  |  j j d |  j g  d  |  j t |  j	 j
 |  j  d  S(   NR   i    i   RM   (   i    N(   i    N(   R4   R&   R5   R+   R2   R   R   t   assertRaisesR   R$   t   isAlive(   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR      s    c         C   s   |  j  j d d  |  j |  j j d |  j g  d	  |  j |  j j d d g  d
  t j d  |  j |  j j d d g  d  t j d  |  j	 t
 |  j  j |  j  |  j	 t
 |  j  j d  d  S(   NRX   R#   R   i    g?RM   R\   i   (   i    N(   i    N(   i    N(   R$   R   R4   R&   R5   R+   R2   R   R   Ra   R   Rb   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testStartStopAllJail   s    "c         C   s   |  j  |  j j d |  j d d g  d t f  |  j  |  j j d |  j d d g  d t f  |  j  |  j j d |  j d d g  d d  d  S(   NR0   t   idlet   oni    t   offt   CATi   (   R4   R&   R5   R+   t   TrueR   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailIdle   s    "c         C   sq   |  j  d d d d |  j |  j  d d d d |  j |  j  d d d d |  j |  j d d	 d |  j d  S(
   Nt   findtimet   120ix   R9   t   60i<   s   -60it   Dog(   R<   R+   R>   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailFindTime   s    c         C   sq   |  j  d d d d |  j |  j  d d d d |  j |  j  d d d d |  j |  j d d	 d |  j d  S(
   Nt   bantimet   600iX  R9   t   50i2   s   -50it   Cat(   R<   R+   R>   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailBanTime   s    c         C   s   |  j  d d d |  j |  j  d d d |  j |  j  d d d |  j d } |  j |  j j d |  j d | g  d	  d  S(
   Nt   usednst   yesR9   t   warnt   not   FishR0   i    (   i    s   no(   R<   R+   R4   R&   R5   (   R   RF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailUseDNS   s    c         C   s   |  j  j |  j  |  j |  j j d |  j d d g  d	  t j d  |  j |  j j d |  j d d g  d
  t j d  |  j |  j j d |  j d d g  d  |  j |  j j d |  j d d g  d d  d  S(   NR0   t   banips	   127.0.0.1i    i   t   Badgert   unbanips   192.168.1.1(   i    s	   127.0.0.1(   i    R{   (   i    s	   127.0.0.1(   R$   R   R+   R4   R&   R5   R   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailBanIP   s     		c         C   sq   |  j  d d d d |  j |  j  d d d d |  j |  j  d d d d |  j |  j d d	 d |  j d  S(
   Nt   maxretryt   5i   R9   t   2i   s   -2it   Duck(   R<   R+   R>   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailMaxRetry  s    c         C   s   |  j  d d d d g |  j  d } |  j |  j j d |  j d | g  d | g f  |  j |  j j d |  j d | g  d | g f  |  j |  j j d	 |  j d g  d | g f  |  j |  j j d |  j d
 | g  d g  f  d  S(   Nt   logpaths   testcases/files/testcase01.logs   testcases/files/testcase02.logs   testcases/files/testcase03.logs   testcases/files/testcase04.logR0   t
   addlogpathi    R1   t
   dellogpath(   RG   R+   R4   R&   R5   (   R   RF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailLogPath  s&    
c         C   sE   d } |  j  j d |  j d | g  } |  j t | d t   d  S(   Ns   this_file_shouldn't_existR0   R   i   (   R&   R5   R+   t
   assertTruet
   isinstancet   IOError(   R   RF   t   result(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailLogPathInvalidFile(  s    	c         C   sx   t  j d d  } | d } t j | |  |  j j d |  j d | g  } |  j t | d t	   t j
 |  d  S(   Nt   prefixt   tmp_fail2ban_broken_symlinks   .slinkR0   R   i   (   R'   t   mktempR)   t   symlinkR&   R5   R+   R   R   R   t   unlink(   R   R   t   snameR   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailLogPathBrokenSymlink/  s    
	c         C   s   |  j  d d d d g |  j  d } |  j |  j j d |  j d | g  d | g f  |  j |  j j d |  j d | g  d | | g f  |  j |  j j d |  j d g  d | | g f  |  j |  j j d |  j d	 | g  d | g f  d  S(
   Nt   ignoreips	   127.0.0.1s   192.168.1.1s   8.8.8.8R0   t   addignoreipi    R1   t   delignoreip(   RG   R+   R4   R&   R5   (   R   RF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailIgnoreIP9  s&    
c         C   s   |  j  d d d |  j d  S(   Nt   ignorecommands   bin R9   (   R<   R+   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailIgnoreCommandU  s    c         C   s   |  j  d d d d g d d d g |  j  |  j |  j j d |  j d	 d
 g  d d  |  j |  j j d |  j d	 d g  d d  d  S(   Nt	   failregexs   user john at <HOST>s   Admin user login from <HOST>s    failed attempt from <HOST> agains1   user john at (?:::f{4,6}:)?(?P<host>[\w\-.^_]*\w)s:   Admin user login from (?:::f{4,6}:)?(?P<host>[\w\-.^_]*\w)s>   failed attempt from (?:::f{4,6}:)?(?P<host>[\w\-.^_]*\w) againR0   t   addfailregexs   No host regexi    i   i  (   RJ   R+   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailRegexX  s     	
		c         C   s   |  j  d d d d g d d d g |  j  |  j |  j j d |  j d d g  d	 d
  |  j |  j j d |  j d d g  d	 d
  d  S(   Nt   ignoreregexs	   user johns   Admin user login from <HOST>s   Dont match me!s:   Admin user login from (?:::f{4,6}:)?(?P<host>[\w\-.^_]*\w)R0   t   addignoreregexs   Invalid [regexi    i   i2   (   RJ   R+   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailIgnoreRegexp  s     	
		c         C   s   |  j  g } |  j |  j j d g  d d t |  f d d j |  f g f  |  j j d d  | j d  |  j |  j j d g  d d t |  f d d j |  f g f  d  S(   Nt   statusi    s   Number of jails	   Jail lists   , RX   R#   (	   R+   R4   R&   R5   t   lent   joinR$   R   t   append(   R   t   jails(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt
   testStatus  s    .c      	   C   s_   |  j  |  j j d |  j g  d d d d d g  f g f d d d d
 g  f g f g f  d  S(   NR   i    t   filters   Currently faileds   Total faileds	   File listt   actions   Currently banneds   Total banneds   IP list(   s   Currently failedi    (   s   Total failedi    (   s   Currently bannedi    (   s   Total bannedi    (   R4   R&   R5   R+   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testJailStatus  s    c         C   sT  d } d d d d d g } d d d	 d
 d g } |  j  |  j j d |  j d | g  d | f  |  j  |  j j d |  j d | g  d | f  xQ t | |  D]@ \ } } |  j  |  j j d |  j | | | g  d | f  q WxN t | |  D]= \ } } |  j  |  j j d |  j | | g  d | f  q W|  j  |  j j d |  j d | d d g  d  |  j  |  j j d |  j d | d g  d  |  j  |  j j d |  j d | d g  d d  |  j  |  j j d |  j d | d g  d  |  j  |  j j d |  j d | g  d  |  j  |  j j d |  j d d g  d d  d  S(   Nt   TestCaseActiont   actionstartt
   actionstopt   actioncheckt	   actionbant   actionunbans   Action Starts   Action Stops   Action Checks
   Action Bans   Action UnbanR0   t	   addactioni    R1   t   setcinfot   KEYt   VALUEt   cinfot
   InvalidKeyi   t   delcinfot	   delactions   Doesn't exist(   i    R   (   i    R   (   i    N(   i    N(   R4   R&   R5   R+   t   zipR2   (   R   R   t   cmdListt   cmdValueListR6   RF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt
   testAction  s`    								c         C   s*   |  j  |  j j d d g  d d  d  S(   Nt   INVALIDt   COMMANDi    i   (   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testNOK  s    c         C   s-   |  j  |  j j d d d g  d d  d  S(   NR0   R   R   i    i   (   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt
   testSetNOK  s    c         C   s-   |  j  |  j j d d d g  d d  d  S(   NR1   R   R   i    i   (   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt
   testGetNOK  s    c         C   s-   |  j  |  j j d d d g  d d  d  S(   NR   R   R   i    i   (   R4   R&   R5   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testStatusNOK  s    (   R   R   R   RN   RQ   RW   R`   R   Rc   Ri   Rn   Rs   Ry   R}   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyRK      s6   																	
								7			t   TransmitterLoggingc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   sC   t    |  _ |  j j d  |  j j d  t t |   j   d  S(   Ns	   /dev/nulli    (   R   R$   R   R
   RL   R   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR     s    c         C   s  g  } xH t  d  D]: } t j d d  } | j | d  t j | d  q Wx | D] } |  j d |  qX Wd } |  j d |  |  j j	 d d	 g  x | D] } t j
 |  q W|  j d d
  |  j d d  t j j   j d  r|  j d d  n  d  S(   Ni   t   fail2banR    i   i    t	   logtargets   /this/path/should/not/existR0   s	   /dev/nullt   STDOUTt   STDERRt   linuxt   SYSLOG(   t   xrangeR'   R(   R   R)   R*   R<   R>   R&   R5   t   removet   syst   platformt   lowert
   startswith(   R   t
   logTargetst   _t   tmpFilet	   logTargetRF   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testLogTarget  s     c         C   s   |  j  d d d  |  j  d d d  |  j  d d d  |  j  d d d	  |  j  d d
 d  |  j  d d d  |  j d d  d  S(   Nt   loglevelt   4i   t   3i   R   i   RR   i   s   -1it   0i    t   Bird(   R<   R>   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testLogLevel  s    c         C   s$  |  j  |  j j d g  d  zt j d  \ } } t j |  |  j j d  |  j  |  j j d d | g  d | f  t	 j
 d  z-t j d  \ } } t j |  t j | |  t	 j
 d	  |  j  |  j j d g  d  t	 j
 d
  t | d  } t rg|  j | j   j d   |  j | j   j d   |  j t | j  | j   n  t | d  } t r|  j | j   j d   |  j t | j  | j   n  Wd  t j |  XWd  t j |  X|  j  |  j j d d d g  d  |  j  |  j j d g  d  d  S(   Nt	   flushlogsi    s   rolled overs   fail2ban.logi   R0   R   s   Before file moveds   After file moveds   After flushlogst   rs   Before file moved
s   After file moved
s   After flushlogs
R   t   flushed(   i    s   rolled over(   i    s   rolled over(   i    s   STDERR(   i    R   (   R4   R&   R5   R'   R(   R)   R*   R$   R
   R   Rv   t   renamet   openRh   R   t   nextt   endswithRa   t   StopIterationR   (   R   t   ft   fnt   f2t   fn2(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testFlushLogs  s:    +%(   R   R   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR     s   				t	   JailTestsc           B   s   e  Z d    Z RS(   c         C   s,   d } t  |  } |  j | j   |  d  S(   Nt   veryveryverylongname(   R   R4   t   getName(   R   t   longnameR9   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testLongName6  s    (   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   4  s   t
   RegexTestsc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s=   |  j  t t d  |  j  t t d  |  j  t t d  d  S(   Nt    t    s   	(   Ra   R   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testInit>  s    c         C   sN   |  j  t t d   j d d  d  |  j t t d   j d   d  S(   Nt   at   "t   's
   Regex('a')s   <HOST>s
   FailRegex((   R4   t   strR   t   replaceR   R   R   (   R   (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testStrD  s    (c         C   si   |  j  t t d  t d  } |  j | j    | j d  |  j | j    |  j  t | j  d  S(   NR   s	   %%<HOST>?s   %%(   Ra   R   R   t   assertFalset
   hasMatchedt   searchR   t   getHost(   R   t   fr(    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   testHostJ  s    (   R   R   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyR   <  s   		(   t
   __author__t   __copyright__t   __license__t   unittestt   socketR   R'   R)   R   t   server.failregexR   R   R   t   server.serverR   R   t   server.jailR   t   common.exceptionsR   R   R   R   R   RK   R   R   R   (    (    (    s/   /usr/share/fail2ban/testcases/servertestcase.pyt   <module>   s   HX XK