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/tests/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/fail2ban/tests/__pycache__/fail2banclienttestcase.cpython-311.pyc
�

�Bd������dZdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZm
Z
mZmZmZddlmZddlmZdd	lmZmZmZdd
lmZddlmZmZmZddl m!Z!mZ"dd
l#m$Z$ddl%m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+m,Z-m.Z.m/Z/m0Z0m1Z1m2Z3m4Z4m5Z5ddl6m7Z7e7e8��Z,dZ9dZ:ee!j;����Z<e	j=�>e	j=j?��Z?e	j=�>e	j=j@��Z@e?dz
e_?e,xe_,xe_,e_,e%jAZBe%jCZDd�ZEeExe_Fxe_Fxe_Fe$_Fd�ZGe%jHZHd�ZIe@fd�ZJGd�dejK��ZKGd�dejK��ZLeKZMeLZNgaOd�ZPePe_Qdxe_Re_Re+jSZTd �ZUd!�ZV			d2d&�ZWd'�ZXd(�ZYd)�ZZd*�Z[ifd+�Z\Gd,�d-e+��Z]Gd.�d/e]��Z^Gd0�d1e]��Z_dS)3zSerg BresterzICopyright (c) 2014- Serg G. Brester (sebres), 2008- Fail2Ban Contributors�GPL�N)�join�isdir�isfile�exists�dirname��wraps)�Thread�)�fail2banclient�fail2banserver�fail2bancmdline)�Fail2banCmdLine)�exec_command_line�CSocket�
VisualWait)�Fail2banServerr)�protocol)�server)�MyTime)�Utils�)	�LogCaptureTestCase�logSys�with_tmpdir�shutil�logging�STOCK�
CONFIG_DIR�TEST_NOW�tearDownMyTime)�	getLoggerzfail2ban-clientzfail2ban-serverc�F�t�|d��dS�Nr)r�info��argss �G/usr/lib/python3/dist-packages/fail2ban/tests/fail2banclienttestcase.py�_test_outputr*Js�����T�!�W������c��t�d|��tjtj��|dzz��dS)Nz===>>> time shift + %s min�<)r�debugr�setTime�time)�shifts r)�_time_shiftr2Qs<�����*�E�2�2�2�����
�
��b��(�)�)�)�)�)r+c��tj�Mtj�t��tj�tdz��dSdS)z$Helper to wait observer becomes idleN�)�	Observers�Main�
wait_empty�MID_WAITTIME�	wait_idle�r+r)�_observer_wait_idler;YsI��
�N���.���L�)�)�)��.���<�!�+�,�,�,�,�,��r+c�z����tj�+tjj����fd�}|tj_dSdS)zOHelper to block observer before increase bantime until some condition gets trueNc�����tj_t�d��tj����t�d���|i|��dS)Nz4  [Observer::banFound] *** observer blocked for testz.  [Observer::banFound] +++ observer runs again)r5r6�banFoundrr.r�wait_for)r(�kwargs�
_obs_banFound�cond�timeouts  ���r)�	_banFoundz0_observer_wait_before_incrban.<locals>._banFoundds`���*�9�>��	�<�<�F�G�G�G��>�$�� � � �	�<�<�@�A�A�A��=�$�!�&�!�!�!�!�!r+)r5r6r>)rBrCrDrAs`` @r)�_observer_wait_before_incrbanrE_sT�����
�N���.�)�-�"�"�"�"�"�"�"�&�)�.�����r+c��eZdZdZdS)�
ExitExceptionzException upon a normal exitN��__name__�
__module__�__qualname__�__doc__r:r+r)rGrGt�������#�#��r+rGc��eZdZdZdS)�FailExitExceptionzException upon abnormal exitNrHr:r+r)rOrOyrMr+rOc�b�tt��rt�d��SdS)Nr�exit)�len�INTERACT�popr's r)�_test_input_commandrU�s%����M�M��	���a����	�r+Fc��t||��}|�d�|��|rdndz��|���dS)N�
�)�open�writer�close)�fn�mode�lines�fs    r)�_write_filer`�sL��	�"�d�^�^��������5�	�	�5�0�4�4�b�	1�2�2�2��������r+c��d}	t|��}|���|�|���SS#|�|���wwxYw�N)rY�readr[)r\r_s  r)�
_read_filerd�sW��	��
�
�2�h�h�!�	
������]��7�7�9�9�9�9���Q�]��7�7�9�9�9�9����s	�">�A�	/dev/null�:memory:r:�rXc��t|d��}|dkrt|d��}d}	|�r:t�r2d�}
tjt||
���|�Jdt|��z���|�d}t
jd	��}tj	t|d
��d���D]=}|�
d
��}|�|��rd}t|���>t
jd��}tj	t|d��d���D]=}|�
d
��}|�|��rd}t|���>|rdnd}	nytj|��tt|d
��dddd|�dd��zddt|d��zdt|d��zdd|zdd d�
�
|	r'tt||	��dgd!dd"d#|zdf|z�R�|rtt|d$��dg|�R�t"jjt(jkr~t-t|d
����t-t|d����|rt-t|d$����|	r#|	dkrt-t||	����|r_trX|D]U}
tjtj�tt|
����t||
�����V|r|D]}
t|
d%|izd���d&\}}t"jjt(jkrKt7t"jj��}t"jjd'krd(d)t"jjzzf}|d*|fz}d+|d,t|d��d-t|d��d.|f|zd/dd0t7t:j��fzS)1N�config�autozf2b-db.sqlite3�	jail.confc� ���fd�|D��S)z?Filters list of 'files' to contain only directories (under dir)c�N��g|]!}tt�|�����|��"Sr:)r�pjoin)�.0r_�dirs  �r)�
<listcomp>z2_start_params.<locals>.ig_dirs.<locals>.<listcomp>�s.���
4�
4�
4��u�U�3��]�]�3�3�
4�1�
4�
4�
4r+r:)rp�filess` r)�ig_dirsz_start_params.<locals>.ig_dirs�s���
4�
4�
4�
4�e�
4�
4�
4�4r+)�ignorez?We are about to overload use_stock_cfg from the one provided %s)�action.dzfilter.dz^dbfile\s*=z
fail2ban.confT)�inplacerWzdbfile = :memory:z^backend\s*=�backend = pollingz
jail.localrX�w�[Definition]zloglevel = INFOzlogtarget = �%z%%zsyslogsocket = autoz	socket = �f2b.sockz
pidfile = �f2b.pidz	dbfile = zdbmaxmatches = 100zdbpurgeage = 1d�
[INCLUDES]�	[DEFAULT]ztmp = zfail2ban.local�tmp)r:�INFOr�-�vz
--loglevel�-c�-sz-p�--logtargetz--syslogsocketz	--timeout)rnrr�copytree�STOCK_CONF_DIR�repr�re�compile�	fileinput�input�rstrip�match�print�os�mkdirr`�replace�unittest�F2B�	log_levelr�DEBUG�	_out_file�symlink�path�abspathr��str�	verbosityr�MAX_WAITTIME)r�	use_stock�
use_stock_cfg�	logtarget�db�	f2b_local�jails�create_before_start�cfg�j_confrs�r�line�n�vvv�llevs                r)�
_start_paramsr��sZ��
�S�(�����&�L�L��S�"�#�#�"�
��
�(�%�(�5�5�5�	�/�.�#�g�6�6�6�6�	�	�	�D�t�M�GZ�GZ�Z�
�	�	���,D�M��j�� � �!��o�e�C��9�9�4�H�H�H���d�
�+�+�d�
�
�4��g�g�d�m�m���D���;�;�;�;��j��!�!�!��o�e�C��5�5�t�D�D�D���d�
�+�+�d�
�
�4��g�g�d�m�m���D���;�;�;�;� �(�<�<�b�&�&��(�3�-�-�-�
�e�C��)�)�3����I�%�%�c�4�0�0�0����s�J�'�'�'��%��Y�'�'�'�������������
�e�C�� � �#���"��(�S�.�"���������=�
�e�C�)�*�*�C�<�)�<�<�<�<��L��W�]�*�*��E�#��'�'�(�(�(��E�#�{�#�#�$�$�$��+��U�3�(�
)�
)�*�*�*��!��+�%�%��U�3��
�
� � � ��H�e�H��H�H�a��:�b�g�o�o�e�N�A�6�6�7�7��s�A���G�G�G�G��&��&�&�a��q�E�3�<���%�%�%�%�
���d��L��W�\�)�)�	�X�\�
#�	$�	$�$�
�\��a���

