ó
ì$Sc           @   sç   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 m	 Z	 d d l
 m Z d d l 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 f d „  ƒ  YZ d S(   s!   Cyril Jaquier, Yaroslav Halchenkos>   Copyright (c) 2004 Cyril Jaquier, 2011-2013 Yaroslav Halchenkot   GPLiÿÿÿÿN(   t   ConfigReader(   t
   JailReader(   t   JailsReader(   t   Configurator(   t   LogCaptureTestCaset   ConfigReaderTestc           B   sJ   e  Z d  „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z RS(   c         C   s.   t  j d d ƒ |  _ t d |  j ƒ |  _ d S(   s   Call before every test case.t   prefixs   f2b-tempt   basedirN(   t   tempfilet   mkdtempt   dR   t   c(   t   self(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   setUp"   s    c         C   s   t  j |  j ƒ d S(   s   Call after every test case.N(   t   shutilt   rmtreeR   (   R   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   tearDown'   s    c         C   sŒ   t  j j | k ra t  j j | ƒ } t  j j |  j | ƒ } t  j j | ƒ sa t  j | ƒ qa n  t d |  j | f d ƒ j	 d | ƒ d  S(   Ns   %s/%st   ws   
[section]
option = %s
(
   t   ost   patht   sept   dirnamet   joinR   t   existst   makedirst   opent   write(   R   t   fnamet   valueR   t   d_(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   _write+   s    c         C   s7   t  j d |  j | f ƒ |  j |  j j d ƒ ƒ d  S(   Ns   %s/%sR   (   R   t   unlinkR   t
   assertTrueR   t   read(   R   R   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   _remove7   s    R   c         C   s3   |  j  |  j j | ƒ ƒ |  j j d d g ƒ d S(   Nt   sectiont   intt   option(   s   intR&   (   R!   R   R"   t
   getOptions(   R   t   f(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt
   _getoption<   s    c         C   s†   t  j j |  j d ƒ } |  j d d ƒ |  j |  j d ƒ d ƒ t  j | d ƒ t  j | t  j	 ƒ s‚ |  j
 |  j j d ƒ ƒ n  d  S(   Ns   d.confi    R   (   R   R   R   R   R   t   assertEqualR)   t   chmodt   accesst   R_OKt   assertFalseR   R"   (   R   R(   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testInaccessibleFileA   s    c         C   só  |  j  |  j j d ƒ ƒ |  j d d ƒ |  j |  j ƒ  d ƒ |  j d d ƒ |  j |  j ƒ  d ƒ |  j d d ƒ |  j |  j ƒ  d	 ƒ |  j d
 d ƒ |  j |  j ƒ  d	 ƒ |  j d d ƒ |  j |  j ƒ  d ƒ |  j d ƒ |  j |  j ƒ  d	 ƒ |  j d ƒ |  j |  j ƒ  d ƒ |  j d
 ƒ |  j |  j ƒ  d ƒ |  j d d ƒ |  j |  j ƒ  d ƒ |  j d d ƒ |  j |  j ƒ  d ƒ |  j d ƒ |  j |  j ƒ  d ƒ |  j d d ƒ |  j d ƒ |  j d ƒ |  j |  j ƒ  d ƒ d  S(   NR   s   c.conft   1i   t   2i   s   c.d/98.conft   998iæ  s   c.d/90.conft   990s   c.d/99.conft   999iç  iÞ  s   c.localt   3i   s   c.d/5.localt   9i	   (   R.   R   R"   R   R*   R)   R#   (   R   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testOptionalDotDDirP   s6    (	   t   __name__t
   __module__R   R   R   R#   R)   R/   R7   (    (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyR       s   					t   JailReaderTestc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sŠ   t  d d t j j d d ƒ ƒ} |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j |  j d ƒ ƒ |  j |  j d ƒ ƒ d  S(   Nt   emptyactionR   t	   testcasest   configs"   No filter set for jail emptyactions'   No actions were defined for emptyaction(	   R   R   R   R   R!   R"   R'   t	   isEnabledt
   _is_logged(   R   t   jail(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testJailActionEmptyp   s    !c         C   sŠ   t  d d t j j d d ƒ ƒ} |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j |  j	 d ƒ ƒ |  j |  j	 d ƒ ƒ d  S(   Nt   missingbitsjailR   R<   R=   sX   Found no accessible config files for 'filter.d/catchallthebadies' under testcases/configs   Unable to read the filter(
   R   R   R   R   R!   R"   R.   R'   R>   R?   (   R   R@   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testJailActionFilterMissingx   s    !c         C   sŠ   t  d d t j j d d ƒ ƒ} |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j |  j	 d ƒ ƒ |  j |  j	 d ƒ ƒ d  S(   Nt   brokenactiondefR   R<   R=   s#   Error in action definition joho[foosX   Caught exception: While reading action joho[foo we should have got 1 or 2 groups. Got: 0(
   R   R   R   R   R!   R"   R.   R'   R>   R?   (   R   R@   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testJailActionBrokenDef€   s    !c         C   sˆ   t  d d d ƒ} |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  d ƒ | j d ƒ |  j | j ƒ  d ƒ d  S(   Ns   ssh-iptablesR   R=   s   ssh-funky-blocker(	   R   R!   R"   R'   R.   R>   R*   t   getNamet   setName(   R   R@   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testStockSSHJailˆ   s    c         C   s  d } d i d d 6g } t  j | ƒ } |  j | | ƒ |  j d i  g t  j d ƒ ƒ |  j d i d d 6d d	 6g t  j d
 ƒ ƒ |  j d i  g t  j d ƒ ƒ |  j d i  g t  j d ƒ ƒ |  j |  j d ƒ ƒ |  j d i d d 6g t  j d ƒ ƒ |  j t t  j d ƒ d  S(   Ns   mail-whois[name=SSH]s
   mail-whoist   SSHt   names   mail.who_ist   catt   at   dogt   bs   mail.who_is[a=cat,b=dog]s   mail--ho_iss   mail--ho_is['s']s   Invalid argument ['s'] in ''s''t   mailt   ,s   mail[a=',']s	   mail-how[(   R   t   splitActionR*   R!   R?   t   assertRaisest
   ValueError(   R   t   actiont   expectedt   result(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testSplitAction‘   s    -&c         C   s  t  j d d ƒ } t j j | d ƒ } t | d ƒ j ƒ  t j j | d ƒ } t j d | ƒ |  j t	 j
 t j j | d ƒ ƒ | g ƒ |  j t	 j
 | ƒ g  ƒ |  j |  j d | ƒ ƒ |  j t	 j
 t j j | d ƒ ƒ g  ƒ t j | ƒ t j | ƒ t j | ƒ d  S(	   NR   s   f2b-tempt   f1R   t   f2t   nonexistingt   *s4   File %s is a dangling link, thus cannot be monitored(   R	   R
   R   R   R   R   t   closet   symlinkR*   R   t   _globR!   R?   t   removet   rmdir(   R   R   RX   RY   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testGlob£   s    +((   R8   R9   RA   RC   RE   RH   RW   Ra   (    (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyR:   n   s   						t   JailsReaderTestc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s;   t  j j d ƒ s7 t d d ƒ } |  j t | j ƒ n  d  S(   Ns   /XXXR   (   R   R   R   R   RR   RS   R"   (   R   t   reader(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testProvidingBadBasedirº   s    c      ,   C   sø  t  d t j j d d ƒ ƒ } |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j t	 | j
 ƒ | j
 d t ƒ } d  |  _ |  j t | ƒ t d d d g d d d	 d
 g d d d d g d d d d g d d d d g d d d g d d d	 d
 g d d d d g d d d d g d d d d g d d d d g d d d g d d d	 d
 g d d d d g d d d d g d d d d g d d d d g d d d g d d d	 d
 g d d d d g d d d d g d d d d g d d d d g d d d d g d d d d d g d d d d d g d d d d d g d d d d d g d d d d d g d d d g d d d	 d
 g d d d d g d d d d g d d d d g d d d d g d d g d d g d d g d d g d d g g( ƒ ƒ |  j |  j d ƒ ƒ |  j |  j d  ƒ ƒ d  S(!   NR   R<   R=   t   allow_no_filest   addR;   t   autot   sett   usednst   warnt   maxretryi   t   findtimeiX  t   bantimet   specialt   addfailregexs   <IP>t   missinglogfilest   brokenactiont	   addactiont	   actionbans   hit with big stick <ip>t
   actionstopt    t   actionstartt   actionunbant   actionchecks   parse_to_end_of_jail.conft   starts-   Errors in jail 'missingbitsjail'. Skipping...s6   No file(s) found for glob /weapons/of/mass/destruction(   R   R   R   R   R!   R"   R.   R'   RR   RS   t   convertt   Truet   Nonet   maxDiffR*   t   sortedR?   (   R   t   jailst   comm_commands(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testReadTestJailConf¿   sj    					c         C   s§   t  d d ƒ } |  j | j ƒ  ƒ |  j | j ƒ  ƒ | j ƒ  } d  |  _ |  j | g  ƒ | } |  j | j d ƒ ƒ |  j |  j	 d ƒ ƒ |  j | j ƒ  | ƒ d  S(   NR   R=   t   BOGUSs   No section: 'BOGUS'(
   R   R!   R"   R'   Rz   R|   R}   R*   R.   R?   (   R   R   R€   t   old_comm_commands(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testReadStockJailConf÷   s    	c         C   sá   t  d d d t ƒ } |  j | j ƒ  ƒ |  j | j ƒ  ƒ t d „  t j t j j	 d d d ƒ ƒ Dƒ ƒ } t d „  | j
 ƒ  Dƒ ƒ } d  |  _ |  j | j | ƒ d | j | ƒ ƒ |  j | j | ƒ d	 | j | ƒ ƒ d  S(
   NR   R=   t   force_enablec         s   sD   |  ]: } | j  d  ƒ s t j j t j j | ƒ d ƒ d Vq d S(   s   common.confi   i    N(   t   endswithR   R   t   splitextt   split(   t   .0RL   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pys	   <genexpr>  s   s   filter.ds   *.confc         s   s   |  ] } | j  ƒ  d  Vq d S(   t   filterN(   t   getRawOptions(   R‰   R@   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pys	   <genexpr>  s    s=   More filters exists than are referenced in stock jail.conf %rs2   Stock jail.conf references non-existent filters %r(   R   R{   R!   R"   R'   Rh   t   globR   R   R   t   getJailsR|   R}   t   issubsett
   difference(   R   R   t   filterst   filters_jail(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testReadSockJailConfComplete  s    	(	c      	   C   sþ  t  d d d t ƒ } |  j | j ƒ  ƒ |  j | j ƒ  ƒ | j d t ƒ } |  j t | ƒ ƒ xh d d g D]Z } |  j d | d g | k ƒ |  j d	 | d
 d g | k ƒ |  j d | g | k ƒ qm W|  j | d d d ƒ x| j D]	} | j	 } | j
 ƒ  } |  j t | ƒ d d | ƒxÎ | D]Æ } | j ƒ  } | j ƒ  } d t | ƒ k r,|  j d | j k ƒ t }	 d	 | d | d g }
 x< | D]4 } t | ƒ d k r”| d  |
 k r”t }	 q”q”q”W|  j |	 d d |
 t | ƒ f ƒq,q,Wqí Wd  S(   NR   R=   R…   Re   s   ssh-iptablest   recidiveRf   Rg   Rh   Ri   Rj   Ry   iÿÿÿÿi    t   msgs   No actions found for jail %ss   <blocktype>t	   blocktypet   setcinfoi   s   Found no %s command among %s(   R   R{   R!   R"   R'   Rz   t   lenR*   t   _JailsReader__jailst   _JailReader__actionsRF   t   getFilet   strt   _ActionReader__cInfot   False(   R   R   R€   t   jt   actionst	   jail_nameRT   t   commandst   file_t   blocktype_presentt   target_commandt   command(    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt!   testReadStockJailConfForceEnabled  s>    	
c         C   sû   t  ƒ  } | j d ƒ |  j | j ƒ  d ƒ | j ƒ  | j ƒ  } |  j | d d ƒ |  j | d d ƒ | j ƒ  | j ƒ  | j ƒ  } |  j t	 | ƒ d d d g d d	 d
 g g ƒ | j
 j d ƒ |  j | j
 j ƒ  d ƒ |  j | j ƒ  d ƒ d  S(   NR=   t   sockets   /var/run/fail2ban/fail2ban.sockt   pidfiles   /var/run/fail2ban/fail2ban.pidRh   t   logleveli   t	   logtargets   /var/log/fail2ban.logs   /tmp(   R   t
   setBaseDirR*   t
   getBaseDirt	   readEarlyt   getEarlyOptionsR'   t   convertToProtocolt   getConfigStreamR~   t   _Configurator__jails(   R   t   configuratort   optsR¡   (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   testConfiguratorJ  s     	


(   R8   R9   Rd   R   R„   R’   R¦   R´   (    (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyRb   ¸   s   		8			3(   t
   __author__t   __copyright__t   __license__R   RŒ   R	   R   t   unittestt   client.configreaderR   t   client.jailreaderR   t   client.jailsreaderR   t   client.configuratorR   t   utilsR   t   TestCaseR   R:   Rb   (    (    (    s5   /usr/share/fail2ban/testcases/clientreadertestcase.pyt   <module>   s   <NJ