HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ns3133907 6.8.0-86-generic #87-Ubuntu SMP PREEMPT_DYNAMIC Mon Sep 22 18:03:36 UTC 2025 x86_64
User: cssnetorguk (1024)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/fail2ban/client/__pycache__/fail2banregex.cpython-312.pyc
�

�ogf�p���dZdZdZdZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
ZddlZddlmZmZddlmZmZmZ	dd	lmZdd
lmZmZddlmZdd
lmZmZm Z ddl!m"Z"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*e(d�Z+d"d�Z,d�Z-d#d�Z.d$d�Z/d�Z0d�Z1d�Z2Gd�de�Z3d�Z4Gd�de5�Z6Gd�de5�Z7Gd�d e5�Z8d!�Z9y#e$rdZY��wxYw)%z�
Fail2Ban  reads log file that contains password failure report
and bans the corresponding IP addresses using firewall rules.

This tools can test regular expressions for "fail2ban".
zFail2Ban DevelopersaICopyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

Written by Cyril Jaquier <cyril.jaquier@fail2ban.org>.
Many contributions by Yaroslav O. Halchenko, Steven Hiscocks, Sergey G. Brester (sebres).�GPL�N)�OptionParser�Option)�
NoOptionError�NoSectionError�MissingSectionHeaderError�)�
FilterSystemd)�version�normVersion�)�FilterReader)�Filter�
FileContainer�MyTime)�Regex�RegexException)�str2LogLevel�getVerbosityFormat�FormatterWithTraceBack�	getLogger�extractOptions�
PREFER_ENC�fail2banc��tj||��|dd�}|rd|d<dtjj	|�zS)N)�useDns�python)�re�str�flavor�m�flagszhttps://www.debuggex.com/?)r�_resolveHostTag�urllib�parse�	urlencode)�sample�regex�	multiliner�argss     �?/usr/lib/python3/dist-packages/fail2ban/client/fail2banregex.py�debuggexURLr,?sF��
���e�F�3�	��	��
�s�t�G�}�$�v�|�|�'=�'=�d�'C�C�C�c��t|�y�N)�print�r*s r+�outputr2Hs	���t�r-c�8�t|�|kDr|d|dz
dzS|S)zReturn shortened string
	N��...)�len)�s�ls  r+�shortstrr9Ks(����F�Q�J�	
�4�A�a�C��5���	�r-c�v�t|�sy|rd|z}nd}t|dzdj|�zdz�y)Nz|- %s
�z|  z
|  z
`-)r6r2�join)r8�headerr7s   r+�pprint_listr>Rs<���A���
��&��!��!���U��W�\�\�!�_�	$�v�	-�/r-c#�zK�		|j�}|sy|j|����(#t$rY�4wxYw�wr/)�get_next�OSError�formatJournalEntry)�flt�	myjournal�entrys   r+�journal_lines_genrF[sM����������5�
�����u�%�%���
����s�;�,�;�	8�;�8�;c�T�tt��tjd�y�Nr)r2r�sys�exitr1s r+�dumpNormVersionrKes����
�����!�r-c�.�dtjdzS)Nz(%s [OPTIONS] <LOG> <REGEX> [IGNOREREGEX]r)rI�argv�r-r+�<lambda>rOis��:�S�X�X�a�[�H�r-c��eZdZd�Zy)�
_f2bOptParserc��d|_dt�zdztzdztj|g|��i|��zdztzdzS)z, Overwritten format helper with full ussage.r;zUsage: �
a�
LOG:
  string                a string representing a log line
  filename              path to a log file (/var/log/auth.log)
  systemd-journal       search systemd journal (systemd-python required),
                        optionally with backend parameters, see `man jail.conf`
                        for usage and examples (systemd-journal[journalflags=1]).

REGEX:
  string                a string representing a 'failregex'
  filter                name of filter, optionally with options (sshd[mode=aggressive])
  filename              path to a filter file (filter.d/sshd.conf)

IGNOREREGEX:
  string                a string representing an 'ignoreregex'
  filename              path to a filter file (filter.d/sshd.conf)

z>

Report bugs to https://github.com/fail2ban/fail2ban/issues

)�usage�__doc__r�format_help�
__copyright__)�selfr*�kwargss   r+rVz_f2bOptParser.format_helplsi���$�*�	�U�W�	�t�	#�g�	-�1�
� 	� � ��7��7��7�!
8� ;�!
�$�%
�$�%
�r-N)�__name__�
__module__�__qualname__rVrNr-r+rQrQks��r-rQc��tt�dtz��}|jt	dddd��t	dd	d
��t	dd
ddd��t	ddt
d��t	ddddd��t	dddd��t	ddtdd��t	d d!d"��t	d#d$d%d&d'�(�t	d)d*td+�,�t	d-d.d/d0dd1�2�t	d3dd0td4�5�t	d6d7dd8�9�t	d:d;dd<�9�t	d=d>d?d@dA�2�t	dBdCddDddE�2�t	dFddG�9�t	dHddI�9�t	dJddK�9�t	dLddM�9�t	dNddO�9�t	dPdQddR�9�t	dSddT�9�g�|S)UNz%prog )rTrz-cz--configz
/etc/fail2banzset alternate config directory)�default�helpz-dz
--datepatternz+set custom pattern used to match date/times)r_z
--timezonez--TZ�storez)set time-zone used by convert time format)�actionr^r_z-ez
--encodingz%File encoding. Default: system localez-rz--raw�
store_trueFzRaw hosts, don't resolve dnsz--usednszpDNS specified replacement of tags <HOST> in regexp ('yes' - matches all form of hosts, 'no' - IP addresses only)z-Lz
--maxlinesrzmaxlines for multi-line regex.)�typer^r_z-mz--journalmatchzGjournalctl style matches overriding filter file. "systemd-journal" onlyz-lz--log-level�	log_level�criticalz(Log level for the Fail2Ban logger to use)�destr^r_z-V�callbackz,get version in machine-readable short format)rargr_z-vz	--verbose�count�verbosezIncrease verbosity)rarfr^r_z--verbosityz'Set numerical level of verbosity (0..4))rarfrcr_z--verbose-datez--VDz%Verbose date patterns/regex in output)rar_z-Dz
--debuggexz-Produce debuggex.com urls for debugging therez--no-check-all�store_false�
checkAllRegexTzDisable check for all regex'sz-oz--out�outzaSet token to print failure information only (row, id, ip, msg, host, ip4, ip6, dns, matches, ...)z--print-no-missedzDo not print any missed linesz--print-no-ignoredzDo not print any ignored linesz--print-all-matchedzPrint all matched linesz--print-all-missedz*Print all missed lines, no matter how manyz--print-all-ignoredz+Print all ignored lines, no matter how manyz-tz--log-tracebackz.Enrich log-messages with compressed tracebacksz--full-tracebackzBEither to make the tracebacks full, not compressed (as by default))rQrTr�add_optionsrr�intrK)�ps r+�get_opt_parserrp�s����
�'��w�� �������z�?�+�-����8�:���v�g�t�6�8���|�Z�2�4���w�|�U�)�+���G�T�K�L�	��|�#�q�+�-����!�"�	��}���5�7�	��j�?�9�;���{�7����!�	��w�Y�S�4�6��	�6�,�2�4���|�L�:�<��	�-�o�t�*�,���w�w�U�D�n�p��	�\�*�,��	�l�+�-��	�|�$�&��	�l�7�9��	�|�8�:��� ��;�=��	�L�O�Q�e4�4�l	
�r-c�6�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	y)	�	RegexStatc�>�d|_||_t�|_yrH)�_stats�
_failregex�list�_ipList)rX�	failregexs  r+�__init__zRegexStat.__init__�s���$�+��$�/���$�,r-c�d�d|j|j|j|jfzS)Nz%s(%r) %d failed: %s)�	__class__rurtrw�rXs r+�__str__zRegexStat.__str__�s-��	��~�~�t������T�\�\�B�
C�Cr-c�.�|xjdz
c_y�Nr
�rtr|s r+�incz
RegexStat.inc�s���+�+���+r-c��|jSr/r�r|s r+�getStatszRegexStat.getStats�s��	
���r-c��|jSr/)rur|s r+�getFailRegexzRegexStat.getFailRegex�s��	
���r-c�:�|jj|�yr/)rw�append)rX�values  r+�appendIPzRegexStat.appendIP�s���,�,���e�r-c��|jSr/)rwr|s r+�	getIPListzRegexStat.getIPList�s��	
���r-N)
rZr[r\ryr}r�r�r�r�r�rNr-r+rrrr�s&���
C�����r-rrc�"�eZdZdZd�Zd�Zd�Zy)�	LineStatsz(Just a convenience container for stats
	c��dx|_|_g|_d|_g|_d|_g|_|jrg|_g|_	g|_
yyrH)�tested�matched�
matched_lines�missed�missed_lines�ignored�
ignored_lines�debuggex�matched_lines_timeextracted�missed_lines_timeextracted�ignored_lines_timeextracted)rX�optss  r+ryzLineStats.__init__�sZ�� � �$�+����$���$�+��$���$�,��$��	�]�]�&(�4�#�%'�4�"�&(�4�#�r-c��d|zS)NzM%(tested)d lines, %(ignored)d ignored, %(matched)d matched, %(missed)d missedrNr|s r+r}zLineStats.__str__�s��	X�[_�	_�_r-c�6�t||�rt||�SdS)Nr;)�hasattr�getattr)rX�keys  r+�__getitem__zLineStats.__getitem__�s��&�t�S�1���s�	�9�r�9r-N)rZr[r\rUryr}r�rNr-r+r�r��s���
)�`�:r-r�c�h�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zdd�Zd�Z
d
�Zd�Zd�Zd�Zy
)�
Fail2banRegexc��|jjtd�|jj�D���||_d|_d|_d|_t�|_td�|_
d|_t�|_
t�|_t�|_d|_t#|�|_|j&r|j)|j&�nd|_|j,�.|j/t1j2|j,��|j4r%|jj7|j4�d|j_	t;j<d�ddlm }|�|jBr|jE|jB�|jFr%|jjI|jF�|jJ|j_&|jNxr
|jP|j_'tS|jP�|j_*|jV|j_,d|_-y)Nc3�0K�|]\}}d|z|f���y�w)�_NrN)�.0�o�vs   r+�	<genexpr>z)Fail2banRegex.__init__.<locals>.<genexpr>�s����G�#�!�A�S��U�1�I�G�s�Fr�r	)�
_updateTimeRE�auto).�__dict__�update�dict�items�_opts�
_maxlines_set�_datepattern_set�
_journalmatch�share_configr�_filter�_prefREMatchedrv�
_prefREGroups�_ignoreregexru�
_time_elapsedr��_line_stats�maxlines�setMaxLines�	_maxlines�journalmatch�setJournalMatch�shlex�split�timezone�setLogTimeZone�
checkFindTimer�setAlternateNow�server.strptimer��datepattern�setDatePattern�usedns�	setUseDns�raw�
returnRawHostrkrl�bool�
ignorePending�_onIgnoreRegex�
onIgnoreRegex�_backend)rXr�r�s   r+ryzFail2banRegex.__init__�s����-�-���t�G����1D�1D�1F�G�G�H��$�*��$���$���$���F�$�����$�,��$���v�$���f�$���F�$�/��$���t�_�$��	�]�]����D�M�M�"��4�>�	���"�������D�$5�$5�6�7�	�]�]��<�<���t�}�}�-�$�$�,�,��	�	���!��.��?�	������t�'�'�(�	�[�[��<�<���$�+�+�&�#�x�x�$�,�,��#�1�1�B�$�(�(�l�$�,�,��#�D�H�H�~�$�,�,��#�2�2�$�,�,���$�-r-c�H�|jjst|�yyr/)r�rlr2�rX�lines  r+r2zFail2banRegex.output!s��	
��������r-c�:�|j|jd�S)N�ignore)�encode�	_encodingr�s  r+�encode_linezFail2banRegex.encode_line$s��	
���T�^�^�X�	.�.r-c���|jsX|jj|�d|_|�3|jd|�d|jj	�d���yyy)NTzUse      datepattern : z : r
)r�r�r�r2�getDatePattern)rX�patterns  r+r�zFail2banRegex.setDatePattern's]��	
�	�	��<�<���w�'��4��
���K�K��d�l�l�)�)�+�A�.�2�4��
r-c���|jsX|jjt|��d|_|j	d|jj�z�yy)NTzUse         maxlines : %d)r�r�r�rnr2�getMaxLines�rXr�s  r+r�zFail2banRegex.setMaxLines/sM��	
�	�	��<�<���C��F�#��4���;�;�+�d�l�l�.F�.F�.H�H�J�
r-c��||_yr/)r�r�s  r+r�zFail2banRegex.setJournalMatch5s
���$�r-c���i}|j�}ddgt|j��zD]!}	||vr||n|jd|�||<�#|jd|z�y#t$rY�DwxYw)N�logtyper��
DefinitionzReal  filter options : %r)�getCombinedrv�keys�getrr2)rX�reader�fltOpt�realopts�combopts�ks      r+�_dumpRealOptionszFail2banRegex._dumpRealOptions8s���
�(�
�
�
�
!�(��}�%��V�[�[�]�(;�;�	�a�	�!"�h��(�1�+�F�J�J�|�Q�4O�H�Q�K�		��+�+�)�H�4�5���	��	�s�A*�*	A6�5A6c��|dvsJ�|dz}|jj}|}d}i}|dk(r�tjd|�r�	t	|�\}}d|ddvr|f}n||dz|dzf}|D]�}d	|vret
jj|�d
k(r!t
jj||�}nAt
jj|d
|�}nt
jj|�}t
jj|�rnd}��|���||jjk(s-t
jj|�d
k(sd|ddvr�d	|vr�t
jj|�d
k(rt
jj|�}t
jjt
jj|��d}|jd|d�d|�d|���nX|jd|d�d|���d}t
jj!|�st
jj#|�}|r|jd|z�t%|d||j&|��}
d}	|�|
j)�}n!|
j+d�|
j-�}|std|z�y
|
j/|j0�|
j3d�|jdkDs%t4j7�t8j:kr|j=|
|�|
j?�}i}
|D�]L}|ddk(r|d}n|ddk(r|dd}n�!	|ddk(r|D]}||j@_!��n	|ddk(rD|
jEd�}|stG�x}|
d<|D]}|jItK|���n�|dd k(rD|
jEd!�}|stG�x}|
d!<|D]}|jItK|���nq|dd"k(r|D]}|jM|��nP|dd#k(r|D]}|jO|��n/|dd$k(r'|jjP�|jS|���On/|jd|d�d)tW|����|tK|�gi}
|
jY�D]\\}}
|dz}t[|d*|z|
�|
D]=}t]|j@d+|j_�z�|ja���?�^y,#t$r=}	tdt|	����td|���|jr|	�Yd}	~	y
d}	~	wwxYw#t$r0}	tdt|	����|jr|	�Yd}	~	��d}	~	wwxYw#tT$r%}	td%|d�d&|�d'|�d(|	���Yd}	~	y
d}	~	wwxYw)-N)�failr�r(r�z"(?ms)^/{0,3}[\w/_\-.]+(?:\[.*\])?$�.i����z.confz.local�/zfilter.dz%ERROR: Wrong filter name or options: z       while parsing: FrzUse z>11z filter file : z, basedir: z file : zUse   filter options : %rzfail2ban-regex-jail)r��basedirzWrong config file: zERROR: failed to load filter %sr
z	multi-setr4�setr	�	prefregex�addfailregex�addignoreregexr�r�r��addjournalmatchzERROR: Invalid value for z (z) read from �: z line : r�z
add%sRegexT)1r��configr�searchr�os�path�basenamer<�dirname�isfile�	Exceptionr2r�_verbose�splitext�isabs�abspathrr��read�
setBaseDir�readexplicit�applyAutoOptionsr��
getOptions�logSys�getEffectiveLevel�logging�DEBUGr��convertr��	prefRegexr�rvr�rrr�r�r�r��
ValueErrorr9r��setattrr��titler�)rXr��	regextyper(r��fltName�fltFiler��tryNames�er��ret�readercommands�regex_values�opt�optval�stors                 r+�	readRegexzFail2banRegex.readRegexEs���	�(�	(�)�	(�
�g�
�%��J�J���'��'��'�
�&��&���i�i�5�u�=��%�e�,�_�W�f��w�r�s�|����h��7�W�,�g��.@�A�h��
��
�G�^�
�'�'�
�
�7�
#�z�
1��'�'�,�,�w��0���'�'�,�,�w�
�G�<��������)�w�	������	 ���g�
�"
���$�*�*�#�#�#�	�w�w���� �J�.��7�2�3�<��C�w�$6�
�w�w���� �J�.��w�w���w�'�W��g�g���r�w�w�/�/��8�9�!�<�G��K�K�U�G�W�U�W�	�K�K���8�:��G�
�7�7�=�=��!��w�w���w�'�W���K�K�,�v�5�7���"7��d�N_�N_�ip�q�6�	
�3�	����;�;�=�S����t����� �S��
�-��5�7��	���4�=�=�)�	���T��
�m�m�a��6�3�3�5�w�}�}�D����&�&�)��N�N�$�>��<��#�s�
�1�v����!�f�V�	�Q��5���!�"�g�V�
���A��+���'�&� &�t�|�|��'�

