
    Bd4                     J   d Z dZdZddlZddlZddlZddlmZ  ej        d          Z	 ej        d          Z
d	ej        d
dej        d
dddddgZdZdZdZdZdZdZdZdee         dee         dee<   dee         dee         d
ee<   dee         dee         dee         dee<   ee         ee         ee         ee         ee         ee         ee         ee         ee         ee         ee         ee         dddZdddZ	  ej        d d!            ej        d"          d#fZn	#  d$ZY nxY wd% Zd&Zd'ZeefZ ej        d(d                    e          z   d)z             Z G d* d+          Z G d, d-e           Z!d.Z"e"d/z   Z# G d0 d1e          Z$dS )2zCyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL    N   )IPAddrz</?[\w\-]+/?>z^(/?)F-([A-Z0-9_\-]+)$z(?:::f{4,6}:)?(?P<ip4>)z(?P<ip6>z(?P<dns>[\w\-.^_]*\w) z(?P<cidr>\d+)               z\[?(?:|z)\]?z(?:z)(?:/z)?\]?z(?P<fid>\S+)z(?P<fport>\w+))IP4zF-IP4/IP6zF-IP6/ADDRzF-ADDR/CIDRzF-CIDR/SUBNETz	F-SUBNET/DNSzF-DNS/zF-ID/zF-PORT/fidfport)idportz^re(?i:val)$reVALz(?<!\\)\((?:\?:)?(\(\?[a-z]+)\)z\1: c                 `    |                                  } t                              | |           S N)lowerR_MAPget)tags    ;/usr/lib/python3/dist-packages/fail2ban/server/failregex.py
mapTag2Optr!   e   s#    
yy{{		#s    alt_tuple_z^(z)(.*?)(?:_\d+)?$c                       e Zd ZddZd Zedd            Zd Zed             Zdd	Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd ZdS )RegexFc                 P   d | _         t          j        |fi |}|                                dk    rt	          d          t
          r,t
          d                             t
          d         |          }	 t          j        ||rt          j	        nd          | _
        || _        g | _        g | _        d | j
        j        D             D ]}t                              |          }|r{|                    d          t%          |                    d                    }}|t&          k    r| j                            ||f           }| j                            ||f           | j                                         | j                                         t-          | j                  r| j        nd | _        t-          | j                  r| j        nd | _        n,# t.          j        $ r}t	          d|d|          d }~ww xY w| j        s| j        r| j        n| j        | _        d S )	Nr   zCannot add empty regexr   r   c                 h    g | ]/}t          |          t          t          d                    k    -|0S )r   )lenCOMPLNAME_PRE).0ks     r    
<listcomp>z"Regex.__init__.<locals>.<listcomp>   s6    TTT1SVVc-PQBR>S>S5S5SQ5S5S5Sr"   r   z&Unable to compile regular expression 'z':
)_matchCacher&   _resolveHostTaglstripRegexExceptionR_GLOB2LOCFLAGSsubrecompile	MULTILINE	_regexObj_regex
_altValues_tupleValues
groupindexCOMPLNAME_CREmatchgroupr!   ALTNAME_PREappendsortr)   sre_constantserror_getGroupsWithAlt
_getGroups	getGroups)selfregex	multilinekwargsr,   nges           r    __init__zRegex.__init__   s"   $ 

0
0
0
0%
\\^^r	0	1	11 =1!!/!"4e<<5Jui&FbllQGG4>4;4?4TT1TTT & &qAA &GGAJJ
1771::..Q	[
oaU####
!u%%%?(+DO(<(<FT__$4?,/0A,B,BLt((4		   	
%% 
 
  /3ohARh4))Y]Yh$...s   5E#G H(G==Hc                 0    | j         j        d| j        dS )N(r   )	__class____name__r8   rG   s    r    __str__zRegex.__str__   s    ^,,,dkkk	::r"   yesc                 p    t                      ddifd}t                              ||           S )Nnlr   c                    |                                  }|dd         }|dk    rt          dvrt          nt                   S |dk    rd         }|dz   d<   d|fz  S 	 t          |         S # t
          $ r Y nw xY wt                              |          } | rW|                                 } | d         }| d         r	                    |          rd	S |S d|<   t          |          }d
