
    =*f!                         S r SrSrSSKJr  SSKJr  SSKJr  \" \	5      r
 " S S	\5      r " S
 S\5      r " S S\5      rg)zCyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL   )	getLogger   )IPAddr)MyTimec                   p   \ rS rSrSrSrSrSrSSS0 S4S jrS r	S	 r
S
 rS rS rS rS rS rS rS rS%S jrS&S jrS'S jrS rS%S jrS%S jrS rS rS rS r\S 5       r\R>                  S 5       r\S 5       r \ R>                  S 5       r S  r!S(S! jr"\S" 5       r#\#R>                  S# 5       r#S$r$g))Ticket#   )_id_flags	_banCount_banTime_time_data_retry
_lastResetl    r      Nc                 D   U R                  U5        SU l        SU l        SU l        Ub  UO[        R
                  " 5       U l        U=(       d    / SS.U l        Ub,  UR                  5        H  u  pgUc  M
  XpR                  U'   M     U(       a  U R                  U5        gg)zsTicket 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__Ticket.__init__+   s     **R.$+$.$-'tV[[]$*"=ba8$*	jjlsq}ZZ]  ;;v     c                    SU R                   R                  R                  S5      S   U R                  U R                  U R
                  U R                  U R                  S   U R                  R                  S/ 5      4-  $ )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__Ticket.__str__B   sg    	K
nn##C(,dhh

	]]DNN	ZZ
