https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/fail2ban/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/fail2ban/__pycache__/helpers.cpython-310.pyc
o

;s*b�E�@s�dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
zddlZe�d�ZWndZYe��at�d�rkejr`ejjdur`ejj�d�s`ejjaned	d
�dD��rkdaejd
krydd�Zet�[ejd
kr�tdfdd�Zdd�Zntdfdd�Ze����dkr�dd�ZneZdd�Zdd�Zdd�Z Gdd�de!�Z"Gdd �d ej#�Z$d!e_%dMd"d#�Z&ze'Z'Wne(y�e)Z'Ynwej*j+Z,d$d%�Z-e-ej*_+ej.j/Z0d&d'�Z1e1ej._/d(d)�Z2d*d+�Z3dNd.d/�Z4d0d1�Z5d2d3�Z6ejd4k�re7e8d5e9d6��nd7d8�Z:d9d:�Z;e�8d;ej<�Z=e�8d<ej<�Z>e�8d=ej<�Z?d>d?�Z@d@dA�ZAdBZBe�8dC�ZC	D	dOdFdG�ZDe�rLdHdI�ZEndJdI�ZEGdKdL�dLe!�ZFdS)Pz<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav Halchenko�GPL�N)�Lock�)�MyTimezlibcap.so.2�ANSI_ccs�|]
}t�|�dvVqdS))N�N)�os�getenv��.0�v�r
�2/usr/lib/python3/dist-packages/fail2ban/helpers.py�	<genexpr>0s�r)�LANGUAGE�LC_ALL�LC_CTYPE�LANGzUTF-8��cCs�t����}|dkrA|t��krCt}t|d�s5z
ddlm}|dd�}Wnty4t�	t�t}Ynwt|d�rE|�
|�dSdSdSdS)N�ASCII�setdefaultencodingr)�load_dynamic�_sys�sys)r�getdefaultencoding�upper�
PREFER_ENC�hasattr�impr�ImportError�	importlib�reloadr)�encoding�oder�__ldmr
r
r�__resetDefaultEncoding8s

�
�
r&�strictc	C�Lzt|t�r
|�||�WS|WSttfy%|dkr�|�|d�YSw�Nr'�replace)�
isinstance�bytes�decode�UnicodeDecodeError�UnicodeEncodeError��x�enc�errorsr
r
r�
uni_decodeY�
�r4cCst|t�s	t|�S|�td�S�Nr*)r+r,�strr-r�r1r
r
r�
uni_stringb�
r9c	Cr(r))r+r7�encoder.r/r0r
r
rr4gr5cCst|t�s	t|�S|�td�Sr6)r+r7r;rr8r
r
rr9qr:cCst|t�s	t|�S|��dvS)N)�1�on�true�yes)r+r7�bool�lower)�valr
r
r�_as_boolys
�rCcCs"t��dd�\}}|jt|�fS)z+ Consistently format exception information N�)r�exc_info�__name__r9)�cla�excr
r
r�formatExceptionInfo~srIcCsRtj�|�}|�d�r|dd�}|tddg�vr'tj�tj�|��d|}|S)zaCustom function to include directory name if filename is too common

	Also strip .py at the end
	z.pyN����base�__init__�.)r�path�basename�endswith�set�dirname)�srKr
r
r�	mbasename�s
rTc@s"eZdZdZddd�Zdd�ZdS)	�	TraceBackz7Customized traceback to be included in debug messages
	FcCsd|_||_dS)z�Initialize TrackBack metric

		Parameters
		----------
		compress : bool
		  if True then prefix common with previous invocation gets
		  replaced with ...
		rN)�_TraceBack__prev�_TraceBack__compress)�self�compressr
r
rrL�s	
zTraceBack.__init__c	Cs�tjdd�dd�}dd�|D�}dd�|D�}|dg}|dd�D] }|d|d	dkr>|d	dd
|d7<q#|�|�q#d�dd�|D��}|jrt|}tj�|j|f�}t	�
d
d|�}|dkrqd|t|�d�}||_|S)N�d)�limit���cSs2g|]}t|d�tj�|d�t|d�g�qS)rr)rTrrNrRr7�rr1r
r
r�
<listcomp>�s&�z&TraceBack.__call__.<locals>.<listcomp>cSs6g|]}|ddvs|d�d�s|d|dg�qS)r)�unittestzlogging.__init__rz	/unittestrD)rP)r�er
r
rr^�s��rr���z,%s�>cSs$g|]}dt|d�|df�qS)z%s:%srr)rTr]r
r
rr^�s
�
�z>[^>]*$rz...)�	traceback�
extract_stack�append�joinrWrrN�commonprefixrV�re�sub�len)	rX�ftb�entries�entries_out�entry�sftb�	prev_next�
common_prefix�common_prefix2r
r
r�__call__�s*�

�zTraceBack.__call__N)F)rF�
__module__�__qualname__�__doc__rLrsr
r
r
rrU�s
rUc@s eZdZdZdd�Zdd�ZdS)�FormatterWithTraceBackz}Custom formatter which expands %(tb) and %(tbc) with tracebacks

	TODO: might need locking in case of compressed tracebacks
	cOs6tjj|g|�Rd|i|��d|v}t|d�|_dS)N�fmtz%(tbc)s)rY)�logging�	FormatterrLrU�_tb)rXrx�args�kwargsrYr
r
rrL�szFormatterWithTraceBack.__init__cCs|��|_|_tj�||�S�N)r{�tbc�tbryrz�format)rX�recordr
r
rr��szFormatterWithTraceBack.formatN)rFrtrurvrLr�r
r
r
rrw�srwFcCsh|rt|j�r|�|jd�|rdd�|_dd�tj_tjr2ztj	��WnYt�
d�dSdS)NrcS�dSr~r
r
r
r
r�<lambda>��z!__stopOnIOError.<locals>.<lambda>cSr�r~r
�rXr
r
rr��r�)rj�handlers�
removeHandler�closery�
StreamHandler�flush�
exitOnIOErrorr�stderr�exit)�logSys�logHndlrr
r
r�__stopOnIOError�s
�r�c
Ks�zt||||fi|��WdSttfy&}z
|jdkr!t|��d}~wtyk}z:z'd|t|�ffddd�|D�fffD]}zt||g|�R�Wq@Yq@WnYWYd}~dSWYd}~dSd}~ww)a�Safe log inject to avoid possible errors by unsafe log-handlers, 
	concat, str. conversion, representation fails, etc.

	Used to intrude exception-safe _log-method instead of _log-method 
	of Logger class to be always safe by logging and to get more-info about.

	See testSafeLogging test-case for more information. At least the errors
	covered in phase 3 seems to affected in all known pypy/python versions 
	until now.
	� Nzlogging failed: %r on %sz
  args: %rcSsg|]}t|��qSr
)r9)r�ar
r
rr^��z__safeLog.<locals>.<listcomp>)�	__origLog�BrokenPipeError�IOError�errnor��	Exceptionr9)rX�level�msgr|r}r`r
r
r�	__safeLog�s,
������r�c
CsBzt|�WdSttfy }z|jdkrtd|��d}~ww)zQSafe flush inject stopping endless logging on closed streams (redirected pipe).
	r�N)�__origLogFlushr�r�r�r�)rXr`r
r
r�__safeLogFlush
s

��r�cCs$d|vr
d|�d�d}t�|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	rMzfail2ban.%sra)�
rpartitionry�	getLogger��namer
r
rr�s
r�cCsPzt|t�s
|��rt|�}W|Stt|���}W|Sty'td|��w)NzInvalid log level %r)r+�int�isdigit�getattrryr�AttributeError�
ValueError)�value�llr
r
r�str2LogLevels
���r�� %(message)sTcCsn|dkr |dkrd|}|dkrd|}nd|}|rd|}n
d|}|r*d	|}|s5t�d
dd�|�}|S)
z(Custom log format for the verbose runs
	rrz6 | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |rDzB +%(relativeCreated)5d %(thread)X %(name)-25.25s %(levelname)-5.5sz %(thread)X %(levelname)-5.5sz %(asctime)-15sz)%(name)-24s[%(process)d]: %(levelname)-7sz%(asctime)s z(?<=\))-?\d+(?:\.\d+)?scSsdS)NrSr
)�mr
r
rr�8r�z$getVerbosityFormat.<locals>.<lambda>)rhri)�	verbosityrx�addtime�paddingr
r
r�getVerbosityFormat&s
�r�cCs td�jddd�t�|||�S)z>Except hook used to log unhandled exceptions to Fail2Ban log
	�fail2banz Unhandled exception in Fail2Ban:T)rE)r��criticalr�__excepthook__)�exctyper�rcr
r
r�
excepthook<s�r�cCs(|sgStttdd�t�d|�D���S)z�Helper to split words on any comma, space, or a new line

	Returns empty list if input is empty (or None) and filters
	out empty entries
	cSsg|]}|���qSr
)�stripr
r
r
rr^Kr�zsplitwords.<locals>.<listcomp>z[ ,
]+)�list�filterr@rh�split)rSr
r
r�
splitwordsCs r�)r�z�if 1:
	def _merge_dicts(x, y):
		"""Helper to merge dicts.
		"""
		if y:
			return {**x, **y}
		return x
	
	def _merge_copy_dicts(x, y):
		"""Helper to merge dicts to guarantee a copy result (r is never x).
		"""
		return {**x, **y}
	�execcCs|}|r
|��}|�|�|S)zHelper to merge dicts.
		��copy�update�r1�y�rr
r
r�_merge_dicts\s

r�cCs|��}|r|�|�|S)zCHelper to merge dicts to guarantee a copy result (r is never x).
		r�r�r
r
r�_merge_copy_dictsds
r�z^([^\[]+)(?:\[(.*)\])?\s*$z@([\w\-_\.]+)=(?:"([^"]*)"|\'([^\']*)\'|([^,\]]*))(?:,|\]\s*\[|$)zs(?:[^\[\s]+(?:\s*\[\s*(?:[\w\-_\.]+=(?:"[^"]*"|\'[^\']*\'|[^,\]]*)\s*(?:,|\]\s*\[)?\s*)*\])?\s*|\S+)(?=\n\s*|\s+|$)cCsvt�|�}|s	dS|��\}}t�}|r7t�|�D]}|�d�}dd�|�ddd�D�d}|��||��<q||fS)	N�NNrcSsg|]}|dur|�qSr~r
)rrBr
r
rr^�sz"extractOptions.<locals>.<listcomp>rDr�r)�
OPTION_CRE�match�groups�dict�OPTION_EXTRACT_CRE�finditer�groupr�)�optionr��option_name�optstr�option_opts�optmatch�optr�r
r
r�extractOptions|s

��r�cCs
t�|�Sr~)�OPTION_SPLIT_CRE�findall)r�r
r
r�splitWithOptions�s
r��z<([^ <>]+)>rr
cCs�tj}|}t|�}t�}t|d�}i}	d}	|��D]�}
|
|vs$|
|vr%q|r/t|�|
��r/qt||
�}}||�}
|�|
i�}|
r�|
�	d�}||vrT|||
�
��}
qA||
ks`|�|d�tkrjtd|
|||f��d}|rw|�|d|�}|dur�|�|�}|dur�|dur�||�}|dur�|||
�
��}
qAt
|t�s�t|�}|�d||�}|�|d	�d||<|||
���}
|
sC||kr�||�r�|||
<d}	t|�t|�kr�|��}|||
<d
|vr�|�|
�q|	s�	|Sq)a|Sort out tag definitions within other tags.
	Since v.0.9.2 supports embedded interpolation (see test cases for examples).

	so:		becomes:
	a = 3		a = 3
	b = <a>_3	b = 3_3

	Parameters
	----------
	inptags : dict
		Dictionary of tags(keys) and their values.

	Returns
	-------
	dict
		Dictionary of tags(keys) and their values, with tags
		within the values recursively replaced.
	�
getRawItemTFrzpproperties contain self referencing definitions and cannot be resolved, fail tag: %s, found: %s in %s, value: %sN�?z<%s>r�<)�TAG_CRE�searchrQr�keys�callabler�r9�getr��end�MAX_TAG_REPLACE_COUNTr�r+r7r*�start�idr��add)�inptags�conditional�ignore�addrepl�
tre_search�tags�done�	noRecRepl�	repCounts�repFlag�tagr��orgvalr��rplc�rtag�replr
r
r�substituteRecursiveTags�sj


��
�'��r�cCs<ztjdkr|��}nt|�}t�d|�WdSYdS)z�Helper to set real thread name (used for identification and diagnostic purposes).

		Side effect: name can be silently truncated to 15 bytes (16 bytes with NTS zero)
		r�N)r�version_infor;r,�_libcap�prctlr�r
r
r�prctl_set_th_name�s

r�cCr�r~r
r�r
r
rr�scs<eZdZdZe�ZdZ�fdd�Zdd�Zd
dd	�Z	�Z
S)�	BgServicez{Background servicing

	Prevents memory leak on some platforms/python versions, 
	using forced GC in periodical intervals.
	Ncs|jstt|��|�|_|jSr~)�	_instance�superr��__new__)�cls��	__class__r
