
    Bd*                     v    d Z dZdZddlmZ ddlmZ ddlmZ dd	l	m
Z
mZ  e
e          Z G d
 d          ZdS )zCyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL    )Lock   )	BanTicket)MyTime   )	getLoggerloggingc                       e Zd Zd Zd Zd Zd Zd ZddZd Z	e
d	             ZddZd Zd Zd Zi fdZd Zd ZddZd Zd ZdS )
BanManagerc                     t                      | _        t                      | _        d| _        d| _        t          j        | _        d S )NiX  r   )	r   _BanManager__lockdict_BanManager__banList_BanManager__banTime_BanManager__banTotalr   MAX_TIME_nextUnbanTimeselfs    </usr/lib/python3/dist-packages/fail2ban/server/banmanager.py__init__zBanManager.__init__2   s7    $+66$.$.$/!*$    c                 .    t          |          | _        d S N)intr   r   values     r   
setBanTimezBanManager.setBanTimeD   s    JJ4>>>r   c                     | j         S r   )r   r   s    r   
getBanTimezBanManager.getBanTimeM   s
    
.r   c                     || _         d S r   r   r   s     r   setBanTotalzBanManager.setBanTotalU   s    4???r   c                     | j         S r   r#   r   s    r   getBanTotalzBanManager.getBanTotal]   s
    
/r   Fc                     |s&t           j                                                  S  j        5  g } j                                        D ]3}|                     j                  }|                    ||f           4	 d d d            n# 1 swxY w Y   |                    d            t          j
        |r fd|D             S d |D             S )Nc                     | d         S )Nr    )ts    r   <lambda>z'BanManager.getBanList.<locals>.<lambda>m   s
    1 r   )keyc           
          g | ]q}d |d                                           |d                                                   |d                             j                   |d                   fz  rS )z%s 	%s + %d = %sr   r   )getIDgetTimer!   r   ).0r*   r   t2ss     r   
<listcomp>z)BanManager.getBanList.<locals>.<listcomp>p   s         qTZZ\\S1!A$//$.9933qt99"    r   c                 B    g | ]}|d                                           S )r   )r.   )r0   r*   s     r   r2   z)BanManager.getBanList.<locals>.<listcomp>t   s$    	$	$	$1!A$**,,	$	$	$r   )listr   keysr   valuesgetEndOfBanTimer   appendsortr   time2str)r   orderedwithTimelstticketeobr1   s   `     @r   
getBanListzBanManager.getBanListe   sI   	 &
t~""$$
%
%%{  	3&&((  v

 
 
0
0CJJs|              
 ((~~(#          
%	$	$	$	$$s   ABBBc                 h    t          t          | j                                                            S r   )iterr4   r   r6   r   s    r   __iter__zBanManager.__iter__{   s&    
tDN))++,,
-
--r   c                 4    | t          |           dk    rdS | S )Nr   unknown)len)r   s    r   handleBlankResultzBanManager.handleBlankResult   s    
]c%jjAoo
)
<r   
   c                 
   g g g d}t          | d          s	 dd ladd lat          j                                        }||_        |dz  |_        || _        n# t          $ r}t                              d           t          |          |d<   |d                             d           |d                             d           |d	                             d           |cY d }~S d }~ww xY w| j        5  d
 t          | j                                                  D             }d d d            n# 1 swxY w Y   	 |D ]}|                    |j        rdnd          }	 | j        }|                    |d          }|st+          d          t-                      }	t-                      }