�a�&�N�
"�
�
�
�f�
%�d�
���7�4�,�v�.��&�&��{�{�9�V�$�%�&��a�&�$�
$�
�
�
�h�
'�d�
�4�6�9�4�,�x�0��&�&��{�{�9�V�$�%�&��a�&�J�
�� �&������ �

�a�&�M�
!��#�&����6�"�#�

�a�&�%�
%�	
���	 �	 �	(����F�#��?#�L�;�;��x���?�A��y��/�0�1�<�!-�!3�!3�!5�=��i���w��5�
�4��u��l�+��=�u�'�G�	�\�\��I�O�O�%�%�'�',�'9�'9�';�=�=�=�
��E����Q��A�B��%�1�2��
�
�Q�x���	��B��
�c�!�f�.�/��}�}�A�h�}����b���!�!�f�f�e�Q�8�:����sJ�CU�
4V�7D+W
�	V�3V�V�	W�%W�W�
	W8�W3�3W8c�L�d|_|j|j�y)NT)�_lineIgnoredr�r�)rX�idx�ignoreRegexs   r+r�zFail2banRegex._onIgnoreRegex�s!���$�����C����r-Nc��|jj}|jj�dkDr|dd}t|�|jj�k\}dx}|_	|jj||�}g}g}|D]�}	|jjsP|	jt|�dkD�|j|	d}
