
    Bd!                         d Z dZdZddlmZ ddlmZ ddlmZ  ee	          Z
 G d d	e          Z G d
 de          Z G d de          ZdS )zCyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL   )	getLogger   )IPAddr)MyTimec                   b   e Zd ZdZdZdZdZdddi dfdZd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd$dZd%dZd&dZd Zd$dZd$dZd Zd Zd Zd Zed             Zej        d             Zed             Zej        d             Zd  Z d'd!Z!ed"             Z"e"j        d#             Z"dS )(Ticket)_id_flags	_banCount_banTime_time_data_retry
_lastResetl    r      Nc                 ,   |                      |           d| _        d| _        d| _        ||nt	          j                    | _        |pg dd| _        |&|                                D ]\  }}|
|| j        |<   |r| 	                    |           dS dS )z{Ticket constructor

		@param ip the IP address
		@param time the ban time
		@param matches (log) lines caused the ticket
		    N)matchesfailures)
setIDr   r   r   r   timer   r   itemsupdate)selfipr   r   dataticketkvs           8/usr/lib/python3/dist-packages/fail2ban/server/ticket.py__init__zTicket.__init__+   s     **R...$+$.$-'ttV[]]$*"=ba88$*	jjll  sq}TZ] ;;v     c                     d| j         j                            d          d         | j        | j        | j        | j        | j        d         | j                            dg           fz  S )Nz@%s: ip=%s time=%s bantime=%s bancount=%s #attempts=%d matches=%r.r   r   )		__class____name__splitr
   r   r   r   r   getr   s    r!   __str__zTicket.__str__B   s\    	K
n##C((,dh
	]DN	Z
TZ^^Ir::<
< <r#   c                      t          |           S N)strr+   s    r!   __repr__zTicket.__repr__H   s    	Tr#   c                     	 | j         |j         k    o;t          | j        d          t          |j        d          k    o| j        |j        k    S # t          $ r Y dS w xY w)Nr   F)r
   roundr   r   AttributeError)r   others     r!   __eq__zTicket.__eq__K   sr    
