HEX
Server: LiteSpeed
System: Linux 112.webhostingindonesia.co.id 5.14.0-570.62.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 10:10:59 EST 2025 x86_64
User: iyfwylsv (10313)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/fail2ban/__pycache__/helpers.cpython-39.opt-2.pyc
a

��}a[/&�@s*dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
zddlZe�d�ZWndZYn0e��Ze�d�r�ejr�ejjdur�ejj�d�s�ejjZned	d
�dD��r�dZed
fdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZGdd�de�ZGdd�dej�Z de_!dGdd �Z"ej#j$Z%d!d"�Z&e&ej#_$ej'j(Z)d#d$�Z*e*ej'_(d%d&�Z+d'd(�Z,dHd+d,�Z-d-d.�Z.d/d0�Z/d1d2�Z0d3d4�Z1e�2d5ej3�Z4e�2d6ej3�Z5e�2d7ej3�Z6d8d9�Z7d:d;�Z8d<Z9e�2d=�Z:dId@dA�Z;e�rdBdC�Z<ndDdC�Z<GdEdF�dFe�Z=dS)Jz<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav HalchenkoZGPL�N)�Lock�)�MyTimezlibcap.so.2ZANSI_ccs|]}t�|�dvVqdS))N�N)�os�getenv��.0�v�r�4/usr/lib/python3.9/site-packages/fail2ban/helpers.py�	<genexpr>0�r
)ZLANGUAGE�LC_ALL�LC_CTYPEZLANG�UTF-8�strictc	CsPzt|t�r|�||�WS|WSttfyJ|dkr:�|�|d�YS0dS)Nr�replace)�
isinstance�bytes�decode�UnicodeDecodeError�UnicodeEncodeError)�x�enc�errorsrrr�
uni_decode@s
rcCst|t�st|�S|�td�S)Nr)rr�strr�
PREFER_ENC�rrrr�
uni_stringIs
r cCs
t|d�S)Nr)rrrrr�	uni_bytesMsr!cCst|t�st|�S|��dvS)N)�1�on�true�yes)rr�bool�lower)�valrrr�_as_boolPs
�r)cCs"t��dd�\}}|jt|�fS)z+ Consistently format exception information N�)�sys�exc_info�__name__r )Zcla�excrrr�formatExceptionInfoUsr/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)�sr1rrr�	mbasenameas
r:c@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r2rs	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)r:rr4r8r�r	rrrr�
<listcomp>�sz&TraceBack.__call__.<locals>.<listcomp>cSs6g|].}|ddvs|d�d�s|d|dg�qS)r)Zunittestzlogging.__init__rz	/unittestr*)r6)r	�errrrD�s�rr���z,%s�>cSs$g|]}dt|d�|df�qS)z%s:%srr)r:rCrrrrD�s��z>[^>]*$rz...)�	traceback�
extract_stack�append�joinr=rr4�commonprefixr<�re�sub�len)	r>Zftb�entriesZentries_out�entryZsftbZ	prev_nextZ
common_prefixZcommon_prefix2rrr�__call__~s*�

�zTraceBack.__call__N)F)r-�
__module__�__qualname__�__doc__r2rRrrrrr;ns
r;c@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)r?)�logging�	Formatterr2r;�_tb)r>rW�args�kwargsr?rrrr2�szFormatterWithTraceBack.__init__cCs|��|_|_tj�||�S�N)rZZtbc�tbrXrY�format)r>�recordrrrr_�szFormatterWithTraceBack.formatN)r-rSrTrUr2r_rrrrrV�srVFcCsh|rt|j�r|�|jd�|r,dd�|_dd�tj_tjrdztj	��WnYn0t�
d�dS)NrcSsdSr]rrrrr�<lambda>�rz!__stopOnIOError.<locals>.<lambda>cSsdSr]r�r>rrrra�r)rO�handlersZ
removeHandler�closerX�
StreamHandler�flush�
exitOnIOErrorr+�stderr�exit)ZlogSysZlogHndlrrrr�__stopOnIOError�s
rjc
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)r )r	�arrrrD�rz__safeLog.<locals>.<listcomp>)�	__origLog�BrokenPipeError�IOError�errnorj�	Exceptionr )r>�level�msgr[r\rErrr�	__safeLog�s"
�rtc
CsPzt|�Wn>ttfyJ}z"|jdkr4td|��WYd}~n
d}~00dS)zQSafe flush inject stopping endless logging on closed streams (redirected pipe).
	rkN)�__origLogFlushrnrorprj)r>rErrr�__safeLogFlush�s