t-                      }|D ]}d |                                                    d          D             \  }}}}}|                     |          }|                     |          }|                     |          }|	                    |                     |                     |
                    |                     |                     |                    |                     |                     |d                             d                    t9          |	                               |d                             d                    t9          |
                               |d	                             d                    t9          |                                # t          j        j        $ rU |d                             d           |d                             d           |d	                             d           Y t          j        j        t          j        j         t          j        j!        f$ rm}t                              d||           t          j"        tF          j$        k    rt                              |           t          |          |d<   Y d }~ n}d }~wtJ          $ rm}t                              d||           t          j"        tF          j$        k    rt                              |           t          |          |d<   Y d }~ nd }~ww xY wnx# tJ          $ rk}t                              d|           t          j"        tF          j$        k    rt                              |           t          |          |d<   Y d }~nd }~ww xY w|S )N)asncountryrirdnsResolverr   r   z7dnspython package is required but could not be importederrorrJ   rK   rL   c                 6    g | ]}|                                 S r)   )getIP)r0   banDatas     r   r2   z:BanManager.getBanListExtendedCymruInfo.<locals>.<listcomp>   s     JJJW]]__JJJr   zorigin.asn.cymru.comzorigin6.asn.cymru.comTXTzNo data retrievedc                 8    g | ]}|                     d           S )z'" )strip)r0   answers     r   r2   z:BanManager.getBanListExtendedCymruInfo.<locals>.<listcomp>   s$    FFFVFFFr   |z, nxdomainz)DNSException %r querying Cymru for %s TXTz0Unhandled Exception %r querying Cymru for %s TXTz*Failure looking up extended Cymru info: %s)&hasattrdns.exceptiondnsdns.resolverresolverResolverlifetimetimeoutrM   ImportErrorlogSysrN   reprr8   r   r4   r   r6   getPTRisIPv4query
ValueErrorsetto_textsplitrG   addjoinsortedNXDOMAIN	exceptionDNSExceptionNoNameserversTimeoutlevelr
   DEBUG	Exception)r   r_   return_dictr\   ebanIPsipquestionanswersasns	countriesrirsrdatarJ   netrK   rL   changeddnses                      r   getBanListExtendedCymruInfoz&BanManager.getBanListExtendedCymruInfo   s   r"55+	}	%	% |$$&&HH{HD
   