��H�L�*�*�
*�	,�3��|�T�"�"����T�5��j�)�)�4��s�I�1F�1F���	�#�	$�'7��
�s�?�/�0�0�'�	�r+c�j�	||�d��dzdkS#t$rYdSwxYw)Nr�r�	INHERITEDF)�index�
ValueError��startparamss r)�_inherited_logr��sL���	�[�&�&�}�5�5�a�7�	8�K�	G�G������	������s�!$�
2�2c��d}	t|��}tjd|�����}t	|��S#t
$r$}t�|��Yd}~nd}~wwxYw|S)Nz\S+)rdr�r��group�int�	Exceptionrr.)�pidfile�pid�es   r)�_get_pid_from_filer��s~������7���#�
������#�#�%�%�#�	�S���/�������,�,�q�/�/�/�/�/�/�/�/����������s�AA	�	
A7�A2�2A7c���t�d|t|��f��t|��r1|}t|d��}t	|��st|d��}t
jjtj	krKt|d��}t	|��rt|��nt�dd|��t	|��st�d|��dSt�d	|��t|�����d
S	t�d����dks�tj��krtd
��d|�d����t!j���sdStj�t&j��t!j�fd�d��stj�t&j��t�d��t!j���S#t.$r$}t�|��Yd}~nd}~wwxYwdS)Nzcleanup: %rr|zfail2ban.pid�f2b.logr4z
no logfile %rzcleanup: no pidfile for %rTzcleanup pidfile: %rFzcleanup pid: %rrzpid z of z is invalidc�.��tj���Srb)r�
pid_exists)r�s�r)�<lambda>z_kill_srv.<locals>.<lambda>+s���E�$4�S�$9�$9� 9�r+r�cleanup: kill ready)rr.rrnrr�r�r�rr�r��logr�r��getpidr�rr��kill�signal�SIGTERMr?�SIGKILLr��	exception)r��piddir�logfiler�r�s    @r)�	_kill_srvr�	s)������m�g�u�W�~�~�6�7�7�7�	�'�N�N�+��&��&�)�$�$�'�	����+�
�6�>�
*�
*�7�
�L��W�]�*�*��&�)�$�$�'��G�_�_�+��W�����	�:�:�a��'�*�*�*��w�����,�,�+�V�4�4�4�	
�����#�W�-�-�-��'�"�"���K�	����,�,� �#�&�&�&��A�X�X���	���#�#�	�����g�g�g�>�	?�	?�?�	�	�#�	�	��
�$��'�#�v�~����	��9�9�9�9�1�	=�	=� ��7�3�������,�,�$�%�%�%�
�
�c�
"�
"�	"�"���������1������������������s �1A"H�BH�
I�$I�Ic�<��t����fd���}|S)z�Helper to decorate tests which receive in the last argument tmpdir to pass to kill_srv

	To be used in tandem with @with_tmpdir
	c�n��|d}	�|g|�R�t|��S#t|��wxYw)N���)r�)�selfr(r�r_s   �r)�wrapperzwith_kill_srv.<locals>.wrapper:sG�����H�'��
�!�D�.�4�.�.�.��W������9�W�������s�#�4r	)r_r�s` r)�
with_kill_srvr�5s5���
��(�(������(��	�r+c����fd�}|S)z}Helper to decorate tests uses foreground server (as thread), started directly in test-cases

	To be used only in subclasses
	c�Z���tt�����fd�����}|S)Nc������	�d}t���	t�fddi����	td�j��	�f���}d|_|���ttff���	�fd�	}|�_tj