(ei
 	$*aE%+q111J%+ 
   
%%s   AA 
AAc                 b    |j         D ]&}t          ||d           }|t          | ||           'd S r.   )	__slots__getattrsetattr)r   r   nr    s       r!   r   zTicket.updateS   sG      avq$1mD!Q r#   c                 \    t          |t                    rt          |          }|| _        d S r.   )
isinstancer/   r   r
   r   values     r!   r   zTicket.setIDY   s*    s %==5$(((r#   c                     | j         S r.   )r
   r+   s    r!   getIDzTicket.getID_   s	    	/r#   c                 B    | j                             d| j                  S )Nr   )r   r*   r
   r+   s    r!   getIPzTicket.getIPb   s    	dh	'	''r#   c                     || _         d S r.   r   r=   s     r!   setTimezTicket.setTimee   s    $***r#   c                     | j         S r.   rD   r+   s    r!   getTimezTicket.getTimeh   s
    	r#   c                     || _         d S r.   r   r=   s     r!   
setBanTimezTicket.setBanTimek   s    $---r#   c                 "    | j         | j         n|S r.   rI   )r   	defaultBTs     r!   
getBanTimezTicket.getBanTimen   s    =4$--)Dr#   Fc                 2    |s|| j         k    r	|| _         d S d S r.   r   )r   r>   alwayss      r!   setBanCountzTicket.setBanCountq   s)     ut~%%4>>> &%r#   c                 &    | xj         |z  c_         d S r.   rO   r=   s     r!   incrBanCountzTicket.incrBanCountu   s    ..E....r#   c                     | j         S r.   rO   r+   s    r!   getBanCountzTicket.getBanCountx   s
    	r#   c                 Z    | j         | j         n|}|dk    rt          j        S | j        |z   S )Nr&   )r   r	   MAX_TIMEr   )r   rL   bantimes      r!   getEndOfBanTimezTicket.getEndOfBanTime{   s2    "m7T]]Y']]
/	g	r#   c                 N    | j         | j         n|}|dk    rdS || j        |z   k    S )Nr&   F)r   r   )r   r   rL   rX   s       r!   
isTimedOutzTicket.isTimedOut   s4    "m7T]]Y']]
%
g%
%&r#   c                     || j         d<   d S Nr   r   r=   s     r!   
setAttemptzTicket.setAttempt   s     $*Zr#   c                     | j         d         S r]   r^   r+   s    r!   
getAttemptzTicket.getAttempt   s    	J	r#   c                 V    |r|| j         d<   d S 	 | j         d= d S # t          $ r Y d S w xY w)Nr   )r   KeyError)r   r   s     r!   
setMatcheszTicket.setMatches   sS     	"4:i	
9
 	 	 	DD	s    
((c                 L    d | j                             dd          D             S )Nc                 t    g | ]5}t          |t          t          f          s|nd                     |          6S ) )r<   listtuplejoin).0lines     r!   
<listcomp>z%Ticket.getMatches.<locals>.<listcomp>   sI     
. 
. 
. "$u66I44BGGDMM 
. 
. 
.r#   r    )r   r*   r+   s    r!   
getMatcheszTicket.getMatches   s3    
. 
.z~~i,,
. 
. 
. .r#   c                 *    | j         t          j        z  S r.   r   r	   RESTOREDr+   s    r!   restoredzTicket.restored   s    	v	&&r#   c                 x    |r| xj         t          j        z  c_         d S | xj         t          j         z  c_         d S r.   rq   r=   s     r!   rs   zTicket.restored   s9    
 %;;&/!;;;;;;FO$$;;;;r#   c                 *    | j         t          j        z  S r.   r   r	   BANNEDr+   s    r!   bannedzTicket.banned   s    	v}	$$r#   c                 x    |r| xj         t          j        z  c_         d S | xj         t          j         z  c_         d S r.   rv   r=   s     r!   rx   zTicket.banned   s9    
 #;;&-;;;;;;FM"";;;;r#   c                 R   t          |          dk    r7t          d |d                                         D                       | _        n~t          |          dk    r| j                            |f           nOt          |          dk    r<| j                            d t          t          |          gdz   D                        t          |          r| j                            |           t          d | j                                        D                       | _        d S )Nr   c                      g | ]\  }}|||fS r.   rn   rk   r   r    s      r!   rm   z"Ticket.setData.<locals>.<listcomp>   s!    HHH!!-qe---r#   r   r   c              3   $   K   | ]\  }}||fV  d S r.   rn   r|   s      r!   	<genexpr>z!Ticket.setData.<locals>.<genexpr>   s*      ;;sqaU;;;;;;r#   c                      g | ]\  }}|||fS r.   rn   r|   s      r!   rm   z"Ticket.setData.<locals>.<listcomp>   s!    JJJsqAMaUMMMr#   )lendictr   r   r   zipiter)r   argsargvs      r!   setDatazTicket.setData   s   YY!^^ HHtAw}}HHHII4::
4yyA~~:dW
4yy1}}:;;cDJJ<>&:;;;;;;YY :T JJdj&6&6&8&8JJJKK$***r#   c           	         | j         S | j         s|S t          t          t          d           t          t
          t          t          f          st                    r2t          fd| j         
                                D                       S t          d          r2t          fd| j         
                                D                       S | j                             |          S )Nc                 4    g | ]\  }} |          ||fS rn   rn   rk   r   r    keys      r!   rm   z"Ticket.getData.<locals>.<listcomp>   s.    ???31QA?!A???r#   __iter__c                 &    g | ]\  }}|v 	||fS rn   rn   r   s      r!   rm   z"Ticket.getData.<locals>.<listcomp>   s&    AAA31QS!Ar#   )r   r<   r/   typeintfloatboolcomplexcallabler   r   hasattrr*   )r   r   defaults    ` r!   getDatazTicket.getData   s    [