LLJKKK77Kg&&&	!!'***g&&& { K KJJD1F1F1H1H,I,IJJJ6K K K K K K K K K K K K K K K/" ) )ryy!y "
! H# X~~h..W ,*+++EETYEET , ,FF5==??+@+@+E+EFFF &c3g""3''c&&w//g""3''c
hht%%c**+++mmD**733444
hht%%c**++++tyy66777""499VI->->#?#?@@@tyy667777<  + + +z***"":...z*****M&(BCMDYZ   \\=tXNNN%%t JJ[
UUUUU   \\DaRRR%%q GG[
UUUUU 
 " " "	<<<a@@@lgm##
Qq'';w	"
 
s   >A 
C*!A>C%C*%C*41D11D58D5=#S! !G<MS! A%SS! 4S;A"Q#S! #S0A"SS! SS! !
U+A!UUc                     	 d |d         D             S # t           $ r@}t                              d           t                              |           g cY d }~S d }~ww xY w)Nc                     g | ]}|S r)   r)   )r0   rJ   s     r   r2   z3BanManager.geBanListExtendedASN.<locals>.<listcomp>       
,
,
,33
,
,
,r   rJ   zFailed to lookup ASNrt   ra   rN   rn   r   
cymru_inforv   s      r   geBanListExtendedASNzBanManager.geBanListExtendedASN   u    
,
,*U+
,
,
,,	   	<<&'''	A
999999    
A5AAAc                     	 d |d         D             S # t           $ r@}t                              d           t                              |           g cY d }~S d }~ww xY w)Nc                     g | ]}|S r)   r)   )r0   rK   s     r   r2   z7BanManager.geBanListExtendedCountry.<locals>.<listcomp>   s    
8
8
8w7
8
8
8r   rK   zFailed to lookup Countryr   r   s      r   geBanListExtendedCountryz#BanManager.geBanListExtendedCountry   su    
8
8*Y"7
8
8
88	   	<<*+++	A
999999r   c                     	 d |d         D             S # t           $ r@}t                              d           t                              |           g cY d }~S d }~ww xY w)Nc                     g | ]}|S r)   r)   )r0   rL   s     r   r2   z3BanManager.geBanListExtendedRIR.<locals>.<listcomp>   r   r   rL   zFailed to lookup RIRr   r   s      r   geBanListExtendedRIRzBanManager.geBanListExtendedRIR   r   r   c                    |                     | j                  }|t          j                    k     rd|d<   dS | j        5  |                                }| j                            |          }|r||d<   ||                     | j                  k    rnd|d<   |                    | j                  }|dk    r4|	                                |	                                z
  }|dk    r||z  }|
                    |           	 d d d            dS || j        |<   | xj        dz  c_        |                                 | j        |k    r|| _        	 d d d            dS # 1 swxY w Y   d S )	Nr   expiredFr>   prolongr   T)r7   r   r   timer   r.   r   getr!   r/   r   r   incrBanCountr   )r   r>   reasonr?   fid	oldticketbtmdiftms           r   addBanTicketzBanManager.addBanTicket  s   t~..#6;==6)
%{  	3~!!#&&9  F8
Y&&t~6666VIT^,,Sr		nn!2!2!4!44e	
e|s##       &  4>#??a??	
CD
3                 s    CEAEE"%E"c                 *    t          | j                  S r   )rF   r   r   s    r   sizezBanManager.size1  s    	T^		r   c                 8    |                                 | j        v S r   )r.   r   )r   r>   s     r   
_inBanListzBanManager._inBanList<  s    	4>	))r   c                    | j         5  | j        }||k    rt                      cd d d            S i t          j        }| j                                        D ]O\  }}|                    | j                  }||k    r"||<   t                    |k    r	| j        } n
G||k    r|}P|| _        t                    rt                    dz  t          | j                  dz  k    r 
                                D ]
}| j        |= n7t          fd| j                                        D                       | _        t                                                    cd d d            S # 1 swxY w Y   d S )Ng       @g      @c              3   .   K   | ]\  }}|v	||fV  d S r   r)   )r0   r   r>   	unBanLists      r   	<genexpr>z'BanManager.unBanList.<locals>.<genexpr>d  sA        JC	I		  <				 r   )r   r   r4   r   r   r   itemsr7   r   rF   r5   r   r6   )r   r   maxCountnextUnbanTimer   r>   r?   r   s          @r   r   zBanManager.unBanListF  s   { !# !#&=d66	!# !# !# !# !# !# !# !# 9%=^))++ 	 	zs6

 
 
0
0CczzYs^I("")me 	# 
		]&4	)nn 
9~~s4>22S888    
.

     $.:N:N:P:P     T^ y!!
"
"C!# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !#s   E-D/E--E14E1c                     | j         5  t          | j                                                  }t	                      | _        |cd d d            S # 1 swxY w Y   d S r   )r   r4   r   r6   r   )r   uBLists     r   flushBanListzBanManager.flushBanListp  s    {  &&(())6FF4>
                 s   ;AAAc                     | j         5  	 | j                            |          cd d d            S # t          $ r Y nw xY w	 d d d            n# 1 swxY w Y   d S r   )r   r   popKeyError)r   r   s     r   getTicketByIDzBanManager.getTicketByIDz  s    { 	 		 >c""		 	 	 	 	 	 	 	
  	 	 	D		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
s'   A0
=A=AAAN)FF)rH   )r   )__name__
__module____qualname__r   r   r!   r$   r&   r@   rC   staticmethodrG   r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r   +   sN       
+ 
+ 
+$        % % % %,. . .   ,F F F F^       (*    J  * * *"# "# "# "#T      r   r   N)
__author____copyright____license__	threadingr   r>   r   mytimer   helpersr	   r
   r   ra   r   r)   r   r   <module>r      s   . 
2                   ( ( ( ( ( ( ( ( 
8		W W W W W W W W W Wr   