HOME


Mini Shell 1.0
Redirecting to https://devs.lapieza.net/iniciar-sesion Redirecting to https://devs.lapieza.net/iniciar-sesion.
DIR: /lib/python3/dist-packages/fail2ban/client/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/fail2ban/client/__pycache__/fail2banregex.cpython-311.pyc
�

�Bd�p����dZdZdZdZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
ZddlZddlmZmZddlmZmZmZ	dd	lmZn
#e$rdZYnwxYwdd
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 �d!e5��Z7Gd"�d#e5��Z8d$�Z9dS)(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�fail2banF�yesc��tj||���|dd�}|rd|d<dtj�|��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-?sR��
��e�F�3�3�3�	��	�	��
�"�s�t�G�}�$�v�|�'=�'=�d�'C�'C�C�C�c�$�t|��dS�N)�print�r+s r,�outputr3Hs���t�����r.�5c�L�t|��|kr|d|dz
�dzS|S)zReturn shortened string
	N��...)�len)�s�ls  r,�shortstrr;Ks.����F�F�Q�J�J�	
�4�A�a�C�4��5���	�r.c��t|��sdS|rd|z}nd}t|dzd�|��zdz��dS)Nz|- %s
�z|  z
|  z
`-)r8r3�join)r:�headerr9s   r,�pprint_listr@RsZ���A���	��&�
�	��&��!�!��!���U��W�\�\�!�_�_�	$�v�	-�/�/�/�/�/r.c#�K�		|���}n#t$rY�#wxYw|sdS|�|��V��Br0)�get_next�OSError�formatJournalEntry)�flt�	myjournal�entrys   r,�journal_lines_genrH[so����&�������5�5��	�����8�����	�	��5����u�%�%�%�%�%�&s��
'�'c�d�tt����tjd��dS�Nr)r3r�sys�exitr2s r,�dumpNormVersionrMes%����
�
������!�����r.c�,�dtjdzS)Nz(%s [OPTIONS] <LOG> <REGEX> [IGNOREREGEX]r)rK�argv�r.r,�<lambda>rQis��:�S�X�a�[�H�r.c��eZdZd�ZdS)�
_f2bOptParserc��d|_dt��zdztzdztj|g|�Ri|��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,rXz_f2bOptParser.format_helplsq���$�*�	�U�W�W�	�t�	#�g�	-�1�
� 	� ��7��7�7�7��7�7�!
8� ;�!
�$�%
�$�%
�r.N)�__name__�
__module__�__qualname__rXrPr.r,rSrSks#����������r.rSc���tt��dtz���}|�t	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 )rVrz-cz--configz
/etc/fail2banzset alternate config directory)�default�helpz-dz
--datepatternz+set custom pattern used to match date/times)raz
--timezonez--TZ�storez)set time-zone used by convert time format)�actionr`raz-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`raz-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`raz-V�callbackz,get version in machine-readable short format)rcriraz-vz	--verbose�count�verbosezIncrease verbosity)rcrhr`raz--verbosityz'Set numerical level of verbosity (0..4))rcrhreraz--verbose-datez--VDz%Verbose date patterns/regex in output)rcraz-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))rSrVr�add_optionsrr�intrM)�ps r,�get_opt_parserrr�s����
�'�'��w�� � � �������z�?�+�-�-�-����8�:�:�:���v�g�t�6�8�8�8���|�Z�2�4�4�4���w�|�U�)�+�+�+���G�T�K�L�L�L�	��|�#�q�+�-�-�-����!�"�"�"�	��}���5�7�7�7�	��j�?�9�;�;�;���{�7����!�!�!�	��w�Y�S�4�6�6�6��	�6�,�2�4�4�4���|�L�:�<�<�<��	�-�o�t�*�,�,�,���w�w�U�D�n�p�p�p��	�\�*�,�,�,��	�l�+�-�-�-��	�|�$�&�&�&��	�l�7�9�9�9��	�|�8�:�:�:��� ��;�=�=�=��	�L�O�Q�Q�Q�e4�4�4�4�l	
�r.c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�	RegexStatc�H�d|_||_t��|_dSrJ)�_stats�
_failregex�list�_ipList)rZ�	failregexs  r,�__init__zRegexStat.__init__�s���$�+��$�/����$�,�,�,r.c�<�d|j|j|j|jfzS)Nz%s(%r) %d failed: %s)�	__class__rwrvry�rZs r,�__str__zRegexStat.__str__�s%��	��~�t����T�\�B�
C�Cr.c�&�|xjdz
c_dS�Nr
�rvr~s r,�incz
RegexStat.inc�s���+�+���+�+�+�+r.c��|jSr0r�r~s r,�getStatszRegexStat.getStats�s
��	
��r.c��|jSr0)rwr~s r,�getFailRegexzRegexStat.getFailRegex�s
��	
��r.c�:�|j�|��dSr0)ry�append)rZ�values  r,�appendIPzRegexStat.appendIP�s���,���e�����r.c��|jSr0)ryr~s r,�	getIPListzRegexStat.getIPList�s
��	
��r.N)
r\r]r^r{rr�r�r�r�r�rPr.r,rtrt�s����������
C�C�C�����������������r.rtc�$�eZdZdZd�Zd�Zd�ZdS)�	LineStatsz(Just a convenience container for stats
	c��dx|_|_g|_d|_g|_d|_g|_|jrg|_g|_	g|_
dSdSrJ)�tested�matched�
matched_lines�missed�missed_lines�ignored�
ignored_lines�debuggex�matched_lines_timeextracted�missed_lines_timeextracted�ignored_lines_timeextracted)rZ�optss  r,r{zLineStats.__init__�sh�� � �$�+����$���$�+��$���$�,��$��	�]�)�&(�4�#�%'�4�"�&(�4�#�#�#�)�)r.c��d|zS)NzM%(tested)d lines, %(ignored)d ignored, %(matched)d matched, %(missed)d missedrPr~s r,rzLineStats.__str__�s��	X�[_�	_�_r.c�F�t||��rt||��ndS)Nr=)�hasattr�getattr)rZ�keys  r,�__getitem__zLineStats.__getitem__�s&��&�t�S�1�1�	9���s�	�	�	�r�9r.N)r\r]r^rWr{rr�rPr.r,r�r��sN��������
)�
)�
)�`�`�`�:�:�:�:�:r.r�c�j�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zdd�Zd�Z
d
�Zd�Zd�Zd�Zd
S)�
Fail2banRegexc��|j�td�|j���D������||_d|_d|_d|_t��|_td��|_
d|_t��|_
t��|_t��|_d|_t#|��|_|jr|�|j��nd|_|j�,|�t1j|j����|jr|j
�|j��d|j
_	t;jd��ddlm }|��|j!r|�"|j!��|j#r|j
�$|j#��|j%|j
_&|j'o|j(|j
_'tS|j(��|j
_*|j+|j
_,d|_-dS)	Nc3�*K�|]\}}d|z|fV��dS)�_NrP)�.0�o�vs   r,�	<genexpr>z)Fail2banRegex.__init__.<locals>.<genexpr>�s.����G�G�#�!�A�S��U�1�I�G�G�G�G�G�Gr.Fr�Tr	)�
_updateTimeRE�auto).�__dict__�update�dict�items�_opts�
_maxlines_set�_datepattern_set�
_journalmatch�share_configr�_filter�_prefREMatchedrx�
_prefREGroups�_ignoreregexrw�
_time_elapsedr��_line_stats�maxlines�setMaxLines�	_maxlines�journalmatch�setJournalMatch�shlex�split�timezone�setLogTimeZone�
checkFindTimer�setAlternateNow�server.strptimer��datepattern�setDatePattern�usedns�	setUseDns�raw�
returnRawHostrmrn�bool�
ignorePending�_onIgnoreRegex�
onIgnoreRegex�_backend)rZr�r�s   r,r{zFail2banRegex.__init__�s����-���t�G�G���1D�1D�1F�1F�G�G�G�G�G�H�H�H��$�*��$���$���$���F�F�$������$�,��$���v�v�$���f�f�$���F�F�$�/��$���t�_�_�$��	�]�����D�M�"�"�"�"��4�>�	��"������D�$5�6�6�7�7�7�	�]�.��<���t�}�-�-�-�$�$�,���	��!����.�.�.�.�.�.��=�?�?�?�	��)����t�'�(�(�(�	�[�'��<���$�+�&�&�&�#�x�$�,��#�1�B�$�(�l�$�,��#�D�H�~�~�$�,��#�2�$�,���$�-�-�-r.c�@�|jjst|��dSdSr0)r�rnr3�rZ�lines  r,r3zFail2banRegex.output!s ��	
���%��������%�%r.c�8�|�|jd��S)N�ignore)�encode�	_encodingr�s  r,�encode_linezFail2banRegex.encode_line$s��	
���T�^�X�	.�	.�.r.c���|js]|j�|��d|_|�<|�d|�d|j���d����dSdSdS)NTzUse      datepattern : z : r
)r�r�r�r3�getDatePattern)rZ�patterns  r,r�zFail2banRegex.setDatePattern's���	
�	�4��<���w�'�'�'��4��
���K�K�K��W�W�d�l�)�)�+�+�A�.�.�2�4�4�4�4�4�	4�4��r.c���|js_|j�t|����d|_|�d|j���z��dSdS)NTzUse         maxlines : %d)r�r�r�rpr3�getMaxLines�rZr�s  r,r�zFail2banRegex.setMaxLines/sj��	
�	�K��<���C��F�F�#�#�#��4���;�;�+�d�l�.F�.F�.H�.H�H�J�J�J�J�J�K�Kr.c��||_dSr0)r�r�s  r,r�zFail2banRegex.setJournalMatch5s���$���r.c� �i}|���}ddgt|�����zD]8}	||vr||n|�d|��||<�)#t$rY�5wxYw|�d|z��dS)N�logtyper��
DefinitionzReal  filter options : %r)�getCombinedrx�keys�getrr3)rZ�reader�fltOpt�realopts�combopts�ks      r,�_dumpRealOptionszFail2banRegex._dumpRealOptions8s���
�(�
�
�
�
!�
!�(��}�%��V�[�[�]�]�(;�(;�;�	�	�a�	�!"�h���(�1�+�+�F�J�J�|�Q�4O�4O�H�Q�K�K��
�	�	�	��D�	�����+�+�)�H�4�5�5�5�5�5s�%A&�&
A3�2A3c�
�|dvsJ�|dz}|jj}|}d}i}|dk�rHtjd|���r2	t	|��\}}d|dd�vr|f}n||dz|dzf}|D]�}d	|vrft
j�|��d
kr!t
j�||��}nAt
j�|d
|��}nt
j�	|��}t
j�
|��rnd}��nR#t$rE}	tdt|	������td|����|jr|	�Yd}	~	d
Sd}	~	wwxYw|��b||jjks3t
j�|��d
ksd|dd�vr�d	|vr�t
j�|��d
krt
j�	|��}t
j�t
j�|����d}|�d|d�d|�d|����n\|�d|d�d|����d}t
j�|��st
j�|��}|r|�d|z��t%|d||j|���}
d}	|�|
���}n)|
�d��|
���}n?#t$r2}	tdt|	������|jr|	�Yd}	~	nd}	~	wwxYw|std|z��d
S|
�|j��|
�d��|jdks't4���t8jkr|�|
|��|
���}i}
|D�]�}|ddkr	|d}n|ddkr|dd�}n�0	|ddkr|D]}||j _!��n7|ddkrR|
�"d��}|stG��x}|
d<|D]$}|�$tK|�����%n�|dd krR|
�"d!��}|stG��x}|
d!<|D]$}|�$tK|�����%n{|dd"kr|D]}|�&|���nT|dd#kr|D]}|�'|���n-|dd$kr!|jj(�|�)|�����#tT$r-}	td%|d�d&|�d'|�d(|	����Yd}	~	d
Sd}	~	wwxYwn;|�d|d�d)tW|������|tK|��gi}
|
�,��D]h\}}
|dz}t[|d*|z|
��|
D]G}t]|j d+|�/��z��|�0�����H�id,S)-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-setr6�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�	Exceptionr3r �_verbose�splitext�isabs�abspathrr��read�
setBaseDir�readexplicit�applyAutoOptionsr��
getOptions�logSys�getEffectiveLevel�logging�DEBUGr��convertr��	prefRegexr�rxr�rtr�r�r�r��
ValueErrorr;r��setattrr��titler�)rZr��	regextyper)r��fltName�fltFiler��tryNames�er��ret�readercommands�regex_values�opt�optval�stors                 r,�	readRegexzFail2banRegex.readRegexEs���	�(�	(�	(�	(�	(�
�g�
�%��J��'��'��'�
�&��&����i�5�u�=�=���%�e�,�,�_�W�f��w�r�s�s�|�����h�h��7�W�,�g��.@�A�h��
�
��
�G�^�^�
�'�
�
�7�
#�
#�z�
1�
1��'�,�,�w��0�0����'�,�,�w�
�G�<�<��������)�)�w�	�����	 �	 �
��u��g�g��������V��Q����A�B�B�B��V�%�%�1�2�2�2��
��Q�x��E�E�E�E�E�����	����
���$�*�#�#�#�	�w���� � �J�.�.��7�2�3�3�<���C�w�$6�$6�
�w���� � �J�.�.��w���w�'�'�W��g���r�w�/�/��8�8�9�9�!�<�G��K�K�K�U�U�U�U�G�G�G�W�W�U�W�W�W�W�	�K�K�K�������8�:�:�:��G�
�7�=�=��!�!�(��w���w�'�'�W��8��K�K�,�v�5�7�7�7���"7��d�N_�ip�q�q�q�6�	
�3�	����;�;�=�=�S�S����t������� � �S���
����
�F�c�!�f�f�f�.�/�/�/��}��A�h����������������
�-��5�7�7�7��5�	���4�=�)�)�)�	���T����
�m�a���6�3�3�5�5�w�}�D�D����&�&�)�)�)��N�N�$�$�>��<��#�#�s�
�1�v�����!�f�V�V�	�Q��5����!�"�"�g�V�V�
���A��+����'�'�&� &�t�|���'�

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

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

