Your IP : 216.73.216.182


Current Path : /usr/lib/python3/dist-packages/fail2ban/server/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/fail2ban/server/__pycache__/asyncserver.cpython-38.pyc

U

��a�'�@s�dZdZdZddlmZmZmZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZdd	lmZdd
lmZmZmZee�ZGdd�dej�Zddd�ZGdd�dej�ZGdd�de�Z dS)z
Cyril Jaquierz Copyright (c) 2004 Cyril JaquierZGPL�)�dumps�loads�HIGHEST_PROTOCOLN�)�Utils�)�CSPROTO)�logging�	getLogger�formatExceptionInfoc@sLeZdZdd�Zdd�Zdd�Zdd�ZGd	d
�d
e�Zdd�Z	d
d�Z
dS)�RequestHandlercCs0tj�||�||_||_g|_|�tj�dS�N)	�asynchat�
async_chat�__init__�_RequestHandler__conn�_RequestHandler__transmitter�_RequestHandler__bufferZset_terminatorr�END)�self�conn�transmitter�r�=/usr/lib/python3/dist-packages/fail2ban/server/asyncserver.pyr5s
zRequestHandler.__init__cCsF|jrB|j}d|_z|�tj�|��Wntjk
r@YnXdSr
)r�shutdown�socket�	SHUT_RDWR�close�error)rrrrrZ__close=szRequestHandler.__closecCs|��tj�|�dSr
)�_RequestHandler__closerr�handle_close�rrrrr GszRequestHandler.handle_closecCs|j�|�dSr
)r�append)r�datarrr�collect_incoming_dataKsz$RequestHandler.collect_incoming_datac@seZdZdS)zRequestHandler.LoadErrorN��__name__�
__module__�__qualname__rrrr�	LoadErrorPsr)c
Cs*z�|j}g|_tj�|�}|tjkr2|��WdSzt|�}WnFtk
r�}z(tj	d|t�
�tjkd�t
�|��W5d}~XYnX|jr�|j�|�}ndg}t|t�}|�|tj�Wnhtk
�r$}zHt|t
j�s�tj	d|t�
�tjkd�td|t�}|�|tj�W5d}~XYnXdS)Nz$PROTO-error: load message failed: %s��exc_infoZSHUTDOWNzCaught unhandled exception: %r�	ERROR: %s)rrZEMPTY�joinZCLOSE�close_when_doner�	Exception�logSysrZgetEffectiveLevelr	�DEBUGrr)rZproceedrr�pushr�
isinstance)r�message�errr�found_terminatorXs4
�
�zRequestHandler.found_terminatorc
Cs�zPt�\}}t�dt|��t�t�����td|t�}|�	|t
j�Wn"tk
rr}zW5d}~XYnX|�
�dS)Nz"Unexpected communication error: %sr,)rr0r�str�	traceback�
format_exc�
splitlinesrrr2rrr/r.)rZe1Ze2r4r5rrr�handle_error~s
zRequestHandler.handle_errorN)r&r'r(rrr r$r/r)r6r;rrrrr3s
&rFc
Cs�|si}d|d<|dkrtj}tj}t|�r2|}n2|rdtjrdttjd�rdt�	d�t
|�d}tj}|��r�z$||�|dr�|dd8<Wqdtk
�r�}z�|�s�WY�̐q�|dd7<|ddk�r|jdt
jt
jfkr�t�d	t|��nt�d	t|��nl|ddk�r0t�|�t�d
�nH|ddk�rx|jdt
jk�sbt|���dk�rxt�d|�WY��q�W5d}~XYqdXqddS)
z�Custom event loop implementation

	Uses poll instead of loop to respect `active` flag,
	to avoid loop timeout mistake: different in poll and poll2 (sec vs ms),
	and to prevent sporadic errors like EBADF 'Bad file descriptor' etc. (see gh-161)
	r�listenN�pollz"Server listener (select) uses poll��r�z Server connection was closed: %sz0Too many errors - stop logging connection errors�d�+Too many errors - critical count reached %r)rZDEFAULT_SLEEP_TIME�asyncorer=�callableZpoll2�hasattrZselectr0�debug�floatr/�args�errnoZENOTCONNZEBADF�infor7rZ	exception�EMFILE�sum�values�critical)Zactive�timeout�use_poll�	err_countr=r5rrr�loop�sF