|
j�|
j|	�|	djd�s|j|	���d}��|jjrd|dfS|jjr�|jj}|j�r�|xjdz
c_|j r�t|j"�|j$kr*|j"j|j'��n=t|j"�|j$k(r|j"jd�|jj�dkD�r�|t-|�dD�]�}
|
|jjvs�	|j.j0j3|j.j0j5d
j7|
���|j8r]|j.j:j3|j.j:j5d
j7|
ddd����|j>r[|j8s5|j.j@jd
j7|
��n|j|
d|
dz�|j.xjBdz
c_!|j.xjDdzc_"���|r:|j|jjG��dj7|�}|||xs|jfS#t($r}t+d|z�Yd}~y	d}~wwxYw#t<$rY��'wxYw)
Nr
Frr4�nofailTr5�	ERROR: %s)NrNr;r	rS)$r��_Filter__lineBufferr�r6r �processLiner�rlr�rur�r�r�r�
hasMatchedr�rr�r��	getGroupsrr2rnr�r��pop�indexr<�	_debuggexr�r�_print_all_matchedr�r�r��
processedLine)rXr��date�
orgLineBuffer�
fullBuffer�
is_ignored�found�linesr�matchr(�prer�bufLines              r+�	testRegexzFail2banRegex.testRegex�sr���,�,�2�2�-�	�\�\����!�#� ��#�=��=�!�T�\�\�%=�%=�%?�?�*�#(�(�*�t� ���<�<�#�#�D�$�/�5�
�5�	�3���u��:�:�>�>��\�\�#�c�(�1�*��
�_�_�U�1�X�
&�U�
�Y�Y�[�
�^�^�E����8�<�<��!��Z�Z����Z���j�j�n�n���d�?��
�l�l���
�,�,�
 �
 �C�
�~�~��	���A����
�
�	�T�
�
�	 �4�>�>�	1���� � �����1�

�d� � �
!�T�^�^�
3����!�!�%�(�
�\�\����!�#���J�� 0�1�"�w��d�l�l�6�6�6��
���#�#�'�'����$�$�*�*�2�7�7�7�+;�<�>�	
������2�2�6�6����3�3�9�9�	�����1���	�	 �!�	
���
�^�^����%�%�,�,�R�W�W�W�-=�>��|�|�G�A�J����+�,�	������"��	������!��%"�&��<�<����*�*�,�-�
�)�)�E�
�4�	
�s�Z�4�4�#4�#4�	5�5��5
��	�;��?��
����
��
��s3�)CP �9C&P �)CQ� 	Q�)P<�<Q�	Q�Qc��������|jj��dvrd�}|S�dk(rd�}|S�dk(rd�}|S�dk(rd�}|Sd	�vr�fd
�}|Sddlm�m�m�d
�������fd�}|S)zOPrepares output- and fetch-function corresponding given '--out' option (format))�id�fidc�.�|D]}t|d��yr)r2�r�rs  r+�_outz+Fail2banRegex._prepaireOutput.<locals>._outs��
����A�a�D�\�r-�ipc�T�|D]#}t|djd|d���%y)Nr4r@r
�r2r�r=s  r+r?z+Fail2banRegex._prepaireOutput.<locals>._outs,��
�"���A�a�D�H�H�T�1�Q�4� �!�"r-�msgc��|D]N}|djd�D]5}t|t�sdjd�|D��}t	|��7�Py)Nr4�matchesr;c3� K�|]}|���y�wr/rN�r�r>s  r+r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>�����.��1�.���)r��
isinstancerr<r2r=s  r+r?z+Fail2banRegex._prepaireOutput.<locals>._outsP��
�����d�h�h�y�!���
��3�
�
�7�7�.�a�.� �q��Q�i��r-�rowc
��|D]>}td|d�d|d�dtd�|dj�D���d���@y)N�[r
z,	r	c3�6K�|]\}}|dk7s�||f���y�w)rENrN)r�r�r�s   r+r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>s!����/a�$�!�Q�RS�W`�R`��1��/a�s�
�	r4z],)r2r�r�r=s  r+r?z+Fail2banRegex._prepaireOutput.<locals>._outs?��
�d����1��a��d�4�/a�!�A�$�*�*�,�/a�+a�b�c�dr-�<c�N��|D]}t|dj����!y)Nr4rB)rr>�ofmts  �r+r?z+Fail2banRegex._prepaireOutput.<locals>._outs&���
����A�a�D�H�H�T�N��r-r	)�Actions�
CommandAction�	BanTicketc�2�|dvr|jdd�S|S)N)rC�z\x00)�replace)�tr�s  r+�_escOutz.Fail2banRegex._prepaireOutput.<locals>._escOut$s �����
�I�I�f�g�&�&��Hr-c������g}ddi�|D]j��	�d�d�d��}�j|�}��fd�}||d<�
j�|��	�}�dr|j�|f��`t|��l|D]c\�}�dj	d
�D]G�t�t�sdjd��D���|jd
���t���I�ey)N�NLrr
r	r4)�time�datac�f���ds&t�djdg��dkr|dSd�d<y)Nr[r4rEr
�msg)r6r�)rXr>�wraps ��r+�_get_msgz=Fail2banRegex._prepaireOutput.<locals>._out.<locals>._get_msg0s;���
�$�Z�C��!�����B� 7�8�A�=��9�o���t�D�z�r-rC)�	escapeValrEr;c3� K�|]}|���y�wr/rNrGs  r+r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>ArHrIr_)	�
ActionInfo�replaceDynamicTagsr�r2r�rJrr<rW)
r�rows�ticket�aInforar�r>r`rRrTrSrYrQs
      @@�����r+r?z+Fail2banRegex._prepaireOutput.<locals>._out)s����
�D���8�D�
�����!��1�Q�4�a��d�3�V�
�
�
��
'�U���U�5�\�	�	)�	)�$���	)�	I�Q��T�
�
�k�k�1�a�&����A�Y�!�$����1���d�h�h�y�!���
��3�
�
�7�7�.�a�.� �q�
�)�)�M�1�
%�a��Q�i�	�r-)r�rl�server.actionsrRrSrT)rXr?rRrTrSrYrQs  @@@@@r+�_prepaireOutputzFail2banRegex._prepaireOutputs����	
�����$�	�]���p
�+�k�t�|�"�h
�+�c�u�}��`
�+�U�u�}�d�R
�+�M�$���J
�+�CB�A�
�
��6
�+r-c�P�tj�}|jjr|j�}|D�]�}t	|t
�r1|j
|d|d�\}}}dj|d�}n:|jd�}|jd�s|s�j|j
|�\}}}|jjrt|�dkDr
|s|���|r�|jxjdz
c_|j�s�|js'|jj|jdzk�r�|jj j#|�|j$�rk|jj&j#|��nDt|�dkDr�|jxj(dz
c_|j*�r
|jj,j#|�|j$r�|jj.j#|�n�|jxj0dz
c_|j2s�|j4s&|jj0|jdzkrV|jj6j#|�|j$r%|jj8j#|�|jxj:dz
c_���tj�|z
|_y)Nrr
r;z
�#)r\r�rlrjrJ�tupler8r<�rstrip�
startswithr6r�r��_print_no_ignored�_print_all_ignoredr�r�r�r,r�r�r-r�r�r��_print_no_missed�_print_all_missedr�r�r�r�)rX�
test_lines�t0rlr��line_datetimestrippedrr2s        r+�processzFail2banRegex.processGsg���y�y�{�"�	�Z�Z�^�^�	
�	�	�	�3��! �d���u��-1�^�^�D��G�T�!�W�-M�*��3�
�
�7�7�4��7��D��;�;�v��D����s��4�
�-1�^�^�D�-A�*��3�
�
�j�j�n�n�
�3�x�!�|�J��C����������!���!�!�t�'>�'>�$�BR�BR�BZ�BZ�^b�^l�^l�op�^p�Bp�	���#�#�*�*�4�0����
���2�2�9�9�:O�P��C��1��������!�����	���#�#�*�*�4�0����
���2�2�9�9�:O�P������q� ��� � �d�&<�&<��@P�@P�@W�@W�[_�[i�[i�lm�[m�@m�	���"�"�)�)�$�/����
���1�1�8�8�9N�O������a���C! �F�y�y�{�R�'�$�r-c
�8�|j}|j|j|j|jzz
k(sJ�||}||dz}|j
j
�dkD}|�r�|j��d�}|j�r|dk(s|dk(r
|j}n|j}||dz}||jkst|d|z�r�gg}||fD]}	|D�
�cgc]}
|	D]}|
|gz��
�}}
}� |D�cgc]g}|dd	z|dj�zd
zt|j|d�|dj�||j j"�z��i}
}t%|
D�
cgc]}
|
j'���c}
|�yt)d|||fz�y||jkst|d|z�r)t%|D�
cgc]}
|
j'���c}
|�yt)d|||fz�yycc}}
wcc}wcc}
wcc}
w)N�_linesr
z	 line(s):r�r��_lines_timeextracted�_print_all_rz | z |  z?%s too many to print.  Use --print-all-%s to print all %d lines)r�r�r�r�r�r�r��
capitalizer,rur�r�r�r�r,r�r�r�r>rnr2)rX�ltype�lstatsr4r8r)r=�	regexlist�ans�arg�x�y�a�bs              r+�
printLineszFail2banRegex.printLinesps(�����&�	���&�-�-�6�>�>�F�N�N�+J�K�	K�L�	K�
��-�%��U�X�
��!��l�l�&�&�(�1�,�)�
�"�-�-�/�1�6�
�n�n����E�Y�.����Y��"�"�Y��u�-�-�.�A��t�~�~����}�u�/D�!E��4�S��I��2��"�1�!�C�1�q�a�1�#�g�1�g�1�c�1�2�/2�
3�)*��A�$�%�-�!�A�$�+�+�-�
-��
6��$�"�"�1�Q�4�(�!�A�$�*;�*;�*=��$�*�*�#�#�%�%�
3�Q�
3��a�(��!�(�(�*�(�&�1�� �#)�5�%�"8�9�;�
�����'�$�
��0E�"F��Q�'������'��0�
�
�"(�%��!7�
8�:�-��
2��
3��)��
(s�'H�A,H
�;H�Hc�4���jjrytd�td�td��fd�}�jjr}�jj}|j�g}�jr%�jD]}|jd|����tdd�jfz�t|�|d	�j�}|d
�j�}�jj��td�g}�jjjD]�}�js
|js�|jd|j|j fz��j"s�S|jd
|j$|j&j$t)|dd�fz�|jdt)|dd������t|d�td�j*z��j,�td�j,z�td��j.r�j1d��j2s�j1d��j4s�j1d�y)NTr;�Resultsz=======c
�&��dg}}t|�D]�\}}|j�}||z
}|s�
jr(|jd|dz||j	�fz��
js�^t|j
��s�x|j
�D]W}tj|d�}tjd|�}	|jd|d�d|	�|dxrd	xsd
����Y��td||fz�t|d�|S)
Nrz%2d) [%d] %sr
r	z%a %b %d %H:%M:%S %Y�    z  ���z (multiple regex matched)r;�
%s: %d totalz" #) [# of hits] regular expression)�	enumerater�rr�r�r6r�r\�	localtime�strftimer2r>)r�failregexes�totalrl�cntrxr5r@�	timeTuple�
timeStringrXs          �r+�print_failregexesz3Fail2banRegex.printStats.<locals>.print_failregexes�s����2�#�5�"�;�/�7�~�s�I���� �E�	�U�N�E�
�����Z�Z��#�a�%��	�0F�0F�0H�!I�I�J��}�}��Y�0�0�2�3��"�"�$�7���.�.��A��'�i��=�=�!7��C�j�	�j�j�
�1���
�2��.�.�4�"�4�6�7�7�7� 
��u�e�n�,�.��s�8�9�
�<r-r�r��	Prefregex�	Failregex�Ignoreregexz
Date template hits:z[%d] %sz&    # weight: %.3f (%.3f), pattern: %sr�z    # regex:   r(z[# of hits] date formatz

Lines: %sz[processed in %.2f sec]r�r�r�)r�rlr2r�r�getRegexrr�r�r�r>rur��dateDetector�	templates�hits�name�
_verbose_date�weight�templater�r�r�r-r�rprr)rXr�r6rl�grpr�r�r�s`       r+�
printStatszFail2banRegex.printStats�s���	�Z�Z�^�^�D��"�,��)���)���0
�\�\���	
���	�	�3�

�,�,�.�	�3�
�m�m��!�!�#���Z�Z�C�!�"�#�	��{�D�,?�,?�@�@�B��s���K����
9�%��
�t�'8�'8�9�!�
�\�\���*�	�"�$�	�3��<�<�,�,�6�6�J�x��}�}��
�
��Z�Z�	�X�]�]�H�M�M�:�:�;����	�j�j�9�����)�)�0�0��x��B�'�=*�*�+�
�j�j���'�2�(F�H�I�J��s�-�.��-�$�*�*�
*�-�	���#�	�$�t�'9�'9�9�<��"�,�	����?�?�9��	
�	�	��?�?�9��	
�	�	��?�?�8��	
r-c	�(�|dd\}}|jd�rd|_	|j|d�syt|�dk(r|j|dd�sytjj|�rM	t||jd	�
�}|jd|z�|jd|jz��n�|jd�r�tstd
�y|jd�|jd|jz�t|�\}}tdi|��}|j|j�|j�}	|j }
|j#d�|
r4|j%|
�|jddj'|
�z�t)||	�}n�|j*j-�dkr5d|vr1|jdt/|j1dd��z�|g}n�|j3d�}|jdt|�z�t5|�D]A\}}|dk\r|jd�n&|jd|dzd�dt/|�����C|jd�|jd�|j7|�|j9�syy	#t$r}td|z�Yd}~yd}~wwxYw#t$r}t|�Yd}~yd}~wwxYw)Nr	zsystemd-journal�systemdr�Fr4r�r%T)�doOpenzUse         log file : %szUse         encoding : %sz,Error: systemd library not found. Exiting...zUse         systemd journalzUse    journal match : %s� r
rSzUse      single line : %sz\nz Use      multi line : %s line(s)�z| ...z| z>2.2r�z`-r;r/)ror�rr6rr2r�r�r�rr��IOErrorr
r�setLogEncoding�getJournalReaderr�r��addJournalMatchr<rFr�r�r9rWr�r�rwr�)
rXr*�cmd_log�	cmd_regexrrt�backend�beArgsrCrDr��ir8s
             r+�startzFail2banRegex.start�s����B�Q�x��'�9����)�*��4�=��
�.�.��F�
+��	�$�i�1�n�T�^�^�D��G�X�>��
�W�W�^�^�G����w����t�D�J��K�K�,�w�6�8��K�K�,�t�~�~�=�?����+�,�
�
�:�<���;�;�-�/��;�;�+�d�n�n�<�>�#�G�,�?�7�F�	�	&�v�	&�3����d�n�n�%��#�#�%�9��$�$�<����t�������%��K�K�,�s�x�x��/E�E�G�!�#�y�1�:��l�l��� �A�%�$�g�*=��K�K�,�x�����e�8T�/U�U�W���J����t�$�J��K�K�3�c�*�o�E�G��*�%�7���1�	�Q��
�k�k�7��e�	�[�[�1�Q�3����4�6�7�	�K�K����+�+�r���,�,�z��	
���	�
�	
��e
��	�;��?��
������
�A�K����s5�K�#K�9A
K3�	K0�K+�+K0�3	L�<L�Lr/)rZr[r\ryr2r�r�r�r�r�rr�r8rjrwr�r�r�rNr-r+r�r��sV��(�T&�/�4�K��6�}�~�>6�@<�~'(�R:�>F�P>r-r�c��dt_t�}|j|�\}}g}|jr|j
r|j
d�|jr|jr|j
d�t|�dvr|j
d�|rY|j�tjjddj|�zdz�tjd�|j s,t#d�t#d	�t#d
�t#d�t%|j&�|_t(j+|j&�tj,tj.�}|j0dkrdnd
}|j2rt4}|j6xrdxsd|z}ntj8}|j;|t=|j0|���t(j?|�	tA|�}jK|�stjd�yy#tB$rv}|j0s%t(jE�tjFkrt(jI|d��nt#d|z�tjd�Yd}~��d}~wwxYw)NTzGERROR: --print-no-missed and --print-all-missed are mutually exclusive.zIERROR: --print-no-ignored and --print-all-ignored are mutually exclusive.)r	r4z&ERROR: provide both <LOG> and <REGEX>.rS�r;z
Running testsz
=============r
z%(levelname)-1.1s: %(message)sz %(message)sz %(tb)sz %(tbc)s)�exc_infor%)&r�
exitOnIOErrorrp�
parse_args�print_no_missed�print_all_missedr��print_no_ignored�print_all_ignoredr6�
print_helprI�stderr�writer<rJrlr2rrdr
�setLevel�
StreamHandler�stdoutri�
log_tracebackr�full_traceback�	Formatter�setFormatterr�
addHandlerr�rrr
rer�)	r*�parserr��errorsr��fmtr��
fail2banRegexrs	         r+�exec_command_liner�s�����
�
��!��!�!�4�(��$��
�����T�2�2��-�-�Y�Z����d�4�4��-�-�[�\�	�D�	�V���-�-�8�9�
������*�*���4�$�)�)�F�+�+�d�2�3��(�(�3�-�����"�,��/���/���"�,��t�~�~�.��������� ��
�
��
�
�
+��+/�<�<�1�+<�'�.�����$�)�	
�	�	�	*��	8�j�C�?�#����)����Y�1�$�,�,��D�E�F����6�����%�-�	���D�!��(�(�3�-�	"��	��	�\�\�V�-�-�/����>�	�?�?�1�t�?�$�	�;��?���(�(�3�-�-���s�I
�
	K	�A,K�K	)F�yes)�5r/):rU�
__author__rW�__license__�getoptrrr�r�rIr\�urllib.requestr$�urllib.parse�urllib.error�optparserr�configparserrrr�server.filtersystemdr
�ImportErrorrr�filterreaderr�
server.filterrrr�server.failregexrr�helpersrrrrrrr
r,r2r9r>rFrKrTrQrp�objectrrr�r�r�rNr-r+�<module>r�s���&�#�
�]�
���
��	�	��
��1�1�)�Q�Q��1�+�&�9�9�4���
�:�	��D�
�
�0�&�
�	I���L��2<
�~���6:��:�.`�F�`�F5��M�����s�C
�
C�C