*	 
>	CT$ZZE$w?	@	@ 
Csmm A ????$*"2"2"4"4???@@@c: C AAAA$*"2"2"4"4AAABBB	W	%	%%r#   c                 $    t          | dd          S )N	_banEpochr   )r8   r+   s    r!   banEpochzTicket.banEpoch   s    	{A	&	&&r#   c                     || _         d S r.   )r   r=   s     r!   r   zTicket.banEpoch   s    $...r#   r.   )F)r   )NN)#r(   
__module____qualname__r7   rW   rr   rw   r"   r,   r0   r5   r   r   r@   rB   rE   rG   rJ   rM   rQ   rS   rU   rY   r[   r_   ra   rd   ro   propertyrs   setterrx   r   r   r   rn   r#   r!   r	   r	   #   sX       a$2d    .< < <          ( ( (      E E E E           ' ' ' '! ! !     	 	 	. . . ' ' ('
/% % /% % % (%-# # -#L L L$& & & &* ' ' ('
/  /  r#   r	   c                   P    e Zd Zdddi dfdZd Zd Zd Zd	dZed             Z	dS )

FailTicketNc                    d | _         d| _        t                              | |||||           t	          |t
                    s?||n|                                 | _         | j                            dd          | _        d S d S )Nr   r   )	
_firstTimer   r	   r"   r<   r   rG   r   r*   )r   r   r   r   r   r   s         r!   r"   zFailTicket.__init__   s{    $/$+//$D'4888	FJ	'	' /!-TT4<<>>4?
A..4;;;/ /r#   c                 r    || _         | j        d         s
d| j        d<   |sd| j        d<   g | j        d<   dS dS )z Set artificial retry count, normally equal failures / attempt,
		used in incremental features (BanTimeIncr) to increase retry count for bad IPs
		r   r   r   r   Nr   r   r=   s     r!   setRetryzFailTicket.setRetry   sV     $+	J	 4:j	 4:j4:i r#   c                     | j         S )zV Returns failures / attempt count or
		artificial retry count increased for bad IPs
		)r   r+   s    r!   getRetryzFailTicket.getRetry   s     
r#   c           	          || j         k    rb| j        ||z
  k     rKt          t          | j        t          || j        z
            z  |z                      | _        ||z
  | _        || _         dS dS )z Adjust time of ticket and current attempts count considering given maxTime
		as estimation from rate by previous known interval (if it exceeds the findTime)
		N)r   r   r   r2   r   r   )r   r   maxTimes      r!   
adjustTimezFailTicket.adjustTime   sr     
DJ
ow&&eDK%t0F*G*GG'QRRSSDKWnDO4::: r#   r   c                     | xj         |z  c_         | j        dxx         |z  cc<   |r3| j        d         r| j        d         |z   | j        d<   d S || j        d<   d S d S )Nr   r   r   )r   r   attemptcounts       r!   inczFailTicket.inc  s    ++++*ZG# $
j $ Jy1G;DJy#DJy$ $r#   c                     t           | _        | S r.   )r   r'   os    r!   wrapzFailTicket.wrap  s    !+	
(r#   )Nr   r   )
r(   r   r   r"   r   r   r   r   staticmethodr   rn   r#   r!   r   r      s        $2d 	/ 	/ 	/ 	/	 	 	    $ $ $ $   ,  r#   r   c                   $    e Zd Zed             ZdS )	BanTicketc                     t           | _        | S r.   )r   r'   r   s    r!   r   zBanTicket.wrap"  s    !+	
(r#   N)r(   r   r   r   r   rn   r#   r!   r   r      s-          ,  r#   r   N)
__author____copyright____license__helpersr   ipdnsr   mytimer   r(   logSysobjectr	   r   r   rn   r#   r!   <module>r      s   . 
2                   
8		{ { { { {V { { {|8 8 8 8 8 8 8 8~    
     r#   