rvcCs$d|vrd|�d�d}t�|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	r3zfail2ban.%srF)�
rpartitionrX�	getLogger��namerrrrx�srxcCsRz.t|t�s|��rt|�}ntt|���}WntyLtd|��Yn0|S)NzInvalid log level %r)r�int�isdigit�getattrrX�upper�AttributeError�
ValueError)�valueZllrrr�str2LogLevel�s
r�� %(message)sTcCsn|dkr@|dkrd|}|dkr*d|}qTd|}|rTd|}nd|}|rTd	|}|sjt�d
dd�|�}|S)
z(Custom log format for the verbose runs
	r�z6 | %(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)Nr9r)�mrrrra
rz$getVerbosityFormat.<locals>.<lambda>)rMrN)�	verbosityrWZaddtimeZpaddingrrr�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,)rxZcriticalr+�__excepthook__)�exctyper�rHrrr�
excepthooks�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rDrzsplitwords.<locals>.<listcomp>z[\s,]+)�list�filterr&rM�split)r9rrr�
splitwordssr�cCs|ri|�|�S|S)zHelper to merge dicts.
	r�r�yrrr�_merge_dictssr�cCsi|�|�S)zBHelper to merge dicts to guarantee a copy result (r is never x).
	rr�rrr�_merge_copy_dicts&sr�z^([^\[]+)(?:\[(.*)\])?\s*$zf\s*([\w\-_\.]+)=(?:"([^"]*)"|\'([^\']*)\'|([^,\]]*))(?:,|\]\s*\[|$|(?P<wrngA>.+))|,?\s*$|(?P<wrngB>.+)zs(?:[^\[\s]+(?:\s*\[\s*(?:[\w\-_\.]+=(?:"[^"]*"|\'[^\']*\'|[^,\]]*)\s*(?:,|\]\s*\[)?\s*)*\])?\s*|\S+)(?=\n\s*|\s+|$)cCs�t�|�}|std��|��\}}t�}|r�t�|�D]�}|�d�rptd|�d�|�d�|�d�dd�f��|�d�r�td|�d�|�d�dd�f��|�d�}|s�q6d	d
�|�ddd
�D�d}|�	�||�	�<q6||fS)Nzunexpected option syntaxZwrngAz+unexpected syntax at %d after option %r: %srr�ZwrngBz'expected option, wrong syntax at %d: %scSsg|]}|dur|�qSr]r)r	r(rrrrDKsz"extractOptions.<locals>.<listcomp>r*r��)
�
OPTION_CRE�matchr��groups�dict�OPTION_EXTRACT_CRE�finditer�group�startr�)�optionr�Zoption_nameZoptstrZoption_optsZoptmatch�optr�rrr�extractOptions;s0

 �
�
��r�cCs
t�|�Sr])�OPTION_SPLIT_CRE�findall)r�rrr�splitWithOptionsPsr�r�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�searchr7�hasattr�keys�callabler�r �getr��end�MAX_TAG_REPLACE_COUNTr�rrrr��id�copy�add)ZinptagsZconditional�ignoreZaddreplZ
tre_searchZtagsZdoneZ	noRecReplZ	repCountsZrepFlag�tagr�Zorgvalr�ZrplcZrtag�replrrr�substituteRecursiveTags^sb


��




r�cCs*z|��}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)
		�N)�encode�_libcapZprctlryrrr�prctl_set_th_name�s
r�cCsdSr]rryrrr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|��|�|_|jSr])�	_instance�superr��__new__)�cls��	__class__rrr��s�zBgService.__new__cCs2d|_d|_d|_|j|_ttd�r.t�d�dS)Ni��r@�
set_thresholdr)�_BgService__serviceTime�_BgService__periodTime�_BgService__threshold�_BgService__countr��gcr�rbrrrr2�s
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�)r>�force�waitrrr�service�s$
�
�zBgService.service)FF)r-rSrTrUrr�r�r�r2r��
__classcell__rrr�rr��sr�)NN)r�TT)rrN)>�
__author__Z__license__r�ZlocalerXrrMr+rH�	threadingrZ
server.mytimer�	importlibZctypesZCDLLr��getpreferredencodingr�
startswith�stdout�encoding�allrr r!r)r/r:�objectr;rYrVrgrjZLogger�_logrmrtrerfrurvrxr�r�r�r�r�r��compile�DOTALLr�r�r�r�r�r�r�r�r�r�rrrr�<module>s~

 
	
.
	



��	
�
c