��rQc@sbeZdZdd�Zdd�Zdd�Zdd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zedd��Z
dS)�AsyncServercCs:tj�|�||_d|_d|_d|_ddd�|_d|_dS)Nz/var/run/fail2ban/fail2ban.sockFr)�acceptr<)	rB�
dispatcherr�_AsyncServer__transmitter�_AsyncServer__sock�_AsyncServer__init�_AsyncServer__active�_AsyncServer__errCount�onstart)rrrrrr�szAsyncServer.__init__cCsdS)NFrr!rrr�writable�szAsyncServer.writablec
Csz|��\}}Wn�tk
r�}z�|jdd7<|jddkr^tjd||jddkd�nl|jddkrxt�d�nR|jddkr�t|tj�r�|jdt	j
ks�t|j���d	kr�t�
d
|j�|��WY�dSd}~XYnX|jd�r|jdd8<t�|�t||j�dS)NrSrr?zAccept socket error: %sr*z.Too many acceptor errors - stop logging errorsr@rr>rA)rSr/rYr0�warningrr3rrGrHrJrKrLrM�stoprR�_AsyncServer__markCloseOnExecrrU)rrZaddrr5rrr�
handle_accept�s0�
���
zAsyncServer.handle_acceptNFcs�t���_|�_tj�|�rFt�d�|r>t�	d���
�ntd����t
jt
j����z��|�Wn"tk
r�td�j��YnXt��j
���d�d�_�_�_�jrƈ��t�fdd�||�jd	�d
�_���dS)Nz$Fail2ban seems to be already runningzForcing execution of the serverzServer already runningzUnable to bind socket %srTcs�jSr
)�_AsyncServer__looprr!rr�<lambda>�z#AsyncServer.start.<locals>.<lambda>)rNrOrPF)�	threading�current_thread�_AsyncServer__workerrV�os�path�existsr0rr\�_remove_sock�AsyncServerExceptionZ
create_socketrZAF_UNIXZSOCK_STREAMZset_reuse_addrZbindr/rRr^r<rWr`rXrZrQrYr])r�sockZforcerNrOrr!r�start�s,




zAsyncServer.startcs�d}�jrrd�_�jr@z�j�tj�Wntjk
r>YnXtj���t	�
��jkrnt�
�fdd�d�d}�jr�tj��j�r����t�d�j�|r�t�d�d�_dS)NFcs�jSr
�rXrr!rrrarbz#AsyncServer.close.<locals>.<lambda>rTzRemoved socket file zSocket shutdown)rXr`rrrrrBrTrrcrdrerZwait_forrWrfrgrhrVrir0rE)rZstopflgrr!rrs$
zAsyncServer.closecCs|jrt�d�d|_dS)NzStop communication, shutdown)rUr0rEr!rrr�stop_communication,s
zAsyncServer.stop_communicationcCs|��|��dSr
)rnrr!rrrr]4szAsyncServer.stopcCs|jSr
rmr!rrr�isActive9szAsyncServer.isActivec
CsFzt�|j�Wn0tk
r@}z|jtjkr0�W5d}~XYnXdSr
)rf�removerV�OSErrorrHZENOENT)rr5rrrri?s
zAsyncServer._remove_sockcCs0|��}t�|tj�}t�|tj|tjB�dSr
)�fileno�fcntlZF_GETFDZF_SETFDZ
FD_CLOEXEC)rk�fd�flagsrrrZ__markCloseOnExecLszAsyncServer.__markCloseOnExec)NF)r&r'r(rr[r_rlrrnr]rori�staticmethodr^rrrrrR�s

rRc@seZdZdS)rjNr%rrrrrjVsrj)NFN)!�
__author__Z
__copyright__Z__license__�picklerrrrrBrHrsrfr�sysrcr8ZutilsrZprotocolrZhelpersr	r
rr&r0rrrQrTrRr/rjrrrr�<module>s*X
6