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/client/__pycache__/fail2banclient.cpython-39.pyc
a

���`9�@s�dZdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl	m
Z
ddlmZdd	lm
Z
dd
lmZddlmZmZmZmZmZmZddlmZd
Zdd�Zdd�ZGdd�dee
�ZGdd�d�ZGdd�d�Zdd�Zdd�Z dS)zFail2Ban Developersz^Copyright (c) 2004-2008 Cyril Jaquier, 2012-2014 Yaroslav Halchenko, 2014-2016 Serg G. BresterZGPL�N)�Thread�)�version�)�CSocket)�
Beautifier)�Fail2banCmdLine�ServerExecutionException�
ExitException�logSys�exit�output)�Utilsz
fail2ban> cCst��jjS�N)�	threadingZcurrent_thread�	__class__�__name__�rr�@/usr/lib/python3/dist-packages/fail2ban/client/fail2banclient.py�_thread_name,srcCstt�Sr)�input�PROMPTrrrr�
input_command/src@s�eZdZdd�Zdd�Zdd�Zd#dd	�Zed
d��Zd$dd�Z	d%dd�Z
dd�Zd&dd�Zd'dd�Z
dd�Zdd�Zd(dd �Zd!d"�ZdS))�Fail2banClientcCs*t�|�t�|�d|_d|_d|_dS)NT)r�__init__r�_alive�_server�_beautifier��selfrrrr8s


zFail2banClient.__init__cCs$tdtd�td�td�dS)Nz
Fail2Ban vz5 reads log file that contains password failure reportz=and bans the corresponding IP addresses using firewall rules.�)r
rrrrr�dispInteractive?szFail2banClient.dispInteractivecCs"td�t�d|�td�dS)Nr zCaught signal %d. Exiting�)r
rZwarningr)rZsignum�framerrrZ__sigTERMhandlerDszFail2banClient.__sigTERMhandler皙�����?cCs&|jdg|dkr|gnggd|d�S)N�ping���F��timeout)�_Fail2banClient__processCmd)rr(rrrZ__pingJs�zFail2banClient.__pingcCs|jr|jSt�|_|jSr)rrrrrr�
beautifierNszFail2banClient.beautifierTr&c
Cs�d}�z4|j}d}|D�]�}|�|�z�|s@t|jd|d�}n|dkrR|�|�|jddkrnt�dd|�|�|�}|d	d	kr�t�dd
|d�|s�|d	dvr�t|�	|d��n,t�
d
|dj�|r�t|�|d��d}Wqt
j
�y�}	z�|�s|jddk�rL|�s&|d	dk�r<|�|	|d	dk�nt�dd||	�WYd}	~	W|�r�z|��WnFt�y�}	z,|�s�|jddk�r�t�|	�WYd}	~	n
d}	~	00|�s�|d	dv�r�tj��dSd}	~	0t�y�}	z�|�s|jddk�r*|jddk�r t�|	�n
t�
|	�WYd}	~	W|�r�z|��WnFt�y�}	z,|�sr|jddk�r|t�|	�WYd}	~	n
d}	~	00|�s�|d	dv�r�tj��dSd}	~	00qW|�rz|��WnFt�y}	z,|�s�|jddk�rt�|	�WYd}	~	n
d}	~	00|�s0|d	dv�r�tj��nz|�r�z|��WnFt�y�}	z,|�sv|jddk�r�t�|	�WYd}	~	n
d}	~	00|�s�|d	dv�r�tj��0|S)NT�socketr'r&�verboser�zCMD: %rrzOK : %rr)Zecho�
server-statuszNOK: %rFr%z -- %s failed -- %r)r*ZsetInputCmdr�_confZ
settimeoutr�log�sendr
Zbeautify�error�argsZ
beautifyErrorr+�_Fail2banClient__logSocketError�close�	Exception�debug�sys�stdout�flush�	exception)
r�cmdZshowRetr(�clientr*Z	streamRet�c�ret�errrZ__processCmdUs�




 
�
 
� � zFail2banClient.__processCmdr Fc
Cs�z|t�|jdtj�rht�|jdtj�rT|r:t�|�qft�d|rLd|nd�qzt�d|jd�nt�d|jd�Wn@ty�}z(t�d|jd�t�|�WYd}~n
d}~00dS)Nr+z*%sUnable to contact server. Is it running?z[%s] r z3Permission denied to socket: %s, (you must be root)z6Failed to access socket path: %s. Is fail2ban running?z*Exception while checking socket access: %s)�os�accessr/�F_OK�W_OKrr2r6)rZ	prevErrorZ	errorOnlyr@rrrZ__logSocketError�s&����zFail2banClient.__logSocketErrorcCsb|��rt�d�dS|��\}}|s*dS|jdsTtj�|jd�rTt�d�dSd|gdggS)NzServer already runningZforcer+zLFail2ban seems to be in unexpected state (not running but the socket exists)z
server-streamr.)�_Fail2banClient__pingrr2�
readConfigr/rA�path�exists)rr?�streamrrrZ__prepareStartServer�s

z#Fail2banClient.__prepareStartServerc
Csddlm}|��}d|_|s"dSzd|rH|�|j�|�|d�s�WdSn<ttj||dfd�}d|_	|�
�|�d�|�|jd�|_
Wnzty�Ynjt�y}zPtd�t�d|r�dnd	�|jd
dkr�t�|�n
t�|�WYd}~dSd}~00dS)Nr)�Fail2banServerTF��targetr3r z Exception while starting server �
backgroundZ
foregroundr,)Zfail2banserverrJ�#_Fail2banClient__prepareStartServerrZstartServerAsyncr/�,_Fail2banClient__processStartStreamAfterWaitrr�daemon�startZ	setDaemonZstartServerDirectrr
r6r
rr2r;)rrMrJrI�thr@rrrZ
__startServer�s2

zFail2banClient.__startServerNcs�|r&ttj|d�fd�}d|_|��S�durDd�d<t�dd��|��}�durz|r\dnd�d<�d<t�dd��|s�dS�dur�t�	�fdd	�d
d�|r�dnd�d<t�dd��|�
|d�}�dur�|�d
<|S)NFrKTrQr-z  client phase %sZreadycs��dd�duS)Nzstart-ready)�getr��phaserr�<lambda>��z0Fail2banClient.configureServer.<locals>.<lambda>��?g����MbP?Z	configureZdone)rr�configureServerrPrQrr0rNrZwait_forrO)rZnonsyncrUrRrIr?rrTrrY�s*zFail2banClient.configureServercCszt|t�st|�}t|�dkrF|ddkrF|�|jd�}|sBdS|St|�dk�r|ddk�rt|�dkr�ddg|dd�<|�|�S|j�d	d�r�td
�|�dg�|�d�s�t	�
d�dS|j�d	d�r�td
�|��|�|j
�}|dur�|S|j�d	d��rtd�|�dg�St|�dk�r6|ddk�r6g}t|�dk�r�|ddv�rn|�|d�|d=n*t|�dk�r�t	�
d|dd��dS�q��q<|jdd��r&t|�dk�s�|ddk�r�d}|��\}}n|d}|�|�\}}|�s�dS|j�d	d��rtd�|�d|||ggd�St	�
d�dSn@t|�dk�rj|ddk�rj|j|gt|d�d�S|�|g�SdS)NrrrQrMFZrestart�reload�	--restart�interactivez  ## stop ... �stopzCould not stop serverz  ## load configuration ... z  ## start ... r)r[z--unbanz--if-existsz%Unexpected argument(s) for reload: %rr&r'z--allz  ## reload ... TzCould not find serverr%)�
isinstance�list�len�_Fail2banClient__startServerr/�_Fail2banClient__processCommandrSr
�_Fail2banClient__waitOnServerrr2Z	resetConf�initCmdLine�_argv�appendrErFr)�float)rr<r?ZoptsZjailrIrrrZ__processCommand�sh




zFail2banClient.__processCommandc
Gs�z&|��st�d�WdS|j|�Wnfty�}zN|jddkrNt�|�t�d|jdd�|jrv|j��WYd}~dSd}~00dS)	Nz%Could not find server, waiting failedFr,rzQCould not start server. Maybe an old socket file is still present. Try to remove r+zR. If you used fail2ban-client to start the server, adding the -x option will do itT)	rcrr2r)r	r/r;r�quit)rr3r@rrrZ__processStartStreamAfterWaitCs"

��
z,Fail2banClient.__processStartStreamAfterWaitcs�|dur�jd}t��}t�dd||f�d���fdd�}t�jd���}�jr�|�}||krrWd�dSt��|}t�dd	|�|d
kr�|��||kr�td��t�d|d
kr�dnd��t�	��qNWd�n1s�0YdS)Nr(r-z__waitOnServer: %rg������y?cstj��jd�o�j�d�S)Nr+r')rArGrHr/rEr�rZsltimerrrV_rWz/Fail2banClient.__waitOnServer.<locals>.<lambda>r,Tz  wait-time: %srzFailed to start serverrg�������?rXr$F)
r/�timerr0�
VisualWaitr�	heartbeatr	�min�sleep)r�aliveZmaxtimeZ	starttime�testZvisZrunfZwaittimerrirZ__waitOnServerXs(
*zFail2banClient.__waitOnServerc
CsJi}t�dkr<tjtjfD] }t�|�||<t�||j�q�zސz:|jdur�|�|�}|dur�|r�WWd|_|�	�D]\}}t�||�qvdSt
d��|j}|j�
dd��rzddl}Wnty�t
d��Yn0�zd}t|�dkr�|�|�}|�r�|�d�|��t�}|d	k�s&|d
k�rVWWWd|_|�	�D]\}}t�||��q:dS|dk�rj|��nl|dk�sz|�t�|��WnLt�y�}	z2|jd
dk�r�t�|	�n
t�|	�WYd}	~	n
d}	~	00�qWn"ttf�y�td��Yn0nxt|�dk�rF|��WWd|_|�	�D]\}}t�||��q*dS|�|�WWd|_|�	�D]\}}t�||��q`SWnvt�y�}	z\|jd
dk�r�t�|	�n
t�|	�WYd}	~	Wd|_|�	�D]\}}t�||��q�dSd}	~	00Wd|_|�	�D]\}}t�||��qn(d|_|�	�D]\}}t�||��q,0dS)NZ_MainThreadFTzInit of command line failedr\rzReadline not availablez
tab: completerrh�helpr r,r)r�signal�SIGTERM�SIGINT�	getsignal�_Fail2banClient__sigTERMhandlerrerdr�itemsr	Z_argsr/rS�readline�ImportErrorr`rb�parse_and_bindr!rZ	dispUsage�shlex�splitr6rr;r2�EOFError�KeyboardInterruptr
)
r�argvZ
_prev_signals�sr?Zshr3rxr<r@rrrrQrs�


2�

�


(
	��
��zFail2banClient.start)r$)Tr&)r F)T)TN)TN)r�
__module__�__qualname__rr!rvrE�propertyr*r)r4rNrarYrbrOrcrQrrrrr6s


2

&
!I
rc@s:eZdZdZdZdZddd�Zdd�Zd	d
�Zdd�Z	d
S)�_VisualWaitzJSmall progress indication (as "wonderful visual") during waiting process
	rr�
cCs
||_dSr)�maxpos)rr�rrrr�sz_VisualWait.__init__cCs|Srrrrrr�	__enter__�sz_VisualWait.__enter__cGs2|jr.tj�ddd|jd�tj��dS)N�
� �#)�posr8r9�writer�r:�rr3rrr�__exit__�sz_VisualWait.__exit__cCs�|js tj�dd|jd�|j|j7_|jdkrN|jdkrHdnd}nd}tj�|�tj��|j|jkr|d	|_n|jd
kr�d|_dS)z&Show or step for progress indicator
		z

INFO   [#r�z] Waiting on the server...
rrz #z# z
# r&rN)r�r8r9r�r��deltar:)rr�rrrrl�s


z_VisualWait.heartbeatN)r�)
rr�r��__doc__r�r�rr�r�rlrrrrr��s
r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_NotVisualWaitz8Mockup for invisible progress indication (not verbose)
	cCs|Srrrrrrr��sz_NotVisualWait.__enter__cGsdSrrr�rrrr��sz_NotVisualWait.__exit__cCsdSrrrrrrrl�sz_NotVisualWait.heartbeatN)rr�r�r�r�r�rlrrrrr��sr�cOs|dkrt|i|��St�S)z3Wonderful visual progress indication (if verbose)
	r)r�r�)r,r3�kwargsrrrrk�srkcCs&t�}|�|�rtd�ntd�dS)Nrr")rrQr)rr=rrr�exec_command_line�s

r�)!�
__author__Z
__copyright__Z__license__rAr{rrr+r8rjrrrZcsocketrr*rZfail2bancmdlinerr	r
rrr
Zserver.utilsrrrrrr�r�rkr�rrrr�<module>s4