�a�&�%�
%�
%�	
��	 �	(����F�#�#�#��������V�!�!�f�f�f�f�f�f�e�e�e�Q�Q�8�:�:�:��E�E�E�E�E�E���������A#�L�;�;�;�����x�����?�A�A�A��y��/�/�0�1�<�!-�!3�!3�!5�!5�=�=��i���w��5�
�4��u��l�+�+�+��=�=�u�'�G�	�\��I�O�O�%�%�%�'�'�',�'9�'9�';�';�=�=�=�=�=�
�sJ�CD�
E*�%:E%�%E*�)AL*�*
M&�4(M!�!M&�?EV�
W�!!W	�	Wc�R�d|_|j|���dS)NT)�_lineIgnoredr�r�)rZ�idx�ignoreRegexs   r,r�zFail2banRegex._onIgnoreRegex�s*���$����C��������r.Nc�(�|jj}|j���dkr
|dd�}t|��|j���k}dx}|_	|j�||��}g}g}|D]�}	|jjsb|	�t|��dk��|j	|	d}
|
�
��|
�|	��|	d�d��s|�|	����d}��|jjrd|dfS|jj
r�|jj
}|���r�|xjdz
c_|jr�t|j��|jkr-|j�|�����n7t|j��|jkr|j�d��n*#t($r}t+d|z��Yd}~d	Sd}~wwxYw|j���dk�rz|t-|��d�D�]a}
|
|jjv�rO	|jj�|jj�d
�|
������|jrX|jj�|jj�d
�|
ddd�������n#t<$rYnwxYw|jr^|js3|jj �d
�|
����n$|�|
d|
dz��|jxj!dz
c_!|jxj"dzc_"��c|rA|�|j�#����d�|��}|||p|jfS)
Nr
Frr6�nofailTr7�	ERROR: %s)NrNr=r	rU)$r��_Filter__lineBufferr�r8r"�processLiner�rnr�rwr�r�r�r�
hasMatchedr�rr�r��	getGroupsrr3rpr�r��pop�indexr>�	_debuggexr�r�_print_all_matchedr�r�r��
processedLine)rZr��date�
orgLineBuffer�
fullBuffer�
is_ignored�found�linesr�matchr)�prer�bufLines              r,�	testRegexzFail2banRegex.testRegex�s���,�2�-�	�\�����!�#�#� ����#�=��=�!�!�T�\�%=�%=�%?�%?�?�*�#(�(�*�t� ���<�#�#�D�$�/�/�5�
�5�	�3����u��:�>���\�\�#�c�(�(�1�*����
�_�U�1�X�
&�U�
�Y�Y�[�[�[�
�^�^�E������8�<�<��!�!���Z�Z�������Z�Z�
�j�n����d�?��
�l��	)�
�,�
 �C�
�~�~���)�	���A�����
�)�	�T�
�	 �	 �4�>�	1�	1��� � ������1�1�1�1�

�d� �
!�
!�T�^�
3�
3���!�!�%�(�(�(���	����	�;��?����
�-�-�-�-�-���������
�\�����!�#�#���J��� 0� 0�1�"�"�w��d�l�6�6�6��
��#�'�'���$�*�*�2�7�7�7�+;�+;�<�<�>�>�>�	
��!���2�6�6���3�9�9�	������1���	�	�	 �	 �!�!�!���
����
�d�����	
��-�
�^�-���%�,�,�R�W�W�W�-=�-=�>�>�>�>��|�|�G�A�J����+�,�,�,�	�����"���	�����!����
���<�<���*�*�,�,�-�-�-�
�)�)�E�
�
�4�	
�s�Z�4�4�#4�	5�5s3�(CH�>CH�
H*�
H%�%H*�5B.L$�$
L1�0L1c�������|jj��dvrd�}n>�dkrd�}n4�dkrd�}n*�dkrd�}n d	�vr�fd
�}nddlm�m�m�d
�������fd�}|S)zOPrepares output- and fetch-function corresponding given '--out' option (format))�id�fidc�:�|D]}t|d���dSr�)r3�r�rs  r,�_outz+Fail2banRegex._prepaireOutput.<locals>._outs,��
�����A�a�D�\�\�\�\��r.�ipc�n�|D]1}t|d�d|d�����2dS)Nr6rBr
�r3r�r?s  r,rAz+Fail2banRegex._prepaireOutput.<locals>._outsB��
�"�"���A�a�D�H�H�T�1�Q�4� � �!�!�!�!�"�"r.�msgc���|D]c}|d�d��D]E}t|t��sd�d�|D����}t	|���F�ddS)Nr6�matchesr=c3�K�|]}|V��dSr0rP�r�r@s  r,r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>�����.�.��1�.�.�.�.�.�.r.)r��
isinstancer r>r3r?s  r,rAz+Fail2banRegex._prepaireOutput.<locals>._outsy��
������d�h�h�y�!�!����
��3�
�
�!�
�7�7�.�.�a�.�.�.� � �q��Q�i�i�i�i���r.�rowc
��|D]V}td|d�d|d�dtd�|d���D�����d����WdS)N�[r
z,	r	c3�0K�|]\}}|dk�||fV��dS)rGNrP)r�r�r�s   r,r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>s6����/a�/a�$�!�Q�RS�W`�R`�R`��1��R`�R`�R`�R`�/a�/ar.r6z],)r3r�r�r?s  r,rAz+Fail2banRegex._prepaireOutput.<locals>._outsr��
�d�d���V��1����a��d�d�d�4�/a�/a�!�A�$�*�*�,�,�/a�/a�/a�+a�+a�+a�+a�b�c�c�c�c�d�dr.�<c�b��|D]*}t|d�������+dS)Nr6rD)rr@�ofmts  �r,rAz+Fail2banRegex._prepaireOutput.<locals>._outs;���
�����A�a�D�H�H�T�N�N������r.r	)�Actions�
CommandAction�	BanTicketc�:�|dvr|�dd��S|S)N)rE�z\x00)�replace)�tr�s  r,�_escOutz.Fail2banRegex._prepaireOutput.<locals>._escOut$s&������
�I�I�f�g�&�&�&��Hr.c�.����g}ddi�|D]���	�d�d�d���}��|��}��fd�}||d<�
��|��	��}�dr|��|f���zt|����|D]|\�}�d�d
��D][�t�t��sd�d��D�����|�d
����t����\�}dS)N�NLrr
r	r6)�time�datac����ds5t�d�dg����dkr|dSd�d<dS)Nr\r6rGr
�msg)r8r�)rZr@�wraps ��r,�_get_msgz=Fail2banRegex._prepaireOutput.<locals>._out.<locals>._get_msg0sK���
�$�Z��C��!�����B� 7� 7�8�8�A�=�=��9�o���t�D�z��mr.rE)�	escapeValrGr=c3�K�|]}|V��dSr0rPrIs  r,r�z>Fail2banRegex._prepaireOutput.<locals>._out.<locals>.<genexpr>ArJr.r`)	�
ActionInfo�replaceDynamicTagsr�r3r�rKr r>rX)
r�rows�ticket�aInforbr�r@rarSrUrTrZrRs
      @@�����r,rAz+Fail2banRegex._prepaireOutput.<locals>._out)sZ�����
�D���8�D�
�����i��!��1�Q�4�a��d�3�3�3�V�
�
�
��
'�
'�U��������U�5�\�	�	)�	)�$���	)�	I�	I�Q��T�
��
�k�k�1�a�&������A�Y�Y�Y�Y������1���d�h�h�y�!�!����
��3�
�
�!�
�7�7�.�.�a�.�.�.� � �q�
�)�)�M�1�
%�
%�a��Q�i�i�i�i�	��r.)r�rn�server.actionsrSrTrU)rZrArSrUrTrZrRs  @@@@@r,�_prepaireOutputzFail2banRegex._prepaireOutputs�������	
���$�	�]��������t�|�|�"�"�"�"��u�}�}������u�}�}�d�d�d�d��$���������B�A�A�A�A�A�A�A�A�A�
�
�
�
���������6
�+r.c�^�tj��}|jjr|���}|D�]Z}t	|t
��rB|�|d|d��\}}}d�|d��}nF|�d��}|�	d��s|s��|�|��\}}}|jjr!t|��dkr
|s||����|r�|jxjdz
c_|j
sd|js|jj|jdzkrE|jj�|��|jr|jj�|��n�t|��dkrb|jxjdz
c_|jrE|jj�|��|jr|jj�|��n�|jxjdz
c_|jsd|js|jj|jdzkrE|jj�|��|jr|jj�|��|jxjdz
c_��\tj��|z
|_dS)Nrr
r=z
�#)r]r�rnrkrK�tupler:r>�rstrip�
startswithr8r�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�)rZ�
test_lines�t0rnr��line_datetimestrippedrr4s        r,�processzFail2banRegex.processGs����y�{�{�"�	�Z�^� �	
�	�	�	�	�3��! �! �d���u���B�-1�^�^�D��G�T�!�W�-M�-M�*��3�
�
�7�7�4��7���D�D��;�;�v���D����s����4��
�-1�^�^�D�-A�-A�*��3�
�
�j�n�
�
�3�x�x�!�|�|�J�|���C������P������!����!�Q�t�'>�Q�$�BR�BZ�^b�^l�op�^p�Bp�Bp�	��#�*�*�4�0�0�0���Q�
��2�9�9�:O�P�P�P���C���1��������!�����Q�	��#�*�*�4�0�0�0���Q�
��2�9�9�:O�P�P�P������q� ���� �P�d�&<�P��@P�@W�[_�[i�lm�[m�@m�@m�	��"�)�)�$�/�/�/���P�
��1�8�8�9N�O�O�O�����a������y�{�{�R�'�$���r.c����	�
��j}|j|j|j|jzz
ksJ�||}||dz}�j���dk�
|�r
|����d�}�jr�|dks|dkr�j	}n�j
}||dz}|�jkst�d|z��rCgg}||fD]�	�	fd�|D��}��
�fd	�|D��}td
�|D��|��dStd|||fz��dS|�jkst�d|z��rtd�|D��|��dStd|||fz��dSdS)
N�_linesr
z	 line(s):r�r��_lines_timeextracted�_print_all_c�&��g|]
}�D]}||gz��	�SrPrP)r��x�y�args   �r,�
<listcomp>z,Fail2banRegex.printLines.<locals>.<listcomp>�s,���1�1�1�!�C�1�1�q�a�1�#�g�1�1�1�1r.c	���g|]y}|ddz|d���zdzt��|d��|d�����jj��z��zS)rz | r
z |  )r�r-r�r�r�)r��ar*rZs  ��r,r�z,Fail2banRegex.printLines.<locals>.<listcomp>�s����
3�
3�
3�)*��A�$�%�-�!�A�$�+�+�-�-�
-��
6��$�"�"�1�Q�4�(�(�!�A�$�*;�*;�*=�*=��$�*�#�%�%�%�
3�
3�
3r.c�6�g|]}|�����SrP�ro�r�r~s  r,r�z,Fail2banRegex.printLines.<locals>.<listcomp>�s ��(�(�(��!�(�(�*�*�(�(�(r.z?%s too many to print.  Use --print-all-%s to print all %d linesc�6�g|]}|�����SrPr�r�s  r,r�z,Fail2banRegex.printLines.<locals>.<listcomp>�s ��'�'�'�������'�'�'r.)r�r�r�r�r�r�r��
capitalizer.rwr�r�r�r@r3)rZ�ltype�lstatsr6r:r?�	regexlist�ans�br�r*s`        @@r,�
printLineszFail2banRegex.printLinesps�������&�	��&�-�6�>�F�N�+J�K�	K�	K�	K�	K�
��-�%��U�X�
��!��l�&�&�(�(�1�,�)�
�:�"�-�-�/�/�/�/�1�6�
�n�:�����E�Y�.�.���Y�Y��"�Y��u�-�-�.�A��t�~�����}�u�/D�!E�!E���4�S��I��2�2��1�1�1�1�s�1�1�1�c�c�
3�
3�
3�
3�
3�.1�
3�
3�
3�Q��(�(�a�(�(�(�&�1�1�1�1�1�� �#)�5�%�"8�9�;�;�;�;�;�
�����'�$�
��0E�"F�"F���'�'�Q�'�'�'��0�0�0�0�0�
�
�"(�%��!7�
8�:�:�:�:�:�-:�:r.c����jjrdStd��td��td���fd�}�jjrr�jj}|���g}�jr"�jD]}|�d|�����tdd�j	fz��t|��|d	�j��}|d
�j��}�jj
��td��g}�jj
jD]�}�js|jr�|�d|j|jfz���jr`|�d
|j|jjt)|dd��fz��|�dt)|dd��������t|d��td�jz���j�td�jz��td���jr��d���js��d���js��d��dS)NTr=�Resultsz=======c
�\��dg}}t|��D]�\}}|���}||z
}|s�
jr0|�d|dz||���fz���
jr�t|�����rs|���D]^}tj|d��}tj	d|��}	|�d|d�d|	�|drd	pd
�����_��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�r8r�r]�	localtime�strftimer3r@)r�failregexes�totalrn�cntrzr7rB�	timeTuple�
timeStringrZs          �r,�print_failregexesz3Fail2banRegex.printStats.<locals>.print_failregexes�s_����2�#�5�"�;�/�/�7�7�~�s�I���� � �E�	�U�N�E�
�K���K��Z�Z��#�a�%��	�0F�0F�0H�0H�!I�I�J�J�J��}�7��Y�0�0�2�2�3�3�7��"�"�$�$�7�7���.��A��'�'�i��=�!7��C�C�j�	�j�j�j�
�1�����
�
�2��.�.�4�"�4�6�7�7�7�7��
��u�e�n�,�.�.�.��s�8�9�9�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�rnr3r�r�getRegexrr�r�r�r@rwr��dateDetector�	templates�hits�name�
_verbose_date�weight�templater�r�r�r/r�rqrs)rZr�r8rn�grpr�r�r�s`       r,�
printStatszFail2banRegex.printStats�s����	�Z�^� �D�D��"�,�,�,��)�����)���������0
�\���	
��	�3�

�,�,�.�.�	�3�
�m�#��!�#�#���Z�Z�Z�C�C�!�"�"�"�"�	��{�D�,?�@�@�B�B�B��s�����
�K���
9�
9�%���
�t�'8�9�9�!�
�\��*�	�"�$�$�$�	�3��<�,�6�J�J�x��}�J��
�J��Z�Z�	�X�]�H�M�:�:�;�;�;���J�	�j�j�9����)�0��x��B�'�'�=*�*�+�+�+�
�j�j�j���'�2�(F�(F�(F�H�I�I�I���s�-�.�.�.��-�$�*�
*�-�-�-�	��#�	�$�t�'9�9�<�<�<��"�,�,�,�	����?�?�9����	
�	���?�?�9����	
�	���?�?�8����	
�r.c	�:�|dd�\}}|�d��rd|_	|�|d��sdSt|��dkr|�|dd��sdSn*#t$r}td|z��Yd}~dSd}~wwxYwtj�|��rv	t||j
d	�
��}|�d|z��|�d|j
z���nN#t$r}t|��Yd}~dSd}~wwxYw|�d���rtstd
��dS|�d��|�d|j
z��t|��\}}tdi|��}|�|j
��|���}	|j}
|�d��|
r@|�|
��|�dd�|
��z��t)||	��}�n|j���dkrAd|vr=|�dt/|�dd����z��|g}n�|�d��}|�dt|��z��t5|��D]N\}}|dkr|�d��n-|�d|dzd�dt/|�������O|�d��|�d��|�|��|���sdSd	S)Nr	zsystemd-journal�systemdr�Fr6r�r'T)�doOpenzUse         log file : %szUse         encoding : %sz,Error: systemd library not found. Exiting...zUse         systemd journalzUse    journal match : %s� r
rUzUse      single line : %sz\nz Use      multi line : %s line(s)�z| ...z| z>2.2r�z`-r=r0)rpr�r r8rr3r�r�rrr��IOErrorr
r�setLogEncoding�getJournalReaderr�r��addJournalMatchr>rHr�r�r;rXr�r�rxr�)
rZr+�cmd_log�	cmd_regexrru�backend�beArgsrErFr��ir:s
             r,�startzFail2banRegex.start�s����B�Q�B�x��'�9����)�*�*���4�=��
�.�.��F�
+�
+���5�	�$�i�i�1�n�n�T�^�^�D��G�X�>�>�n��5���	����	�;��?����
�%�%�%�%�%����������W�^�^�G���%���w���t�D�D�D�J��K�K�,�w�6�8�8�8��K�K�,�t�~�=�?�?�?�?��
����
�A�K�K�K��5�5�5�5�5������������+�,�,��
��
�:�<�<�<��5��;�;�-�/�/�/��;�;�+�d�n�<�>�>�>�#�G�,�,�?�7�F�	�	&�	&�v�	&�	&�3����d�n�%�%�%��#�#�%�%�9��$�<����t�����H�����%�%�%��K�K�,�s�x�x��/E�/E�E�G�G�G�!�#�y�1�1�:�:��l��� � �A�%�%�$�g�*=�*=��K�K�,�x�����e�8T�8T�/U�/U�U�W�W�W���J�J����t�$�$�J��K�K�3�c�*�o�o�E�G�G�G��*�%�%�7�7���1�	�Q���
�k�k�7����e�e�	�[�[�[�1�Q�3�3�3�3������4�6�6�6�6��K�K������+�+�r�����,�,�z����	
���	�	��
�%�	
�s6�A5�/A5�5
B�?B�B�?AD
�
D1�D,�,D1r0)r\r]r^r{r3r�r�r�r�r�r r�r:rkrxr�r�r�rPr.r,r�r��s	������(�(�(�T&�&�&�/�/�/�4�4�4�K�K�K����6�6�6�}�}�}�~���>6�>6�>6�>6�@<�<�<�~'(�'(�'(�R:�:�:�>F�F�F�P>�>�>�>�>r.r�c��dt_t��}|j|�\}}g}|jr|jr|�d��|jr|jr|�d��t|��dvr|�d��|r`|�
��tj�
dd�|��zdz��tjd��|js<t#d��t#d	��t#d
��t#d��t%|j��|_t(�|j��tjtj��}|jdkrdnd
}|jrt4}|jrdpd|z}ntj}|�|t=|j|������t(�|��	tA|��}n�#tB$r{}|js't(�"��tj#krt(�$|d���nt#d|z��tjd��Yd}~nd}~wwxYw|�%|��stjd��dSdS)NTzGERROR: --print-no-missed and --print-all-missed are mutually exclusive.zIERROR: --print-no-ignored and --print-all-ignored are mutually exclusive.)r	r6z&ERROR: provide both <LOG> and <REGEX>.rU�r=z
Running testsz
=============r
z%(levelname)-1.1s: %(message)sz %(message)sz %(tb)sz %(tbc)s)�exc_infor')&r�
exitOnIOErrorrr�
parse_args�print_no_missed�print_all_missedr��print_no_ignored�print_all_ignoredr8�
print_helprK�stderr�writer>rLrnr3rrfr�setLevel�
StreamHandler�stdoutrk�
log_tracebackr�full_traceback�	Formatter�setFormatterr�
addHandlerr�rr
rrgr�)	r+�parserr��errorsr��fmtr��
fail2banRegexrs	         r,�exec_command_liner�s������
�
�
��!��!�4�(��$��
����[�T�2�[��-�-�Y�Z�Z�Z���]�d�4�]��-�-�[�\�\�\�	�D�	�	�V����-�-�8�9�9�9�
���������*���4�$�)�)�F�+�+�+�d�2�3�3�3��(�3�-�-�-�����"�,�,�,��/�����/�����"�,�,�,��t�~�.�.�������� � � ��
��
�
+�
+��+/�<�1�+<�+<�'�'�.���� �$�)�	
�	�	*��	8�j�C�?�#�#���)����Y�Y�1�$�,��D�D�E�E�F�F�F����6�������%�%�-�-������	�\��V�-�-�/�/���>�>�	�?�?�1�t�?�$�$�$�$�	�;��?�����(�3�-�-�-�-�-�-�-�-���������	���D�!�!���(�3�-�-�-�-�-��s�H%�%
J*�/A1J%�%J*)Fr)r4r0):rW�
__author__rY�__license__�getoptrrr�r�rKr]�urllib.requestr%�urllib.parse�urllib.error�optparserr�configparserrrr�server.filtersystemdr
�ImportErrorrr�filterreaderr�
server.filterrrr�server.failregexrr�helpersrrrrrrrr-r3r;r@rHrMrVrSrr�objectrtr�r�r�rPr.r,�<module>r�s��&��#�
�]�
���
�
�
�
�����	�	�	�	�	�	�	�	�����
�
�
�
�����1�1�1�1�1�1�1�1�1�1�1�1�)�)�)�)�)�)�)�)�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q��1�1�1�1�1�1�1��������������+�*�*�*�*�*�*�*�&�&�&�&�&�&�9�9�9�9�9�9�9�9�9�9�4�4�4�4�4�4�4�4�����������������
��:�	�	��D�D�D�D�
�
�
�
�
�
�
�0�0�0�0�&�&�&�
�
�
�	I�H�������L����2<
�<
�<
�~���������6:�:�:�:�:��:�:�:�.`�`�`�`�`�F�`�`�`�F5�5�5�5�5s�A�A�A