�fd�t������
dd�������d�	��	��tjd
�������
���	g|�Ri|��|rftjd������������
dd��r|���t'��S#t($rT}t+d
|z������}|r&t+d|z�������d}~wwxYw#|rftjd������������
dd��r|���t'��wxYw)Nr�r��_TestCaseWorker��name�targetr(Tc���t����dd��sJtj�t�d����st
j�fd�t����dd��s{��	|�d��t
j�fd�t������dd������dddt�	��d
��_
dS)N�endr|c�4����dd��duS�Nr���get��phases�r)r�zywith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapper.<locals>._stopAndWaitForServerEnd.<locals>.<lambda>_����U�Y�Y�u�d�3�3�4�?�r+�stopc�4����dd��duSr�r�r�s�r)r�zywith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapper.<locals>._stopAndWaitForServerEnd.<locals>.<lambda>dr�r+�Shutdown successfulzExiting Fail2banT��all�waitc��dSrbr:)r(r@s  r)r�zywith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapper.<locals>._stopAndWaitForServerEnd.<locals>.<lambda>hs��D�r+)r"r�r�r�rrnrr?r8�execCmdr��
assertTrue�assertLogged�stopAndWaitForServerEnd)�coder�r�r�rs ����r)�_stopAndWaitForServerEndzgwith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapper.<locals>._stopAndWaitForServerEnd[s���������I�I�e�T�"�"�O�2�7�>�>�%��Y�:O�:O�+P�+P�O��n�?�?�?�?��N�N�N��I�I�e�T�"�"�`�
�l�l�4��f�-�-�-��n�?�?�?�?��N�N�N�
�o�o�e�i�i��t�,�,�-�-�-�
���-�/A�t�R^��_�_�_�$@�$@�T�!�!�!r+c�4����dd��duS)N�startr�r�s�r)r�zWwith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapper.<locals>.<lambda>ks���5�9�9�W�d�3�3�4�?�r+r�)r�r�z=== within server: begin ===z=== within server: end.  ===r�z=== Catch an exception: %sz#=== Error of server, log: ===
%s===)�dictr�r�_testStartForeground�daemonr��SUCCESS�FAILEDr�rr?r�r�r��
_wait_for_srv�	DefLogSysr&�pruneLogrr"r�r��getLog)r�rr(r@�thr�r�r�r�r�r_�
startextras``      @@��r)r�zEwith_foreground_server_thread.<locals>._deco_wrapper.<locals>.wrapperIs��������	
�2��6�6�5�6���I�I�{�I�j�I�I�K�	�
��%���U�
#�
�
�
�B�
�B�I��H�H�J�J�J�(/��&7�
A�
A�
A�
A�
A�
A�
A�
A�
A�$<�D� �	�N�?�?�?�?��N�N�N��O�O�E�I�I�g�t�,�,�-�-�-����s�D�k���G�G�G�
�N�1�2�2�2��M�M�O�O�O��1�T�3��5�d�5�5�5�f�5�5�
���^�2�3�3�3�	�]�]�_�_�_�	�!�!�#�#�#�	�	�	�%������g�g�i�i�i�������#�
�
�
�	�'�!�+�-�-�-�
�+�+�-�-�C�
��
�2�S�8�:�:�:�	�]�]�_�_�_�	�����

�����
���^�2�3�3�3�	�]�]�_�_�_�	�!�!�#�#�#�	�	�	�%������g�g�i�i�i��������s&�C5F�
G!�
AG�G!�!G$�$A8I)rr
)r_r�r�s` �r)�
_deco_wrapperz4with_foreground_server_thread.<locals>._deco_wrapperHsD�������8�8�9�9�9�9�9��8��;�9�t
�.r+r:)r�r�s` r)�with_foreground_server_threadr�Cs%���
=�=�=�=�=�|	�r+c��eZdZejZd�Zd�Zd�Ze	dd���Z
dd�Zd	�Zd
�Z
d�Zedd
i���d���Zeed�����ZdS)�Fail2banClientServerBasec��dSrbr:)r�r(r@s   r)�_setLogLevelz%Fail2banClientServerBase._setLogLevel�s���$r+c��tj|��dt_tjt_t|j��t_
dS)zCall before every test case.r�N)r�setUpr�
DEF_LOGTARGETr��level�DEF_LOGLEVEL�staticmethod�
_test_exitr�_exit�r�s r)rzFail2banClientServerBase.setUp�s=����4� � � �$�&��!��&��&�t��7�7�/���r+c��|jt_tt_tt_tj	|��t��dS)zCall after every test case.N)�
_orig_exitrr	�SRV_DEF_LOGTARGETrr�SRV_DEF_LOGLEVELrr�tearDownr"r
s r)rz!Fail2banClientServerBase.tearDown�s?���/�/��*�&��(�&����d�#�#�#������r+rc�F�|dkrt���t���r%)rGrO)r�s r)rz#Fail2banClientServerBase._test_exit�s!��	�Q�Y�Y�	����	�	�	�r+TNc������si�	t|d���tj��fd�t��}|r��d��rtd|�����|r4tj�fd�t��}|std��d|�����dSdS#t
|��r8td����z����	��t|d	��}t|��rt|��n*t
|��st�
d
|���xYw)Nr{c�L����d��pt���Sr�)r�r)r��socks��r)r�z8Fail2banClientServerBase._wait_for_srv.<locals>.<lambda>�s����	�	�%� 0� 0� @�F�4�L�L�r+r�z7Unexpected: Socket file does not exists.
Start failed: c�0��d����vS)N�Server ready)r�r
s�r)r�z8Fail2banClientServerBase._wait_for_srv.<locals>.<lambda>�s����4�;�;�=�=�!@�r+z.Unexpected: Server ready was not found, phase z.
Start failed: z,=== Error by wait fot server, log: ===
%s===r�z*No log file %s to examine details of error)rnrr?r�r�r�r�r�r�r�rr�rr.)r�r�readyr�r��retr�rs`   `  @r)r�z&Fail2banClientServerBase._wait_for_srv�su�����	����	�
��Z�
 �
 �4�	��@�@�@�@�@�,�	O�	O�3�

�����5�!�!��
�)���������
�.�@�@�@�@�,�
O�
O�C����9�	���������	�����
		��[�!�!��	�:�T�[�[�]�]�J�L�L�L��M�M�O�O�O�	�s�I�	�	�3��S�k�k�D�
�c�N�N�N�N��;�'�'�D�
�L�L�=�s�C�C�C����s
�B
B�B#D=c�p�|�||jd|jdd�|z|z��dS)Nrr)�assertRaisesr)r��exitTyper�r(s    r)r�z Fail2banClientServerBase.execCmd�sI�����H�d�4�Q�7���1�2�2���,�t�3�6�6�6�6�6r+c���||�d��dz}t|��}	|�|��|���S#|���wxYw)Nr�r)r�r�sendr[)r�r�r(r�ss     r)�
execCmdDirectz&Fail2banClientServerBase.execCmdDirect�s]��	�[�&�&�t�,�,�Q�.�	/�$�
�d�m�m�!�
�
�&�&��,�,��7�7�9�9�9�9��1�7�7�9�9�9�9���s�A�A.c��t�d��d|d<	|�td|zd��d|d<d|d<t�d��dS#d|d<d|d<t�d��wxYw)Nzstart of test workerTr��z-fFr�zend of test worker)rr.r�r�)r�rr�r�s    r)r�z-Fail2banClientServerBase._testStartForeground�s����,�,�%�&�&�&��%��.�&��<�<���;�.��8�8�8��5��>��5��<�	�<�<�$�%�%�%�%�%���5��>��5��<�	�<�<�$�%�%�%�%���s�A&�&&Br�)z[Thread]zstacksize = 128�r�c�<�|���|�t|dd��|�d��|�t|d��|�t|d��|�t|dd��dS)Nr��threadz{'stacksize': 128}�ping�~~unknown~cmd~failed~~�echo�	TEST-ECHO)r�r�r�r�r��r�rr�s   r)�testStartForegroundz,Fail2banClientServerBase.testStartForeground�s����-�-�/�/�/��,�,�w��U�H�5�5�5����(�)�)�)��,�,�w��V�,�,�,��,�,�v�{�$<�=�=�=��,�,�w��V�[�9�9�9�9�9r+c�z��tjstjd���t	|d��}tj|��}|j���}|�d��|���t||d���}ddi}�fd�}td	|||f�
��}|���	��td|zd��d
|d<|���n#d
|d<|���wxYw��ddd���dS)NzSkip test because no databaseztmp.dbz#UPDATE fail2banDb SET version = 555r�)r�r�r�Tc�t���tj�fd�t��s��|d��dSdS)Nc����dS)Nr�r:r�s�r)r�z[Fail2banClientServerBase.testStartFailsInForeground.<locals>._stopTimeout.<locals>.<lambda>�s���U�6�]�!2�r+r�)rr?r�r)r�r�r�s `�r)�_stopTimeoutzIFail2banClientServerBase.testStartFailsInForeground.<locals>._stopTimeout�sH����
�.�2�2�2�2�L�
A�
A�,����{�F�+�+�+�+�+�,�,r+r�r�r r�Fz/Attempt to travel to future version of database�Exit with code 255�r�)r�
Fail2BanDbr��SkipTestrn�_db�cursor�
executescriptr[r�rr�r�r�rr�)	r�r�dbnamer��curr�r�r-r�s	`        r)�testStartFailsInForegroundz3Fail2banClientServerBase.testStartFailsInForeground�s`���
�	�<�	�	�:�	;�	;�;���X���&�
��� � �"�
��
�
���#����9�:�:�:��)�)�+�+�+��c�f��D�D�D�+��4�.�%�,�,�,�,�,���
�	�e�����"�
�(�(�*�*�*�
��<�<���+�-�w�7�7�7��5��=��7�7�9�9�9�9���5��=��7�7�9�9�9�9�������E��T��#�#�#�#�#s�D�D )r)TNN)rIrJrKrr	rrrrrrr�r�rr�r�r)rr�r7r:r+r)r�r��s�������#�����8�8�8���������,��	�	�	�	�<6�6�6�
�
�
�
&�
&�
&� ��K�9�,����
:�:���
:���#�#��-��+�#�#�#r+r�c���eZdZeefZd�Zd�Zed���Z	ee
d�����Zee
d�����Zee
d�����Z
ed���Zd�Zd	S)
�Fail2banClientTestc���|�tttt������|�tttt
������dSrb)r�rrn�BIN�CLIENT�SERVERr
s r)�testConsistencyz"Fail2banClientTest.testConsistencysP���/�/�&��s�F�+�+�,�,�-�-�-��/�/�&��s�F�+�+�,�,�-�-�-�-�-r+c��|�tdd��|�dtz��|�d��|���|�tdd��|�tj����|���|�tddd��|�dt
jz��|���|�tdd	d
��|�d��dS)Nr:�-h�Usage: �Report bugs to z-Vz-vqz	--versionz
Fail2Ban vz	--str2sec�1d12h30m�131400)r�r�r�r<r�r�normVersion�versionr
s r)�testClientUsagez"Fail2banClientTest.testClientUsages���,�,�w��D�!�!�!����I��&�'�'�'����%�&�&�&��-�-�/�/�/��,�,�w��D�!�!�!����O�/�1�1�2�2�2��-�-�/�/�/��,�,�w��E�;�/�/�/����L�?�#:�:�;�;�;��-�-�/�/�/��,�,�w��K��4�4�4����H�����r+c�<�t|d��}|�t|d��|�d��|�d��|���|�t|d��|�d��dS)NTz-vvdz
Loading filesz['set', 'logtarget',z--dp)r�r�r�r�r�r(s   r)�testClientDumpz!Fail2banClientTest.testClientDump(s����c�4�(�(�+��,�,�w��V�,�,�,����O�$�$�$����*�+�+�+��-�-�/�/�/��,�,�w��V�,�,�,����*�+�+�+�+�+r+c��t|d��}|�td|zd��|�|d|���|�d��|�d��	|�t|dd��|�t
|d	��|���|�t
d|zd��|�d
��|���|�t|d��|�d��|�d��n_#|���|�t|d��|�d��|�d��wxYw|���|�t
|d��|�d
��|�d��dS)NT�z-br�r�r�Exit with code 0r&r'r%zServer already runningr�r�zFailed to access socket pathzIs fail2ban running?)r�r�r�r�r�r�r�r(s   r)�testClientStartBackgroundInsidez2Fail2banClientTest.testClientStartBackgroundInside4s����c�4�(�(�+��,�,�w��+�-�w�7�7�7����S�$�K��8�8�8����N�#�#�#����&�'�'�'�)��<�<���f�k�:�:�:��<�<���%=�>�>�>��=�=�?�?�?��<�<���+�-�w�7�7�7����-�.�.�.��=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(��	�=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(�����-�-�/�/�/��,�,�v�{�F�+�+�+����2�3�3�3����*�+�+�+�+�+s�3BE�AF+c�
�t|t|d�����}tjjr|�t|dz��n�tjttt��f}t�d|��||zdz}tj|tdd���}|�t#|��o|d	��|�|d|�
��|�d��|���	|�t|dd
��|�d
��|�d��|���|�t|dd��|�d��|���t+t|d����}	t-j|t0j��t5jtj��|�t:|dd��t-j|t0j��n$#t-j|t0j��wxYw|�d��|���	d	dl}n)#t@$r}tj!d|z���d}~wwxYwtDgd�z
a"|�t|d��|�d��|�dd��|�d��|���tDgd�z
a"|�t|d��|�d��|�d��|�d��|�d��|���tDddgz
a"|�t|d��|�d ��|���|�t:|d!d"��|�d ��|�d#��|���|���|�t|d$��|�d��|�d��dS#|���|�t|d$��|�d��|�d��wxYw)%Nr��r�)r��Start %s ...)�--asyncr�FT�rC�shell�outputrr�rr&r'rLr$z0.1zServer replied: pongr|z1e-10z	timed outz%Skip test because of import error: %s)zecho INTERACT-ECHO�statusrQz-iz
INTERACT-ECHO�StatuszNumber of jail:)�reload�restartrQzReading config files:r�zreload ~~unknown~jail~fail~~rQz@Failed during configuration: No section: '~~unknown~jail~fail~~'rWz~~unknown~jail~fail~~r.r�)#r�rnr�r��fastr�r��sys�
executabler;r<rr.r�
executeCmdr�r�rRr�r�r�r�r�r�r��SIGSTOPr0�sleep�DEFAULT_SHORT_INTERVALr��SIGCONT�readline�ImportErrorr1rS)r�rr��cmdrr�rar�s        r)�testClientStartBackgroundCallz0Fail2banClientTest.testClientStartBackgroundCallSs����c�U�3�	�-B�-B�C�C�C�+�
�\��
2��<�<���z�1�2�2�2�2��.�%��V�,�,�	-�3�	�<�<���$�$�$�	�{�	�2�	2�3�	�	�#�|�5��	N�	N�	N�3��?�?�3�s�8�8�&��A��'�'�'����c�4�S��1�1�1����N�#�#�#��-�-�/�/�/�F)��<�<���f�k�:�:�:����[�!�!�!����'�(�(�(��=�=�?�?�?��<�<���f�e�4�4�4����+�,�,�,��=�=�?�?�?�
�E�#�y�1�1�	2�	2�3�!��G�C��� � � ��J�u�+�,�,�,��L�L���f�g�6�6�6��G�C��� � � � ��B�G�C��� � � � �������[�!�!�!��=�=�?�?�?�I��O�O�O�O��
�I�I�I�
�
�C�a�G�
H�
H�H�����I���������8�
�<�<���d�+�+�+����_�%�%�%����X�0�1�1�1����'�(�(�(��=�=�?�?�?������8�
�<�<���d�+�+�+����,�-�-�-����*�+�+�+����^�$�$�$����'�(�(�(��=�=�?�?�?��"�
���8��<�<���d�+�+�+����W�X�X�X��=�=�?�?�?��<�<���X�/F�G�G�G����W�X�X�X����)�*�*�*��=�=�?�?�?��=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(�(��	�=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(���sL�"B>S+�!AI�; S+�!I<�<,S+�)J.�-S+�.
K�8K�K�F;S+�+AUc��t|d���}|�tdddt|d��d��|�dt|d��zd	z��|���|�tddt|d
��dt|d��d
��|�d��|���t
t|d��d�����|�tdddt|d
��dt|d��d��|�d��|���tj	t|d����|�tdd��|�d��|���dS)Nr�rOr:rQr��missr��Base configuration directory � does not existrir�r{rW�Could not find server�a�LFail2ban seems to be in unexpected state (not running but the socket exists)rA�
r�r�r�rnr�r�rYr[r��remover(s   r)�testClientFailStartz&Fail2banClientTest.testClientFailStart�s����c�[�9�9�9�+��,�,�v�r��d�E�#�v�&�&��1�1�1����3�e�C��6H�6H�H�K\�\�]�]�]��-�-�/�/�/��,�,�v�r���s�H�	�	�t�U�3�
�%;�%;�X�G�G�G����+�,�,�,��-�-�/�/�/��u�S�*���s�#�#�)�)�+�+�+��,�,�v�r��d�E�#�x�(�(�$��c�:�0F�0F��Q�Q�Q����b�c�c�c��-�-�/�/�/��)�E�#�z�"�"�#�#�#��,�,�v�r�4� � � ����I�����-�-�/�/�/�/�/r+c�D�t|d���}|�t|dd��|�d��|���|�t|dddd��|�d��|���dS)	Nr�rOrW�jailrirQz--xxxz"Unexpected argument(s) for reload:)r�r�r�r�r�r(s   r)�testClientFailCommandsz)Fail2banClientTest.testClientFailCommands�s����c�[�9�9�9�+��,�,�v�{��V�������+�,�,�,��-�-�/�/�/��,�,�v�{��h���)�)�)����8�9�9�9��-�-�/�/�/�/�/r+c���d}dD]p}d}t|d��5}|rB|���|r%tjjstj|��|dz}|�Bddd��n#1swxYwY�qdS)Ng�Q���?)rr�r4r)r�	heartbeatr�r�rYr0r^)r��	sleeptime�verbose�cntr�viss     r)�testVisualWaitz!Fail2banClientTest.testVisualWait�s����)����g�
�4��7�A����#�
���]�]�_�_�_�����)��
�j�����	�Q�Y�T�	����������������������s�AA*�*A.	�1A.	N)rIrJrK�_exec_clientr<rr>rGrrIr�rMrdrnrqryr:r+r)r9r9s�������"�F�,��.�.�.�����	,�	,��+�	,���,�,��-��+�,�:��W)�W)��-��+�W)�r�����-��+��:����+��"	�	�	�	�	r+r9c���eZdZeefZd�Zeed�����Z	eed�����Z
eed�����Zed���Ze
ddi���d	���Zej�d
���e
dd
dd����d�����Zej�d���e
ddddd����d�����Ze
��d���ZdS)�Fail2banServerTestc��|�tdd��|�dtz��|�d��dS)Nr:r@rArB)r�r�r�r=r
s r)�testServerUsagez"Fail2banServerTest.testServerUsage�sL���,�,�w��D�!�!�!����I��&�'�'�'����%�&�&�&�&�&r+c���t|t|d�����}tjttt
��f}t�d|��||zdz}tj	|tdd���}|�t|��o|d��|�
|d|�	��|�d
��|���	|�t"|dd��|�t$|d
��|���|�t"|d��|�d��|�d��dS#|���|�t"|d��|�d��|�d��wxYw)Nr�rOrPrKFTrRrr�rr&r'r%r�r�rL)r�rnrZr[r;r=rr.rr\r�r�rRr�r�r�r�r�r��r�rr�rcrs     r)�testServerStartBackgroundz,Fail2banServerTest.testServerStartBackground�s����c�U�3�	�-B�-B�C�C�C�+�	���s�F�+�+�,�#��,�,�~�s�#�#�#��k��G�#�#�
���l�%��M�M�M�#��/�/�#�c�(�(�%�s�1�v�&�&�&����S�$�C��0�0�0����N�#�#�#��-�-�/�/�/�)��<�<���f�k�:�:�:��<�<���%=�>�>�>��=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(�(��	�=�=�?�?�?��<�<���f�-�-�-����*�+�+�+����'�(�(�(�(���s
�29F�AG#c�d�t|d���}|�tddt|d����|�dt|d��zdz��|���t
t|d��d	�����|�tddt|d
��dt|d����|�d��|���tj	t|d����dS)
Nr�rOr:r�rfrgrhr{rjrir�rkrlr(s   r)�testServerFailStartz&Fail2banServerTest.testServerFailStart
s���c�[�9�9�9�+��,�,�v�r���s�F�	�	�������3�e�C��6H�6H�H�K\�\�]�]�]��-�-�/�/�/��u�S�*���s�#�#�)�)�+�+�+��,�,�v�r���s�H�	�	�t�U�3�
�%;�%;�=�=�=����b�c�c�c��-�-�/�/�/��)�E�#�z�"�"�#�#�#�#�#r+c	�D�t|d���}t|d��}|�d��|�t|d��|�d��t
t|d��dd	d
d	dd��|�d
��|�t|d��|�dddd���|�d��|�t|dd��|�dddd���dS)Nr�rOriz[test-phase 0]z--testz$OK: configuration test is successfulrkrjrX�
[broken-jail]�filter = broken-jail-filter�enabled = truez[test-phase 0a]�.Unable to read the filter 'broken-jail-filter'zErrors in jail 'broken-jail'.z ERROR: test configuration failedTr/z[test-phase 0b]z-tr�)r�rnr�r�r�r�r`r�)r�rr�r�s    r)�testServerTestFailStartz*Fail2banServerTest.testServerTestFailStart!sF���c�[�9�9�9�+�
�c�8���#��-�-� �!�!�!��,�,�w��X�.�.�.����:�;�;�;��e�C��%�%�s�B���$�&6�8�8�8��-�-�!�"�"�"��,�,�v�{�H�-�-�-����D�"�%�4��1�1�1�
�-�-�!�"�"�"��,�,�v�{�D�'�2�2�2����D�"�%�4��1�1�1�1�1r+c���	t�t�d�����}tjttt
��f}t�d|��||zdz}tj	|tdd���}|�t|��o|d��|�
�d|�	��|�d
��|���t�d���|�t!�����n'#|�t!�����wxYwtj�fd�t��|�t't�d
������|�d��|���|�t!�����|�d��dS)NzGf2b.log[format="SRV: %(relativeCreated)3d | %(message)s", datetime=off]rOrPrKFTrRrr�rzKill server ... %sc�@��tt�d����S)Nr|)rrn)rs�r)r�z7Fail2banServerTest.testKillAfterStart.<locals>.<lambda>Ss���V�E�#�y�$9�$9�:�:�:�r+r|r�zcleanup: no pidfile for)r�rnrZr[r;r=rr.rr\r�r�rRr�r�r�r�r?�assertFalserr�s `   r)�testKillAfterStartz%Fail2banServerTest.testKillAfterStart?s����#��s�e�C�M�/O�/O�P�P�P�;��.�%��V�,�,�	-�3�	�<�<���$�$�$�	�{�	�W�	$�3�	�	�#�|�5��	N�	N�	N�3��?�?�3�s�8�8�&��A��'�'�'����c�4�S��1�1�1����^�$�$�$��=�=�?�?�?�	�<�<�$�c�*�*�*��?�?�9�S�>�>�"�"�"�"��4�?�?�9�S�>�>�"�"�"�"�����.�:�:�:�:�L�I�I�I����6�%��Y�/�/�0�0�1�1�1����)�*�*�*��-�-�/�/�/��/�/�)�C�.�.�!�!�!����-�.�.�.�.�.s�DD1�1$Er�rjr!c�n"�����t|d���t|d���t|d���t|d���tjt�d����		dƈfd	�	}dLj���fd
�	}|d���|d���|dggd����tt�d��dddddd��t�dgt	tt
j������dzfdz�R�t�d��t�d��|�d��tj
jtj
krt���|�t |d��|�dddt$���|�d �z��|�d!��|�d"d#d�$��|�d%d&dt$���|�d'd(d)d�$��|�d*��|dd+g�,��tj
jtj
krt���|�t |d��|�dt$�-��|�d.d!d�$��|�d �zd �zd�$��|�d/d0d�$��|�d1d2d�$��|�d3d4d�$��|�d5��|�d6��|dg�,��|dd7dzd8dzd9dz�:��|�t |d��|�dt$�-��|�d.d!d�$��|�d;��|�d/d<d�$��|�d=��|�d>��|�d?��|dd@�A��|d+dg�,��|�dB��t�dCgt	tt
j������dDzfdzt	tt
j������dEzfdzzt	tt
j������dFzfdzzt	tt
j������dGzfdzz�R�tj
jtj
krt���|�dHdIdt$���|�t |dJdKdLdM��|�dNt$�-��|�dOdPdQdRdSdTdUd�$��|�dVdWdXdYd�$��t)��|�|�|dZ��d[d\gd]�idKgd^�igf��|�|�|dZd_d`da��d[d\gd\dKgggf��|�|�|dbd\dZ��dgd]���|�|�|dbdKdZ��dgd^���|�|�|dbd\dZdc��dd��|�|�|dbd\dZdM��dd[��|�|�|dbd\dZdcdM��ddd[g��|�dd��|�t |dedK��|�ddfdNdt$���|�dgdhdidjd2dkdldmd�$�	�	|�dndodt$���|�dpdqd�$��|�dr��|�t |dJdKdLds��|�t |dJdKdLdt��|�dudvdt$���t)��|�dw��|�t |dbdKdLdx��|�d`dydsdtdt$���|�dz��|�t |dbd\dL��|�d_d{dcd`dydt$���|�d|��|�t |ded}dK��|�dd2dt$���|�djd2dgdhdid�$��|�d~dd�$��|�d���|�d�d�d�$��|�dSdTd�$��|dd@�A��|g�,��|�d���|�t |dd\��|�dt$�-��|�d�d�d�$��|�d�d�d�d�$��|�d���|dg����|�t |d��|�dt$�-��|�d���|�d�djd�$��|�d��zd��zd�$��|�d���t�dCgt	tt
j������d�zfdzt	tt
j������d�zfdzzt	tt
j������d�zfdzz�R�tj
jtj
krt���|�d�d�dt$���|�d�d�d�d�d�$��|�d���|�d���|�t |d�d�d�d���|�d�d�dt$���|�d���|�t |d�d�d���|�d�d�dt$���|�t |d�d�d�d���|�d�d�dt$���|�d���|�t |d�dJd\dLd�d���|�d�d�dt$���|�t |d�dJd\d�d���|�d�d�dt$���|�d���|�t |dd}��|�dt$�-��|�d�d.d�d�$��|�d�d�d!dQd�$��|�d���|�t |d�d�d���|�d�d�d�$��|�d���|dgd�����|�t0|d��|�dt$�-��|�d�d�d�$��|�d���|dg����|�t |d��|�dt$�-��|�d���|�t0|d�ddK��|�dt$�-��|�d���|���|�t |d�dd�dK��|�dt$�-��|�d1d2d�$��|�d���|�t |d�dd�d���|�dt$�-��|�d�d�dt$���|�d���|�t |d�dJd\d�d�dĦ�|�t |d�dbd\dŦ�|�d�d�d�$��dS)�Nri�	test1.logz	test2.logz	test3.logru�test-action1TrXc���t�dd|z��}|stj|��dSt|ddddddd	d
dd|d
|d|d|d|��tjjtjkrt|��dSdS)Nru�%s.confrxr~z_exec_once = 0rXryznorestored = %(_exec_once)sz
restore = zinfo = z<_use_flush_ = echo '[%(name)s] %(actname)s: -- flushing IPs'z6actionstart =  echo '[%(name)s] %(actname)s: ** start'z7actionreload = echo '[%(name)s] %(actname)s: .. reload'zMactionban =    echo '[%(name)s] %(actname)s: ++ ban <ip> %(restore)s%(info)s'z;actionunban =  echo '[%(name)s] %(actname)s: -- unban <ip>'z5actionstop =   echo '[%(name)s] %(actname)s: __ stop')
rnr�rmr`r�r�r�rr�r�)	�actname�allowr�rW�ban�unbanr�r\r�s	        �r)�_write_action_cfgzBFail2banServerTest.testServerReloadTest.<locals>._write_action_cfgks����
�c�:�y�7�2�3�3�2�
���I�b�M�M�M�
�F��r�3�����!��
�B�<�e�=�v�S�UX�A�5�;�T�����l���
�-�-�
�b�M�M�M�M�M�.�-r+�rrr:�pollingc����tgt�d���d�d�d�d�d�d�d�d�d	�d
�d�d�d�d
|z�d�d�d|vrdnd�d|vrdnd�d|vrdnd�d�z�d|vrd�znd�d|vrd�znd�d	�d|vrdnd�d|vrdnd�d�d�d
|z�d�d�d|vrdnd�d|vrdnd�d�z�d|vrdnd�R�tjjt
jkrtt�d����dSdS)Nrkrxr}rXr~�usedns = no�maxretry = 3zfindtime = 10mzBfailregex = ^\s*failure <F-ERRCODE>401|403</F-ERRCODE> from <HOST>�datepattern = {^LN-BEG}EPOCHzignoreip = 127.0.0.1/8 ::1�[test-jail1]�
backend = �filter =z	action = rz*         test-action1[name='%(__name__)s']rzj         test-action2[name='%(__name__)s', restore='restored: <restored>', info=', err-code: <F-ERRCODE>']�z�         test-action2[name='%(__name__)s', actname=test-action3, _exec_once=1, restore='restored: <restored>', actionflush=<_use_flush_>]�
logpath = z
          z@            ^\s*error <F-ERRCODE>401|403</F-ERRCODE> from <HOST>r�z[test-jail2]�r`rnr�r�r�rr�r�)�enabled�actions�backendr��test1log�test2log�test3logs   ����r)�_write_jail_cfgz@Fail2banServerTest.testServerReloadTest.<locals>._write_jail_cfg�sx����$�u�S�+�&�&�$��$��$��$��$��$��$��	$�
�$�J�
$�#�$�!�$��$��$�!�7�*�$�-7�$��$�	
�W���1�0��$�	
�W���q�p��$�$	
�W���(�(��%$�&�8��'$�( !�G�|�|�L�8����)$�* !�G�|�|�L�8����+$�,J�-$�0	
�W���H�G��1$�2�W�����"�3$�4�5$�6�7$�6!�7�*�7$�6-7�7$�8�9$�<	
�W���q�p��=$�B	
�W���(�(��C$�D�8��E$�F�W�����"�G$�$�$�$�J�l���
�-�-�
�e�C��%�%�&�&�&�&�&�.�-r+)r��test-action2r)rrr�)r�r�rkrjr�r�r�rxz# failure 401 from 192.0.2.1: test 1r�z[test-phase 1a]rW�Reload finished.z1 ticket(s) in 'test-jail1r�zAdded logfile: %rz[test-jail1] Ban 192.0.2.1z-stdout: '[test-jail1] test-action1: ** start'z-stdout: '[test-jail1] test-action2: ** start'r/zPstdout: '[test-jail1] test-action2: ++ ban 192.0.2.1 restored: 0, err-code: 401'zAstdout: '[test-jail1] test-action3: ++ ban 192.0.2.1 restored: 0'r�z)Errors in jail 'broken-jail'. Skipping...z:Jail 'broken-jail' skipped, because of wrong configurationz[test-phase 1b]r)r��r�z[test-jail1] Unban 192.0.2.1z.stdout: '[test-jail1] test-action1: .. reload'z.stdout: '[test-jail1] test-action2: .. reload'zCreating new jail 'test-jail2'zJail 'test-jail2' startedz4stdout: '[test-jail1] test-action3: -- flushing IPs'z,stdout: '[test-jail1] test-action3: __ stop'z7stdout: '[test-jail1] test-action3: -- unban 192.0.2.1'z[test-phase 2a]z+               echo '[<name>] %s: started.'z,               echo '[<name>] %s: reloaded.'z+               echo '[<name>] %s: stopped.')r�r�rWr�zAdded logfile:z.stdout: '[test-jail1] test-action1: reloaded.'z7stdout: '[test-jail1] test-action2: -- unban 192.0.2.1'z,stdout: '[test-jail1] test-action2: __ stop'z7stdout: '[test-jail1] test-action1: -- unban 192.0.2.1'F)r�r�z[test-phase 2b]�a+z#   error 403 from 192.0.2.2: test 2z#   error 403 from 192.0.2.3: test 2z# failure 401 from 192.0.2.4: test 2z# failure 401 from 192.0.2.8: test 2z2 ticket(s) in 'test-jail2z5 ticket(s) in 'test-jail1�setz
test-jail2�banip�	192.0.2.9z3 ticket(s) in 'test-jail2z[test-jail1] Ban 192.0.2.2z[test-jail1] Ban 192.0.2.3z[test-jail1] Ban 192.0.2.4z[test-jail1] Ban 192.0.2.8z[test-jail2] Ban 192.0.2.4z[test-jail2] Ban 192.0.2.8z[test-jail2] Ban 192.0.2.9z[test-jail2] Found 192.0.2.2z[test-jail2] Ban 192.0.2.2z[test-jail2] Found 192.0.2.3z[test-jail2] Ban 192.0.2.3�bannedr�
test-jail1)�	192.0.2.4�	192.0.2.1�	192.0.2.8�	192.0.2.3�	192.0.2.2)r�r�r�r�r�z192.0.2.222r�r�z[test-phase 2c]rXzRestore Banz[test-jail2] Unban 192.0.2.4z[test-jail2] Unban 192.0.2.8z[test-jail2] Unban 192.0.2.9zJail 'test-jail2' stoppedz"[test-jail2] Restore Ban 192.0.2.4z"[test-jail2] Restore Ban 192.0.2.8z"[test-jail2] Restore Ban 192.0.2.9zPstdout: '[test-jail2] test-action2: ++ ban 192.0.2.4 restored: 1, err-code: 401'zPstdout: '[test-jail2] test-action2: ++ ban 192.0.2.8 restored: 1, err-code: 401'zAstdout: '[test-jail2] test-action3: ++ ban 192.0.2.4 restored: 1'zAstdout: '[test-jail2] test-action3: ++ ban 192.0.2.8 restored: 1'z[test-phase 2d]z
192.0.2.21z
192.0.2.22z5stdout: '[test-jail2] test-action3: ++ ban 192.0.2.22z6stdout: '[test-jail2] test-action3: ++ ban 192.0.2.22 z[test-phase 2d.1]rWr�z[test-phase 2d.2]r�z[test-phase 2e]z--unbanz7stdout: '[test-jail2] test-action2: -- unban 192.0.2.21z8stdout: '[test-jail2] test-action2: -- unban 192.0.2.22'z4stdout: '[test-jail2] test-action3: -- flushing IPs'z8stdout: '[test-jail2] test-action3: -- unban 192.0.2.21'z8stdout: '[test-jail2] test-action3: -- unban 192.0.2.22'z[test-phase 3]zReload jail 'test-jail1'zJail 'test-jail1' reloadedzReload jail 'test-jail2'zJail 'test-jail2' reloadedzJail 'test-jail1' startedz[test-phase 4])r�zStopping jail 'test-jail2'zRemoved logfile: %rz[test-phase 5]z# failure 401 from 192.0.2.1: test 5z#   error 403 from 192.0.2.5: test 5z# failure 401 from 192.0.2.6: test 5z6 ticket(s) in 'test-jail1z%[test-jail1] 192.0.2.1 already bannedz[test-jail1] Found 192.0.2.1z[test-jail1] Found 192.0.2.6z[test-jail1] Ban 192.0.2.6z[test-jail1] Found 192.0.2.5z[test-phase 6a]rQr�z	192.0.2.5z	192.0.2.6z192.0.2.5 is not bannedz[test-jail1] Unban 192.0.2.6z[test-phase 6b]z192.0.2.2/31z[test-jail1] Unban 192.0.2.2z[test-jail1] Unban 192.0.2.3z192.0.2.8/31z192.0.2.100/31z[test-jail1] Unban 192.0.2.8z192.0.2.100/31 is not bannedz[test-phase 6c]z
192.0.2.96/28z192.0.2.112/28z[test-jail1] Ban 192.0.2.96/28z[test-jail1] Ban 192.0.2.112/28�unbanipz
192.0.2.64/26z [test-jail1] Unban 192.0.2.96/28z![test-jail1] Unban 192.0.2.112/28z[test-phase 7]z[test-jail1] Unban 192.0.2.4zJail 'test-jail1' stoppedz[test-phase 7b]�--allzFlush ban listz'Unbanned 0, 0 ticket(s) in 'test-jail1'z[test-phase 8a]zxxx-unknown-backend-zzz)r�r�z0Restart jail 'test-jail1' (reason: 'polling' != zUnknown backend z[test-phase 8b]z[test-phase end-1]z$the jail 'test-jail2' does not existz--if-existsz[test-phase end-2]�	--restartz[test-phase end-3]�addignoreipz192.0.2.1/32z2001:DB8::1/96�ignoreip)r�TrXrXrXrXrX)r�r:r�)rnr�r�r`r�r�rr0r�r�r�r�rr�r�r�r�r�r8�assertNotLoggedr;�assertSortedEqualr�assertEqualr�)	r�rr�r�r�r�r�r�r�s	     @@@@r)�testServerReloadTestz'Fail2banServerTest.testServerReloadTest[s������	�c�8���#�
�3��
$�
$�(�
�3��
$�
$�(�
�3��
$�
$�(��(�5��j�!�!�"�"�"�6:�/1�������0''�''�''�''�''�''�''�''�''�T��N�+�+�+�+���N�+�+�+�+��/�1�#�w�w�w�/�/�/�/�
�e�C��%�%�s�B���$�&6�8�8�8��h��g��C���
�
�$6�$6� 7� 7�:_� _�a�de�e�g�g�g�g�
�h�����
�h������-�-�!�"�"�"�
�\��g�m�+�+��X�����,�,�w��X�.�.�.������T���>�>�>����'�(�2�3�3�3����0�1�1�1����2�2���>�>�>����U�F��,�� � � ����3�.�?�T��K�K�K��-�-�!�"�"�"��/�1�Q�%� � � � �
�\��g�m�+�+��X�����,�,�w��X�.�.�.����&�\��:�:�:����!��T��+�+�+������!���!�t��-�-�-����3�3���?�?�?����#��D��*�*�*����9�1�t��=�=�=����<�>�>�>��-�-�!�"�"�"��/�1�#�������N�
7�.�
H�
8�>�
I�
7�.�
H�J�J�J�J��,�,�w��X�.�.�.����&�\��:�:�:����!��T��+�+�+����'�(�(�(����3�3���?�?�?����<�>�>�>����1�3�3�3����<�>�>�>���N�%�8�8�8�8��/�1�Q�%� � � � ��-�-�!�"�"�"�
�h�����F�K�M�M�����C�C�E��I���V�[�]�]�	�	���D�D�F��J�K���V�[�]�]�	�	���D�D�F��J�K�	��V�[�]�]�	�	���D�D�F��J�K������\��g�m�+�+��X���������T���>�>�>��,�,�w���,���.�.�.�����l��4�4�4�����������T��+�+�+����!��!����
�
�
���������+�+�K��
�
���T�T�T�U��:�:�:�;����������+�+�K��[�+�}�6�6�89��^�l�L�1�2�<�8����
����+�+�K��,��"�"�"#�%�'E�'E�'E�F�F�F�����+�+�K��,��"�"�"#�%�'+�'+�'+�,�,�,����4�%�%�k��,��+�/�/�/0�2�45�7�7�7����4�%�%�k��,��+�/�/�/0�2�45�7�7�7����4�%�%�k��,��+�{�<�<�<=�?�BC�Q��I�I�I��-�-�!�"�"�"��,�,�w���l����������T���>�>�>�
���!�!�!���'�'�'�T��	�	�	����U�U��,�� � � �
���F�F���
�
�
��-�-�!�"�"�"��,�,�w���,���/�/�/��,�,�w���,���/�/�/����:�;��L��Z�Z�Z�
�����-�-�#�$�$�$��,�,�w��U�L�'�4�H�H�H������\�<�T���V�V�V��-�-�#�$�$�$��,�,�w��U�L�'�B�B�B������[�+�{��S_��a�a�a��-�-�!�"�"�"��,�,�w���i��'�'�'������D�|��=�=�=������!�!�!�t��������<�=�4��I�I�I����9�;�;�;����=�=�4��I�I�I������T�������N�%�8�8�8�8��/�"������-�-� �!�!�!��,�,�w��X�|�<�<�<����&�\��:�:�:������T��+�+�+�������D������-�-� �!�!�!��/�1�#������,�,�w��X�.�.�.����&�\��:�:�:�������������D��*�*�*�����8�#��8�#���/�/�/�
�-�-� �!�!�!�
�h�����F�K�M�M�����C�C�E��I���F�K�M�M�����C�C�E��I�J���F�K�M�M�����C�C�E��I�J�����
�\��g�m�+�+��X��������*��<��I�I�I����!�!�*��T�	�+�+�+����5�6�6�6��-�-�!�"�"�"��,�,�w���g�{�K�1�1�1�����!�t�,�����
�-�-�!�"�"�"��,�,�w���g�~�'�'�'����!�!�t�,������,�,�w���g�~�'7�9�9�9����!�!�t�,��@�@�@�
�-�-�!�"�"�"��,�,�w���e�\�7�O�=M�O�O�O����#�$�$�\������,�,�w���e�\�9�o�?�?�?����%�&�D�|������-�-� �!�!�!��,�,�w���Y�������&�\��:�:�:�����!�!�t������������T�	�����-�-�!�"�"�"��,�,�w���g�w� � � �����,�$��8�8�8�
�-�-�!�"�"�"��/�1�#�'@�A�A�A�A��,�,�v�{�H�-�-�-����&�\��:�:�:����5��4��!�!�!��-�-�!�"�"�"��/�1�#������,�,�w��X�.�.�.����&�\��:�:�:��-�-�$�%�%�%��,�,�v�{��h��&�&�&����&�\��:�:�:����:�;�;�;��-�-�/�/�/��,�,�w���h�
�|�5�5�5����&�\��:�:�:����#��D��*�*�*�
�-�-�$�%�%�%��,�,�w���h��W�.�.�.����&�\��:�:�:������D�|��=�=�=�
�-�-�$�%�%�%��,�,�w���e�\�=�.�BR�T�T�T��,�,�w���e�\�:�/�/�/����N�$4�$��?�?�?�?�?r+znginx-block-map)�action)�%(tmp)s/blck-failures.log)ru)z[nginx-blck-lst]rwr�z#logpath = %(tmp)s/blck-failures.logzoaction = nginx-block-map[srv_cmd="echo nginx", srv_pid="%(tmp)s/f2b.pid", blck_lst_file="%(tmp)s/blck-lst.map"]z�         blocklist_de[actionban='curl() { echo "*** curl" "$*";}; <Definition/actionban>', email="Fail2Ban <fail2ban@localhost>", apikey="TEST-API-KEY", agent="fail2ban-test-agent", service=<name>]r��datepattern = ^Epochz3failregex = ^ failure "<F-ID>[^"]+</F-ID>" - <ADDR>zmaxretry = 1r�)r�r�r�c��t|d��}dd|iz}dd|iz}t|dttt	j������dzttt	j������dzttt	j������dzttt	j������d	zttt	j������d
z��|�ddd
ddddt���t|��t|��}|�
d|��|�
d|��|�
d|��|�
d|��|�
d|��|�ddd���|�dddt���|�t|dddd ��t|��t|��}|�
d|��|�
d|��|�
d|��|�
d|��|�
d|��|�t��|�d!��t|��t|��}|�|d"��dS)#Nrir�rz%(tmp)s/blck-lst.map�w+z" failure "125-000-001" - 192.0.2.1z" failure "125-000-002" - 192.0.2.1u1 failure "125-000-003" - 192.0.2.1 (òðåòèé)u1 failure "125-000-004" - 192.0.2.1 (òðåòèé)z" failure "125-000-005" - 192.0.2.1z [nginx-blck-lst] Ban 125-000-001z [nginx-blck-lst] Ban 125-000-002z [nginx-blck-lst] Ban 125-000-003z [nginx-blck-lst] Ban 125-000-004z [nginx-blck-lst] Ban 125-000-005z5 ticket(s)Tr�z\125-000-001 1;
z\125-000-002 1;
z\125-000-003 1;
z\125-000-004 1;
z\125-000-005 1;
zstdout: 'nginx -qt'zstdout: 'nginx -s reload'r/z�stdout: '*** curl --fail --data-urlencode server=Fail2Ban <fail2ban@localhost> --data apikey=TEST-API-KEY --data service=nginx-blck-lst z=stdout: ' --data format=text --user-agent fail2ban-test-agentr�z125-000-001z125-000-002z125-000-005z5[nginx-blck-lst] Flush ticket(s) with nginx-block-maprX)rnr`r�r�rr0r�r8r�rd�assertInr�r��assertNotInr�r�)r�rr�r��lgfn�mpfn�mps       r)�testServerActions_NginxBlockMapz2Fail2banServerTest.testServerActions_NginxBlockMapGs���.	�c�8���#�	$��s�|�	3�$�	�5�#�,�	.�$�
�d�D��s�6�;�=�=�����A�A��s�6�;�=�=�����A�A��s�6�;�=�=�����\�\��s�6�;�=�=�����\�\��s�6�;�=�=�����A�A�������%�%�%�%�%���,������D�/�/�/��$���"��-�-�$�b�)�)�)��-�-�$�b�)�)�)��-�-�$�b�)�)�)��-�-�$�b�)�)�)��-�-�$�b�)�)�)����)�+F�D��Q�Q�Q����Q�B��,�	�����,�,�w��W�m�]�M�Z�Z�Z��D�/�/�/��$���"����'��,�,�,����'��,�,�,����'��,�,�,��-�-�$�b�)�)�)��-�-�$�b�)�)�)����w�'�'�'����K�L�L�L��D�/�/�/��$���"����2�r�����r+z
sendmail-auth)�filter)�%(tmp)s/test.logT)r~zdbmaxmatches = 1)a�test_action = dummy[actionstart_on_demand=1, init="start: %(__name__)s", target="%(tmp)s/test.txt",
      actionban='<known/actionban>; echo "found: <jail.found> / <jail.found_total>, banned: <jail.banned> / <jail.banned_total>"
        echo "<matches>"; printf "=====\n%%b\n=====\n\n" "<matches>" >> <target>',
      actionstop='<known/actionstop>; echo "stats <name> - found: <jail.found_total>, banned: <jail.banned_total>"']z[sendmail-auth]rwr��logpath = %(tmp)s/test.log�action = %(test_action)sz%filter = sendmail-auth[logtype=short]r�r�zmaxmatches = 2r�z[sendmail-reject]rwr�r�r�z'filter = sendmail-reject[logtype=short]r�r�r�)r�r�r�r�c	�$�t|d��}dd|iz}dd|iz}tttj������dztttj������dztttj������dzf}tttj������dztttj������d	ztttj������d
zf}|�d��t
|dg|�R�|�d
dddt���t|��t|��}|d}	|�|	|��|dd�D]}	|�|	|���|�d��t
|dg|�R�|�ddddt���t|��t|��}|D]}	|�|	|���|�d��|�
t|ddd��|�ddddddt���t|��}|d }	|�|	��|�|	|��|dd �D]-}	|�|	��|�|	|���.|�d!ddt���t|��}|d }	|�|	��|�|	|��|dd �D]-}	|�|	��|�|	|���.|�d"��|�t��|�t%|����dS)#Nrir�rz%(tmp)s/test.txtz] smtp1 sm-mta[5133]: s1000000000001: [192.0.2.1]: possible SMTP attack: command=AUTH, count=1z] smtp1 sm-mta[5133]: s1000000000002: [192.0.2.1]: possible SMTP attack: command=AUTH, count=2z] smtp1 sm-mta[5133]: s1000000000003: [192.0.2.1]: possible SMTP attack: command=AUTH, count=3z� smtp1 sm-mta[21134]: s2000000000001: ruleset=check_rcpt, arg1=<123@example.com>, relay=xxx.dynamic.example.com [192.0.2.2], reject=550 5.7.1 <123@example.com>... Relaying denied. Proper authentication required.z� smtp1 sm-mta[21134]: s2000000000002: ruleset=check_rcpt, arg1=<345@example.com>, relay=xxx.dynamic.example.com [192.0.2.2], reject=550 5.7.1 <345@example.com>... Relaying denied. Proper authentication required.z� smtp1 sm-mta[21134]: s3000000000003: ruleset=check_rcpt, arg1=<567@example.com>, relay=xxx.dynamic.example.com [192.0.2.2], reject=550 5.7.1 <567@example.com>... Relaying denied. Proper authentication required.z[test-phase sendmail-auth]r�z[sendmail-auth] Ban 192.0.2.1z%stdout: 'found: 0 / 3, banned: 1 / 1'z1 ticket(s) in 'sendmail-auth'Tr�rrz[test-phase sendmail-reject]r�z[sendmail-reject] Ban 192.0.2.2z 1 ticket(s) in 'sendmail-reject'z[test-phase restart sendmail-*]rWr�r�r�z3stdout: 'stats sendmail-auth - found: 3, banned: 1'z5stdout: 'stats sendmail-reject - found: 3, banned: 1'z%[sendmail-auth] Restore Ban 192.0.2.1r�z'[sendmail-reject] Restore Ban 192.0.2.2z[test-phase stop server])rnr�r�rr0r�r`r�r8r�rdr�r�r�r�r�r�r�r)
r�rr�r�r��tofn�	smaut_msg�	smrej_msg�td�ms
          r)�testServerJails_Sendmailz+Fail2banServerTest.testServerJails_Sendmail�sM��R	�c�8���#�	�u�c�l�	*�$�	�u�c�l�	*�$��s�6�;�=�=�����|�|��s�6�;�=�=�����|�|��s�6�;�=�=�����|�|��)��s�6�;�=�=�����s�s��s�6�;�=�=�����s�s��s�6�;�=�=�����s�s��)��-�-�,�-�-�-�
�d�D�%�9�%�%�%�%����"�%L�#��L��B�B�B��D�/�/�/��$���"���l�!����1�b�����Q�R�R�=���a��=�=��B������-�-�.�/�/�/�
�d�D�%�9�%�%�%�%����$�&M�%�4�l��D�D�D��D�/�/�/��$���"����a��=�=��B������-�-�1�2�2�2��,�,�w���[�'�#�#�#�����8�:�*�,L�RV�]i�	�k�k�k��$���"���m�!����A�����-�-��2�����Q�r�T�?���a�����������A�r��������,�.P�VZ�am��o�o�o��$���"���m�!����A�����-�-��2�����Q�r�T�?���a�����������A�r������-�-�*�+�+�+����w�'�'�'����6�$�<�<� � � � � r+c	�����	�
���t|d���t|d���tjt�d����d9�fd�	}d:��fd�	}|dd	�
��|dd�
��|��t�d��|�d
��|�t|d��t�dgtttj
������dzfdz�R�t��|�dddt���t��|�d��td��t��|�ddddt���t��|�d��d	�t�fd���t�dgtttj
������dzfdz�R�|�dd dt���|�d!��|�t|d"d#d$d%��|�d&d'dt���d�t��|�d(��td)��t��|�d*dt���t��|�d+��|�t|d"d#d$d%��|�d&d,dt���|�d-��t!��d.d/i�t"j�	��	fd0�}�	�d1|���	�d1d2���t)j�fd3�t,���	j�
t0jjrd4nd5df�
fd6�	}|�	_|�t��|�d7��|��	j��|��	j d��d�d.<|�d7d�8���	�!��dS);Nrir�rur�Tc
����t�dd|z��}t|ddddd|rdndd	��tjjt
jkrt|��dSdS)
Nrur�rxr~rXryzeactionban =     printf %%s "[%(name)s] %(actname)s: ++ ban <ip> -c <bancount> -t <bantime> : <F-MSG>"ziactionprolong = printf %%s "[%(name)s] %(actname)s: ++ prolong <ip> -c <bancount> -t <bantime> : <F-MSG>"zBactionunban =   printf %%b '[%(name)s] %(actname)s: -- unban <ip>')rnr`r�r�r�rr�r�)r��prolongr\r�s   �r)r�z@Fail2banServerTest.testServerObserver.<locals>._write_action_cfgsz���
�c�:�y�7�2�3�3�2��r�3����m���q�q��H�����l���
�-�-�
�b�M�M�M�M�M�.�-r+r�c����tt�d��ddddddddd	d
dddd
|zdddd�zddd��tjjt
jkrtt�d����dSdS)Nrkrxr}rXr~r�r�z
findtime = 1mzbantime = 5mzbantime.increment = truer�r�r�r�z*action = test-action1[name='%(__name__)s']z*         test-action2[name='%(__name__)s']r�zXfailregex = ^\s*failure <F-ERRCODE>401|403</F-ERRCODE> from <HOST>:\s*<F-MSG>.*</F-MSG>$r�r�)r�r�r�s ��r)r�z>Fail2banServerTest.testServerObserver.<locals>._write_jail_cfg%s�����u�S�+�&�&���"��������"���L�7�*�J�0�0��8��_���!���$�l���
�-�-�
�e�C��%�%�&�&�&�&�&�.�-r+F)r�r�r�rxz[test-phase 0) time-0]rWr�z> failure 401 from 192.0.2.11: I'm bad "hacker" `` $(echo test)r�zDstdout: '[test-jail1] test-action1: ++ ban 192.0.2.11 -c 1 -t 300 : zDstdout: '[test-jail1] test-action2: ++ ban 192.0.2.11 -c 1 -t 300 : r�z[test-phase 1) time+10m]�
z7stdout: '[test-jail1] test-action1: -- unban 192.0.2.11z7stdout: '[test-jail1] test-action2: -- unban 192.0.2.11z0 ticket(s) in 'test-jail1'z[test-phase 2) time+10m]c����Srbr:)�wakeObss�r)r�z7Fail2banServerTest.testServerObserver.<locals>.<lambda>`s����r+r�zC failure 401 from 192.0.2.11: I'm very bad "hacker" `` $(echo test)rzDstdout: '[test-jail1] test-action1: ++ ban 192.0.2.11 -c 2 -t 300 : zDstdout: '[test-jail1] test-action2: ++ ban 192.0.2.11 -c 2 -t 300 : z"[test-phase 2) time+10m - get-ips]r�r�r�z--with-timez
192.0.2.11z+ 300 =z[test-phase 2) time+11m]rzHstdout: '[test-jail1] test-action2: ++ prolong 192.0.2.11 -c 2 -t 600 : z"[test-phase 2) time+11m - get-ips]z+ 600 =z'[test-phase end) stop on busy observer]�staterc����t�d��d�d<tj�fd�t������t�d��dS)Nz!++ observer enters busy state ...rr�c����ddkS)Nr�rr:�rjs�r)r�zMFail2banServerTest.testServerObserver.<locals>._long_action.<locals>.<lambda>�s���!�G�*��/�r+z-- observer leaves busy state.)rr&rr?r��db_purge)rj�obsMains��r)�_long_actionz;Fail2banServerTest.testServerObserver.<locals>._long_action�sf���	�;�;�2�3�3�3��1�W�:��>�)�)�)�)�<�8�8�8�
������	�;�;�/�0�0�0�0�0r+�callc��dSrbr:r:r+r)r�z7Fail2banServerTest.testServerObserver.<locals>.<lambda>�s��d�r+c����ddkS)Nr�rr:r�s�r)r�z7Fail2banServerTest.testServerObserver.<locals>.<lambda>�s����7��q��r+g{�G�z�?g�������?c����||��Srbr:)�wtime�	forceQuit�obsMain_stops  �r)�_stopz4Fail2banServerTest.testServerObserver.<locals>._stop�s���
�,�u�i�
(�
(�(r+zobserver leaves busy stater�)r�T)r�)"rnr�r�r`r�r�r�r�r�rr0r;r�r8r2rEr"r5r6�addrr?r�r�r�r�rYr�r�r��idler��_ObserverThread__dbr)
r�rr�r�r�r�r�rjr�r�r�r�r�s
       @@@@@@r)�testServerObserverz%Fail2banServerTest.testServerObservers��������
�c�8���#�
�3��
$�
$�(��(�5��j�!�!�"�"�"�������'�'�'�'�'�'�'�.��N�E�:�:�:�:���N�D�9�9�9�9��/����
�h������-�-�(�)�)�)��,�,�w��X�.�.�.�
�h�����V�[�]�]�	�	���a�a�c�fg�g������������I�I��,�� � � �
�����-�-�*�+�+�+�
�b�/�/�/��������<�<� ��,�	� � � �
�����-�-�*�+�+�+�
�'������0�0�0�
�h�����V�[�]�]�	�	���f�f�h�kl�l��������I�I��,�� � � �
�-�-�4�5�5�5��,�,�w��U�L�'�=�Q�Q�Q�������<��9�9�9�
�'������-�-�*�+�+�+�
�a�.�.�.��������M��,�� � � �
�����-�-�4�5�5�5��,�,�w��U�L�'�=�Q�Q�Q�������<��9�9�9��-�-�9�:�:�:�������l�!��N�'�1�1�1�1�1�1�
�+�+�f�l�#�#�#�	�+�+�f�l�l�#�#�#��.�(�(�(�(�,�7�7�7���,�#�<�,�5�4�4�#�$�)�)�)�)�)�)��'�,����w�'�'�'����3�4�4�4����7�<� � � ����7�.��5�5�5��!�G�*����0�t��<�<�<�	�,�,�.�.�.�.�.r+Fc�:�|�t��dSrb)r�r�r(s   r)�_testServerStartStopz'Fail2banServerTest._testServerStartStop�s������(�(�(�(�(r+c�R�td��D]}|����dS)Ni�)�ranger�)r��is  r)�testServerStartStopz&Fail2banServerTest.testServerStartStop�s6���$�K�K� � �q�������� � r+N)rIrJrK�_exec_serverr=rr~rr�r�r�r�r�r�r�r�r��skip_if_cfg_missingr�r�r�r�r�r:r+r)r|r|�s�������"�F�,��'�'�'�
��)�)��-��+�)�.��$�$��-��+�$�$��1�1��-��+�1�8�/�/��+�/�6 ��D�&�>�:�:�:�h@�h@�;�:�h@�V�,�"�"�*;�"�<�<���7� �
�
,�,����*:�:�+��=�<�,:�x�,�"�"�/�"�:�:���.���
�&,�&,�&�&�&�NN!�N!�O&�&�;�:�PN!�` ��!�!�O�O�"�!�O�d � r+r|)FNrerfr:rgN)`�
__author__�
__copyright__�__license__r�r�r�rZr0r�r��os.pathrrnrrrr�	functoolsr
�	threadingr�clientr
rr�client.fail2bancmdliner�client.fail2banclientrrzrr�client.fail2banserverrr�rXrr�
server.mytimer�server.utilsr�utilsrrr�rrrrr r�r!r"�helpersr#rIr<r=�
getServerPathr;r��maxWaitTimer�r8rr
rrr*rTr2r5r;rErGrOr�r�rSrU�
input_command�
PRODUCTION�dumpFiler�r`rdr�r�r�r�r�r�r�r9r|r:r+r)�<module>r
s���,�
�[�
�������	�	�	�	�	�	�	�	�
�
�
�
�����
�
�
�
�����A�A�A�A�A�A�A�A�A�A�A�A�A�A�������������D�D�D�D�D�D�D�D�D�D�4�4�4�4�4�4�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�U�U�U�U�U�U�U�U�������������"�"�"�"�"�"� � � � � � �?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?� ������
��8�	�	��	��	��
�g�*�n�*�,�,�-�-���|�'�'���(A�B�B���|�'�'���(A�B�B�� ,�a�/�������������(���&�����
������������*�*�*�
��	�-�-�-�1=�&�&�&�&�*�����O�1����
������5����
��	��
����� 3���"�"������'�	����

�
�
�7;�;@��U�U�U�U�n������)
�)
�)
�X���.0�C�C�C�C�LF#�F#�F#�F#�F#�1�F#�F#�F#�RV�V�V�V�V�1�V�V�V�rA �A �A �A �A �1�A �A �A �A �A r+