HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/fail2ban/server/__pycache__/asyncserver.cpython-39.pyc
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__cCsD|jr@|j}d|_z|�tj�|��Wntjy>Yn0dSr
)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|�}WnHty�}z0tj	d|t�
�tjkd�t
�|��WYd}~n
d}~00|jr�|j�|�}ndg}t|t�}|�|tj�Wnjt�y(}zPt|t
j�s�tj	d|t�
�tjkd�td|t�}|�|tj�WYd}~n
d}~00dS)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yt}zWYd}~n
d}~00|�
�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<|durtj}tj}t|�r2|}n2|rdtjrdttjd�rdt�	d�t
|�d}tj}|��r�z$||�|dr�|dd8<Wqdt�y�}z�|�s�WYd}~�q�|dd7<|ddk�r|jdt
jt
jfvr�t�d	t|��nt�d	t|��np|ddk�r2t�|�t�d
�nL|ddk�r~|jdt
jk�sdt|���dk�r~t�d|�WYd}~�q�WYd}~qdd}~00qddS)
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�sD

��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�ty�}z�|jdd7<|jddkr\tjd||jddkd�nl|jddkrvt�d�nR|jddkr�t|tj�r�|jdt	j
ks�t|j���d	kr�t�
d
|j�|��WYd}~dSd}~00|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 ty�td�j��Yn0t��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}�jrpd�_�jr>z�j�tj�Wntjy<Yn0tj���t	�
��jkrlt�
�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
CsHzt�|j�Wn2tyB}z|jtjkr.�WYd}~n
d}~00dSr
)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