TZZ^^Ir:<
< <r%   c                     [        U 5      $ N)strr-   s    r"   __repr__Ticket.__repr__H   s    	Tr%   c                      U R                   UR                   :H  =(       aM    [        U R                  S5      [        UR                  S5      :H  =(       a    U R                  UR                  :H  $ ! [         a     gf = f)Nr   F)r   roundr   r   AttributeError)r   others     r"   __eq__Ticket.__eq__K   sh    
((eii
 	$**aE%++q11JJ%++ 
 
s   A,A/ /
A<;A<c                 d    UR                    H   n[        XS 5      nUc  M  [        XU5        M"     g r1   )	__slots__getattrsetattr)r   r   nr!   s       r"   r   Ticket.updateS   s-    av$1mDQ r%   c                 P    [        U[        5      (       a  [        U5      nXl        g r1   )
isinstancer2   r   r   r   values     r"   r   Ticket.setIDY   s    s%=5(r%   c                     U R                   $ r1   )r   r-   s    r"   getIDTicket.getID_   s    	/r%   c                 N    U R                   R                  SU R                  5      $ )Nr   )r   r,   r   r-   s    r"   getIPTicket.getIPb   s    	dhh	''r%   c                     Xl         g r1   r   rC   s     r"   setTimeTicket.setTimee   s    *r%   c                     U R                   $ r1   rM   r-   s    r"   getTimeTicket.getTimeh   s    	r%   c                     Xl         g r1   r   rC   s     r"   
setBanTimeTicket.setBanTimek   s    -r%   c                 8    U R                   b  U R                   $ U$ r1   rT   )r   	defaultBTs     r"   
getBanTimeTicket.getBanTimen   s    ==4$--D)Dr%   c                 >    U(       d  XR                   :  a  Xl         g g r1   r   )r   rD   alwayss      r"   setBanCountTicket.setBanCountq   s    u~~%> &r%   c                 .    U =R                   U-  sl         g r1   r\   rC   s     r"   incrBanCountTicket.incrBanCountu   s    ..E.r%   c                     U R                   $ r1   r\   r-   s    r"   getBanCountTicket.getBanCountx   s    	r%   c                     U R                   b  U R                   OUnUS:X  a  [        R                  $ U R                  U-   $ )Nr(   )r   r	   MAX_TIMEr   )r   rX   bantimes      r"   getEndOfBanTimeTicket.getEndOfBanTime{   s6    "mm7T]]Y']
//	g	r%   c                 h    U R                   b  U R                   OUnUS:X  a  gXR                  U-   :  $ )Nr(   F)r   r   )r   r   rX   rh   s       r"   
isTimedOutTicket.isTimedOut   s2    "mm7T]]Y']

g%
%&r%   c                      XR                   S'   g Nr   r   rC   s     r"   
setAttemptTicket.setAttempt   s     **Zr%   c                      U R                   S   $ ro   rp   r-   s    r"   
getAttemptTicket.getAttempt   s    	J	r%   c                 l    U(       a  XR                   S'   g  U R                   S	 g ! [         a     g f = f)Nr   )r   KeyError)r   r   s     r"   
setMatchesTicket.setMatches   s4    "::i	

9
 		s   & 
33c                     U R                   R                  SS5       Vs/ s H1  n[        U[        [        45      (       d  UOSR                  U5      PM3     sn$ s  snf )Nr     )r   r,   rB   listtuplejoin)r   lines     r"   
getMatchesTicket.getMatches   sS    zz~~i,
.,t "$u664BGGDMI,
. . 
.s   8Ac                 <    U R                   [        R                  -  $ r1   r   r	   RESTOREDr-   s    r"   restoredTicket.restored   s    	v	&&r%   c                     U(       a$  U =R                   [        R                  -  sl         g U =R                   [        R                  ) -  sl         g r1   r   rC   s     r"   r   r      s,    
;;&//!;;;FOO$$;r%   c                 <    U R                   [        R                  -  $ r1   r   r	   BANNEDr-   s    r"   bannedTicket.banned   s    	v}}	$$r%   c                     U(       a$  U =R                   [        R                  -  sl         g U =R                   [        R                  ) -  sl         g r1   r   rC   s     r"   r   r      s,    
;;&--;;;FMM"";r%   c                 p   [        U5      S:X  a=  [        US   R                  5        VVs/ s H  u  p4Uc  M
  X44PM     snn5      U l        Op[        U5      S:X  a  U R                  R	                  U45        OD[        U5      S:  a5  U R                  R	                  S [        [        U5      /S-  6  5       5        [        U5      (       a  U R                  R	                  U5        [        U R                  R                  5        VVs/ s H  u  p4Uc  M
  X44PM     snn5      U l        g s  snnf s  snnf )Nr   r   r   c              3   ,   #    U  H
  u  pX4v   M     g 7fr1   r{   ).0r    r!   s      r"   	<genexpr>!Ticket.setData.<locals>.<genexpr>   s     ;&:sqaU&:s   )lendictr   r   r   zipiter)r   argsargvr    r!   s        r"   setDataTicket.setData   s    Y!^ tAw}}H!eqeHI4:
4yA~::dW
4y1}::;cDJ<>&:;;YY::T djj&6&6&8J&8sqAUaU&8JK$* I Ks   	D,
D,

	D2
D2
c           	      N   Uc  U R                   $ U R                   (       d  U$ [        U[        [        S 5      [        [
        [        [        45      (       d  [        U5      (       aH  [        U R                   R                  5        VVs/ s H  u  p4U" U5      (       d  M  X44PM     snn5      $ [        US5      (       a@  [        U R                   R                  5        VVs/ s H  u  p4X1;   d  M  X44PM     snn5      $ U R                   R                  X5      $ s  snnf s  snnf )N__iter__)r   rB   r2   typeintfloatboolcomplexcallabler   r   hasattrr,   )r   keydefaultr    r!   s        r"   getDataTicket.getData   s    [
**	
>	CT$ZE$w?	@	@smm $**"2"2"4?"431A!"4?@@c: $**"2"2"4A"431!"4ABB		%% @
 Bs   	D
 D
"D!
1D!
c                     [        U SS5      $ )N	_banEpochr   )r=   r-   s    r"   banEpochTicket.banEpoch   s    	{A	&&r%   c                     Xl         g r1   )r   rC   s     r"   r   r      s    .r%   )r   r   r   r   r   r   r   r1   )F)r   )NN)%r*   
__module____qualname____firstlineno__r<   rg   r   r   r#   r.   r3   r9   r   r   rG   rJ   rN   rQ   rU   rY   r^   ra   rd   ri   rl   rq   rt   rx   r   propertyr   setterr   r   r   r   __static_attributes__r{   r%   r"   r	   r	   #   s   a$2d .<(E'! 	. ' '
//% % % %--# #L$&* ' '
// r%   r	   c                   T    \ rS rSrSSS0 S4S jrS rS rS rS
S jr\	S 5       r
S	rg)
FailTicket   Nc                     S U l         SU l        [        R                  XX#XE5        [	        U[
        5      (       d<  Ub  UOU R                  5       U l         U R                  R                  SS5      U l        g g )Nr   r   )	
_firstTimer   r	   r#   rB   r   rQ   r   r,   )r   r   r   r   r   r   s         r"   r#   FailTicket.__init__   s\    $/$+//$D48	FJ	'	'!-T4<<>4?
A.4; 
(r%   c                     Xl         U R                  S   (       d  SU R                  S'   U(       d  SU R                  S'   / U R                  S'   gg)zSet 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   rC   s     r"   setRetryFailTicket.setRetry   sG     +	J	4::j	4::j4::i 
r%   c                     U R                   $ )zQReturns failures / attempt count or
artificial retry count increased for bad IPs
)r   r-   s    r"   getRetryFailTicket.getRetry   s     
r%   c           	          XR                   :  a`  U R                  X-
  :  aG  [        [        U R                  [        XR                  -
  5      -  U-  5      5      U l        X-
  U l        Xl         gg)zAdjust 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   r6   r   r   )r   r   maxTimes      r"   
adjustTimeFailTicket.adjustTime   sZ     
JJ
oo&eDKK%0F*GG'QRSDKnDO: r%   c                     U =R                   U-  sl         U R                  S==   U-  ss'   U(       aC  U R                  S   (       a   U R                  S   U-   U R                  S'   g XR                  S'   g g )Nr   r   r   )r   r   attemptcounts       r"   incFailTicket.inc  s`    +++**ZG#
jj JJy1G;DJJy#JJy r%   c                     [         U l        U $ r1   )r   r)   os    r"   wrapFailTicket.wrap  s    !+	
(r%   )r   r   r   )Nr   r   )r*   r   r   r   r#   r   r   r   r   staticmethodr   r   r{   r%   r"   r   r      s:    $2d 	/	$  r%   r   c                   $    \ rS rSr\S 5       rSrg)	BanTicketi   c                     [         U l        U $ r1   )r   r)   r   s    r"   r   BanTicket.wrap"  s    !+	
(r%   r{   N)r*   r   r   r   r   r   r   r{   r%   r"   r   r      s     r%   r   N)
__author____copyright____license__helpersr   ipdnsr   mytimer   r*   logSysobjectr	   r   r   r{   r%   r"   <module>r      sS   . 
2    
8	{V {|8 8~
 r%   