rr�s�zBgService.__new__cCs6d|_d|_d|_|j|_ttd�rt�d�dSdS)Ni��rZ�
set_thresholdr)�_BgService__serviceTime�_BgService__periodTime�_BgService__threshold�_BgService__countr�gcrr�r
r
rrLs
�zBgService.__init__FcCs�|jd8_|s|jdkst��|jkrdStj�|�sdSz't��|jkr/Wtj��dSt�	�t��|j
|_|j|_Wtj��dStj��w)NrrFT)rr�timerr��_mutex�acquire�releaser�collectrr)rX�force�waitr
r
r�service)s�zBgService.service)FF)rFrtrurvrr
r�r�rLr�
__classcell__r
r
rrr�sr�r�)r�TT)rr
N)G�
__author__�__license__r�localeryrrhrrc�	threadingr�
server.mytimerr!�ctypes�CDLLr��getpreferredencodingr�
startswith�stdoutr#�allr�r&r4r9rrr7rCrIrT�objectrUrzrwr�r�r��	NameErrorr��Logger�_logr�r�r�r�r�r�r�r�r�r�r��eval�compile�__file__r�r��DOTALLr�r�r�r�r�r�r�r�r�r�r
r
r
r�<module>s�
 



		

.
�	


�
��	

�c


https://t.me/RX1948 - 2025