|dS |S )Nr   HOST)no	SKIPLINESrW   z!\n(?P<skiplines%i>(?:(?:.*\n)*?))r   r   z(?P<>)r>   R_HOSTRI_HOSTRI_ADDRRH4TAGKeyErrorFCUSTNAME_CREr=   groupsr   r!   )mr   tnrW   openTagspropsuseDnss       r    substTagz'Regex._resolveHostTag.<locals>.substTag   s#   	
3AbD	2FllV722''@@K	tBq&E$K/2%77	":
 	 	 	D	
 21 	

A	
1Bt R SZHRL	BBB :s    A- -
A:9A:)dictFTAG_CREr3   )rH   ri   rj   rg   rh   s    ` @@r    r/   zRegex._resolveHostTag   sV     VV(%$ $ $ $ $ $ $N 
h	&	&&r"   c                     | j         S r   )r8   rS   s    r    getRegexzRegex.getRegex   s
    	r"   c                 F    d                     d | D                       dz   S )N
c                 J    g | ] }d                      |ddd                   !S )r   Nr   join)r+   vs     r    r-   z(Regex._tupleLinesBuf.<locals>.<listcomp>   s,    888BGGAcccFOO888r"   rr   )
tupleLiness    r    _tupleLinesBufzRegex._tupleLinesBuf   s(    	88Z888	9	9D	@@r"   Nc                    |}t          |t                    st                              |          }| j                            |          | _        | j        r||}t          |          dk    r|| _        g | _	        d S 	 | j        j
                            dd| j                                        dz             dz   }n# t          $ r d}Y nw xY w	 | j        j
                            d| j                                        dz
            dz   }n)# t          $ r t          | j        j
                  }Y nw xY w| j        j
                            dd|          }| j        j
                            dd|          }|||         | _        |d |         | _	        d}|                                 D ]}	t%          | j        |d                    D ]c\  }
}d                    |d d d                   |	k    r<| j	                            | j                            ||
z                        ||
z  } nd| j	                            ||d                     d S d S )Nr   rp   r   r   r   )
isinstancestrr&   rv   r7   searchr.   r)   _matchedTupleLines_unmatchedTupleLinesstringrindexstart
ValueErrorindexendcountgetSkippedLines	enumeraters   r@   popextend)rG   ru   orgLinesbufmatchLineStartmatchLineEnd
lineCount1
lineCount2rK   skippedLinere   matchedTupleLines               r    rz   zRegex.search   s   #	J	$	$ *			j	)	)3^**3//$	 #<:	(mmq&D "D&-44
At%%''*- -/01^^   ^^^1$+11
D  ""Q&( (*+,\\ 1 1 1(/00\\\1 !(..	1n J!(..	1l J&z*'<=D (* 5D	A++--   )
abb!!# !#  		!##A#&	'	';	6	6 ''##AaC((* * *Avqu	 
7
 	$$Xjkk%:;;;;;G#< #<s$   >C   CC=D #D76D7c                     | j         rdS dS )NTF)r.   rS   s    r    
hasMatchedzRegex.hasMatched$  s    	 
$
%r"   c                 4    | j                                         S r   )r.   	groupdictrS   s    r    rE   zRegex._getGroups.  s    			#	#	%	%%r"   c                    | j                                         }| j        r>| j        D ]6\  }}|                    |          }|r|                    |          s|||<   7| j        r\| j        D ]T\  }}|                    |          }|                    |          }t          |t                    r||fz  }n||f}|||<   U|S r   )r.   r   r9   r   r:   rx   tuple)rG   failr,   rK   rt   ts         r    rD   zRegex._getGroupsWithAlt1  s    			#	#	%	%$ 
_ o  sqA ! T!W	   sqAA!U 1$YQQ
AQDGG	+r"   c                     d S r   r   rS   s    r    rF   zRegex.getGroupsF  s    $r"   c                 &   | j         sg S d}d}	 	 | j                             d|z             || j                             d|z            z  }|dz  }n*# t          $ r Y nt          $ r dt          j        vr Y nw xY wo|                    d          S )Nr   r   Tzskiplines%ir   PyPyF)r.   r>   
IndexErrorrb   sysversion
splitlines)rG   skippedLinesrK   s      r    r   zRegex.getSkippedLinesO  s    		 
9,!


ma/00<T%++MA,=>>>\FAA
 
 
 
	E
 
 
 
S[  
	E

 
	 	 	'	''s   AA 
A:A:9A:c                 <    |                                  sg S | j        S r   r   r|   rS   s    r    getUnmatchedTupleLineszRegex.getUnmatchedTupleLinesh  s"    			 $
9

##r"   c                 P    |                                  sg S d | j        D             S )Nc                 8    g | ]}d                      |          S r   rr   r+   lines     r    r-   z+Regex.getUnmatchedLines.<locals>.<listcomp>r  s"    
?
?
?T2774==
?
?
?r"   r   rS   s    r    getUnmatchedLineszRegex.getUnmatchedLinesn  s1    			 @
9
?
?T%>
?
?
??r"   c                 <    |                                  sg S | j        S r   r   r{   rS   s    r    getMatchedTupleLineszRegex.getMatchedTupleLines{  s"    			 "
9

!!r"   c                 P    |                                  sg S d | j        D             S )Nc                 8    g | ]}d                      |          S r   rr   r   s     r    r-   z)Regex.getMatchedLines.<locals>.<listcomp>  s"    
=
=
=T2774==
=
=
=r"   r   rS   s    r    getMatchedLineszRegex.getMatchedLines  s0    			 >
9
=
=T%<
=
=
==r"   )F)rU   r   )rR   
__module____qualname__rN   rT   staticmethodr/   rn   rv   rz   r   rE   rD   rF   r   r   r   r   r   r   r"   r    r&   r&   y   s)        i  i  i  iD; ; ; .' .' .' ,.'l   A A ,A(< (< (< (<\  & & &  *  ( ( (2$ $ $@ @ @" " "> > > > >r"   r&   c                       e Zd ZdS )r1   N)rR   r   r   r   r"   r    r1   r1     s        r"   r1   )r   ip4ip6dns)mlfidc                   ,    e Zd ZddZefdZd Zd ZdS )	FailRegexNc                      t          j         |fi |  fdt          D             s,fdt          D             st          d j        z            d S d S )Nc                 0    g | ]}|j         j        v |S r   r7   r;   )r+   grprG   s     r    r-   z&FailRegex.__init__.<locals>.<listcomp>  s(    
R
R
R38Q1Q1Q31Q1Q1Qr"   c                 0    g | ]}|j         j        v |S r   r   )r+   r   	prefRegexs     r    r-   z&FailRegex.__init__.<locals>.<listcomp>  s)    UUUsi6I6T/T/T/T/T/Tr"   zNo failure-id group in '%s')r&   rN   FAILURE_ID_PRESENTSr1   r8   )rG   rH   r   rJ   s   ` ` r    rN   zFailRegex.__init__  s    .u'''''
R
R
R
R-
R
R
R EUUUU+UUU 	 
5C	D	DD	E Er"   c                     d }|D ]9}	 | j                             |          }n# t          t          f$ r Y 1w xY w| n:|.| j         j        }| j         j        }t          d|d|d          t          |          S )NzNo group found in 'z	' using '')r.   r>   r   rb   r}   r4   r1   ry   )rG   rd   r   r   srs         r    	getFailIDzFailRegex.getFailID  s    # 
 
c


 
 
%
%CCx
    H	o	E [11	qqq!!!D	E	EE	S/s   #77c                 ,    |                      d          S )N)r   r   r   )r   rS   s    r    getHostzFailRegex.getHost  s    	-	.	..r"   c                     |                                  }t          |                     d          t          |                    d          pt          j                            S )N)r   r   cidr)rF   r   r   intr   CIDR_UNSPEC)rG   r   s     r    getIPzFailRegex.getIP  sI    			$	~..DHHV4D4D4ZHZ0[0[	\	\\r"   r   )rR   r   r   rN   FAILURE_ID_GROPSr   r   r   r   r"   r    r   r     sh        E E E E  -    ,/ / /] ] ] ] ]r"   r   )%
__author____copyright____license__r4   rB   r   ipdnsr   r5   rl   rc   IP_4_REIP_6_REr^   RI_IPV4RI_IPV6RI_DNSr`   r_   RI_CIDR	RI_SUBNETra   r   rz   r2   r!   r?   TUPNAME_PREr*   rs   r<   r&   	Exceptionr1   r   r   r   r   r"   r    <module>r      s  ( 
2 				     



       2:&''
455 '-nnn66(
  
		)/&///Kw#)'???F6NNNDw28///6'???TZ[bTcTcTcey  /7O
/7O '?7O'?7O9I
.6N"-
 
6 		 	
>7###RZ BCCVM   k*
5388M#:#::=PPQQL> L> L> L> L> L> L> L>d    Y    0  '3 4] 4] 4] 4] 4] 4] 4] 4] 4] 4]s   #D6 6D<