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

���`�E�@s�dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
zddlZe�d�ZWndZYn0e��at�d�r�ejr�ejjdur�ejj�d�s�ejjaned	d
�dD��r�daejd
kr�dd�Zet�[ejd
k�rtdfdd�Zdd�Zn.tdfdd�Ze����dk�rDdd�ZneZdd�Zdd�Zdd�Z Gdd�de!�Z"Gdd �d ej#�Z$d!e_%dMd"d#�Z&ze'Z'Wne(�y�e)Z'Yn0ej*j+Z,d$d%�Z-e-ej*_+ej.j/Z0d&d'�Z1e1ej._/d(d)�Z2d*d+�Z3dNd.d/�Z4d0d1�Z5d2d3�Z6ejd4k�r,e7e8d5e9d6��nd7d8�Z:d9d:�Z;e�8d;ej<�Z=e�8d<ej<�Z>e�8d=ej<�Z?d>d?�Z@d@dA�ZAdBZBe�8dC�ZCdOdFdG�ZDe�r�dHdI�ZEndJdI�ZEGdKdL�dLe!�ZFdS)Pz<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav HalchenkoZGPL�N)�Lock�)�MyTimezlibcap.so.2ZANSI_ccs|]}t�|�dvVqdS))N�N)�os�getenv��.0�v�r�2/usr/lib/python3/dist-packages/fail2ban/helpers.py�	<genexpr>0�r
)ZLANGUAGE�LC_ALL�LC_CTYPEZLANGzUTF-8��cCs�t����}|dkr~|t��kr~t}t|d�sjzddlm}|dd�}Wn tyht�	t�t}Yn0t|d�r~|�
|�dS)N�ASCII�setdefaultencodingr)�load_dynamic�_sys�sys)r�getdefaultencoding�upper�
PREFER_ENC�hasattr�impr�ImportError�	importlib�reloadr)�encodingZoderZ__ldmrrr�__resetDefaultEncoding8s



r!�strictc	CsPzt|t�r|�||�WS|WSttfyJ|dkr:�|�|d�YS0dS�Nr"�replace)�
isinstance�bytes�decode�UnicodeDecodeError�UnicodeEncodeError��x�enc�errorsrrr�
uni_decodeYs
r.cCst|t�st|�S|�td�S�Nr$)r%r&�strr'r�r+rrr�
uni_stringbs
r2c	CsPzt|t�r|�||�WS|WSttfyJ|dkr:�|�|d�YS0dSr#)r%r0�encoder(r)r*rrrr.gs
cCst|t�st|�S|�td�Sr/)r%r0r3rr1rrrr2qs
cCst|t�st|�S|��dvS)N)�1Zon�trueZyes)r%r0�bool�lower)�valrrr�_as_boolys
�r9cCs"t��dd�\}}|jt|�fS)z+ Consistently format exception information N�)r�exc_info�__name__r2)Zcla�excrrr�formatExceptionInfo~sr>cCsRtj�|�}|�d�r"|dd�}|tddg�vrNtj�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)�sr@rrr�	mbasename�s
rIc@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�compressrrrrA�s	zTraceBack.__init__c	Cs�tjdd�dd�}dd�|D�}dd�|D�}|dg}|dd�D]@}|d|d	dkr||d	dd
|d7<qF|�|�qFd�dd�|D��}|jr�|}tj�|j|f�}t	�
d
d|�}|dkr�d|t|�d�}||_|S)N�d)�limit���cSs2g|]*}t|d�tj�|d�t|d�g�qS)rr)rIrrCrGr0�r	r+rrr�
<listcomp>�sz&TraceBack.__call__.<locals>.<listcomp>cSs6g|].}|ddvs|d�d�s|d|dg�qS)r)Zunittestzlogging.__init__rz	/unittestr:)rE)r	�errrrS�s�rr���z,%s�>cSs$g|]}dt|d�|df�qS)z%s:%srr)rIrRrrrrS�s��z>[^>]*$rz...)�	traceback�
extract_stack�append�joinrLrrC�commonprefixrK�re�sub�len)	rMZftb�entriesZentries_out�entryZsftbZ	prev_nextZ
common_prefixZcommon_prefix2rrr�__call__�s*�

�zTraceBack.__call__N)F)r<�
__module__�__qualname__�__doc__rArarrrrrJ�s
rJc@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)rN)�logging�	FormatterrArJ�_tb)rMrf�args�kwargsrNrrrrA�szFormatterWithTraceBack.__init__cCs|��|_|_tj�||�S�N)riZtbc�tbrgrh�format)rM�recordrrrrn�szFormatterWithTraceBack.formatN)r<rbrcrdrArnrrrrre�sreFcCsh|rt|j�r|�|jd�|r,dd�|_dd�tj_tjrdztj	��WnYn0t�
d�dS)NrcSsdSrlrrrrr�<lambda>�rz!__stopOnIOError.<locals>.<lambda>cSsdSrlr�rMrrrrp�r)r^�handlersZ
removeHandler�closerg�
StreamHandler�flush�
exitOnIOErrorr�stderr�exit)ZlogSysZlogHndlrrrr�__stopOnIOError�s
ryc
Ks�zt||||fi|��Wn�ttfyV}z |jdkr@t|��WYd}~n�d}~0ty�}zlzRd|t|�ffddd�|D�fffD](}zt||g|�R�Wq�Yq�0q�WnYn0WYd}~n
d}~00dS)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)r2)r	�arrrrS�rz__safeLog.<locals>.<listcomp>)�	__origLog�BrokenPipeError�IOError�errnory�	Exceptionr2)rM�level�msgrjrkrTrrr�	__safeLog�s"
�r�c
CsPzt|�Wn>ttfyJ}z"|jdkr4td|��WYd}~n
d}~00dS)zQSafe flush inject stopping endless logging on closed streams (redirected pipe).
	rzN)�__origLogFlushr}r~rry)rMrTrrr�__safeLogFlush
s

r�cCs$d|vrd|�d�d}t�|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	rBzfail2ban.%srU)�
rpartitionrg�	getLogger��namerrrr�sr�cCsRz.t|t�s|��rt|�}ntt|���}WntyLtd|��Yn0|S)NzInvalid log level %r)r%�int�isdigit�getattrrgr�AttributeError�
ValueError)�valueZllrrr�str2LogLevels
r�� %(message)sTcCsn|dkr@|dkrd|}|dkr*d|}qTd|}|rTd|}nd|}|rTd	|}|sjt�d
dd�|�}|S)
z(Custom log format for the verbose runs
	rrz6 | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |r:zB +%(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)NrHr)�mrrrrp8rz$getVerbosityFormat.<locals>.<lambda>)r\r])�	verbosityrfZaddtimeZpaddingrrr�getVerbosityFormat&s

r�cCs td�jddd�t�|||�S)z>Except hook used to log unhandled exceptions to Fail2Ban log
	Zfail2banz Unhandled exception in Fail2Ban:T)r;)r�Zcriticalr�__excepthook__)�exctyper�rWrrr�
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)�striprrrrrSKrzsplitwords.<locals>.<listcomp>z[ ,
]+)�list�filterr6r\�split)rHrrr�
splitwordsCsr�)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�r+�y�rrrr�_merge_dicts\s

r�cCs|��}|r|�|�|S)zCHelper to merge dicts to guarantee a copy result (r is never x).
		r�r�rrr�_merge_copy_dictsds
r�z^([^\[]+)(?:\[(.*)\])?\s*$z@([\w\-_\.]+)=(?:"([^"]*)"|\'([^\']*)\'|([^,\]]*))(?:,|\]\s*\[|$)zs(?:[^\[\s]+(?:\s*\[\s*(?:[\w\-_\.]+=(?:"[^"]*"|\'[^\']*\'|[^,\]]*)\s*(?:,|\]\s*\[)?\s*)*\])?\s*|\S+)(?=\n\s*|\s+|$)cCsvt�|�}|sdS|��\}}t�}|rnt�|�D]:}|�d�}dd�|�ddd�D�d}|��||��<q2||fS)	N)NNrcSsg|]}|dur|�qSrlr)r	r8rrrrS�sz"extractOptions.<locals>.<listcomp>r:r�r)�
OPTION_CRE�match�groups�dict�OPTION_EXTRACT_CRE�finditer�groupr�)�optionr�Zoption_nameZoptstrZoption_optsZoptmatchZoptr�rrr�extractOptions|s

��r�cCs
t�|�Srl)�OPTION_SPLIT_CRE�findall)r�rrr�splitWithOptions�sr��z<([^ <>]+)>rrcCs�tj}|}t|�}t�}t|d�}i}d}	|��D�]�}
|
|vs2|
|vrJq2|r^t|�|
��r^q2t||
�}}||�}
|�|
i�}|
�r�|
�	d�}||vr�|||
�
��}
q�||
ks�|�|d�tkr�td|
|||f��d}|r�|�|d|�}|du�r |�|�}|du�r |du�r ||�}|du�r:|||
�
��}
q�t
|t��sNt|�}|�d||�}|�|d�d||<|||
���}
q�||k�r�||��r�|||
<d	}	t|�t|�k�r�|��}|||
<d
|vr2|�|
�q2|	s&�q�q&|S)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.
	�
getRawItemFrzpproperties contain self referencing definitions and cannot be resolved, fail tag: %s, found: %s in %s, value: %sN�?z<%s>rT�<)�TAG_CRE�searchrFr�keys�callabler�r2�getr��end�MAX_TAG_REPLACE_COUNTr�r%r0r$�start�idr��add)ZinptagsZconditional�ignoreZaddreplZ
tre_searchZtagsZdoneZ	noRecReplZ	repCountsZrepFlag�tagr�Zorgvalr�ZrplcZrtag�replrrr�substituteRecursiveTags�sb


��




r�cCs>z,tjdkr|��}nt|�}t�d|�WnYn0dS)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_infor3r&�_libcapZprctlr�rrr�prctl_set_th_name�s

r�cCsdSrlrr�rrrr�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|jstt|��|�|_|jSrl)�	_instance�superr��__new__)�cls��	__class__rrr�s�zBgService.__new__cCs2d|_d|_d|_|j|_ttd�r.t�d�dS)Ni��rO�
set_thresholdr)�_BgService__serviceTime�_BgService__periodTime�_BgService__threshold�_BgService__countr�gcr�rqrrrrAs
zBgService.__init__FcCs�|jd8_|s.|jdks*t��|jkr.dStj�|�s>dSzNt��|jkr^Wtj��dSt�	�t��|j
|_|j|_Wtj��dStj��0dS)NrrFT)r�r�timer�r��_mutex�acquire�releaser�Zcollectr�r�)rMZforce�waitrrr�service)s$
�
�zBgService.service)FF)r<rbrcrdrr�r�r�rAr��
__classcell__rrr�rr�sr�)NN)r�TT)rrN)G�
__author__Z__license__r�Zlocalergrr\rrWZ	threadingrZ
server.mytimerrZctypesZCDLLr�Zgetpreferredencodingr�
startswith�stdoutr �allr�r!r.r2rrr0r9r>rI�objectrJrhrervryr}�	NameErrorr~ZLoggerZ_logr|r�rtrur�r�r�r�r�r�r��eval�compile�__file__r�r��DOTALLr�r�r�r�r�r�r�r�r�r�rrrr�<module>s�

 

	
	

.

	


�
��	
�
c