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: //usr/lib/python3.9/site-packages/fail2ban/__pycache__/helpers.cpython-39.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 Halchenko�GPL�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)�LANGUAGE�LC_ALL�LC_CTYPE�LANG�UTF-8�strictc	CsPzt|t�r|�||�WS|WSttfyJ|dkr:�|�|d�YS0dS)Nr�replace)�
isinstance�bytes�decode�UnicodeDecodeError�UnicodeEncodeError)�x�enc�errorsrrr
�
uni_decode@s
rcCst|t�st|�S|�td�S)Nr)rr�strr�
PREFER_ENC�rrrr
�
uni_stringIs
r#cCs
t|d�S)Nr)rr"rrr
�	uni_bytesMsr$cCst|t�st|�S|��dvS)N)�1�on�true�yes)rr �bool�lower)�valrrr
�_as_boolPs
�r,cCs"t��dd�\}}|jt|�fS)z+ Consistently format exception information N�)�sys�exc_info�__name__r#)Zcla�excrrr
�formatExceptionInfoUsr2cCsRtj�|�}|�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)�sr4rrr
�	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�compressrrr
r5rs	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=rr7r;r �r
rrrr
�
<listcomp>�sz&TraceBack.__call__.<locals>.<listcomp>cSs6g|].}|ddvs|d�d�s|d|dg�qS)r)Zunittestzlogging.__init__rz	/unittestr-)r9)r
�errr
rG�s�rr���z,%s�>cSs$g|]}dt|d�|df�qS)z%s:%srr)r=rFrrr
rG�s��z>[^>]*$rz...)�	traceback�
extract_stack�append�joinr@rr7�commonprefixr?�re�sub�len)	rAZftb�entriesZentries_out�entryZsftbZ	prev_nextZ
common_prefixZcommon_prefix2rrr
�__call__~s*�

�zTraceBack.__call__N)F)r0�
__module__�__qualname__�__doc__r5rUrrrr
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)rB)�logging�	Formatterr5r>�_tb)rArZ�args�kwargsrBrrr
r5�szFormatterWithTraceBack.__init__cCs|��|_|_tj�||�S�N)r]Ztbc�tbr[r\�format)rA�recordrrr
rb�szFormatterWithTraceBack.formatN)r0rVrWrXr5rbrrrr
rY�srYFcCsh|rt|j�r|�|jd�|r,dd�|_dd�tj_tjrdztj	��WnYn0t�
d�dS)NrcSsdSr`rrrrr
�<lambda>�rz!__stopOnIOError.<locals>.<lambda>cSsdSr`r�rArrr
rd�r)rR�handlers�
removeHandler�closer[�
StreamHandler�flush�
exitOnIOErrorr.�stderr�exit)�logSysZlogHndlrrrr
�__stopOnIOError�s
roc
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
�arrr
rG�rz__safeLog.<locals>.<listcomp>)�	__origLog�BrokenPipeError�IOError�errnoro�	Exceptionr#)rA�level�msgr^r_rHrrr
�	__safeLog�s"
�ryc
CsPzt|�Wn>ttfyJ}z"|jdkr4td|��WYd}~n
d}~00dS)zQSafe flush inject stopping endless logging on closed streams (redirected pipe).
	rpN)�__origLogFlushrsrtruro)rArHrrr
�__safeLogFlush�s

r{cCs$d|vrd|�d�d}t�|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	r6zfail2ban.%srI)�
rpartitionr[�	getLogger��namerrr
r}�sr}cCsRz.t|t�s|��rt|�}ntt|���}WntyLtd|��Yn0|S)NzInvalid log level %r)r�int�isdigit�getattrr[�upper�AttributeError�
ValueError)�valueZllrrr
�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)Nr<r)�mrrr
rd
rz$getVerbosityFormat.<locals>.<lambda>)rPrQ)�	verbosityrZZaddtime�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)r/)r}�criticalr.�__excepthook__)�exctyper�rKrrr
�
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)�stripr	rrr
rGrzsplitwords.<locals>.<listcomp>z[\s,]+)�list�filterr)rP�split)r<rrr
�
splitwordssr�cCs|ri|�|�S|S)zHelper to merge dicts.
	r�r�yrrr
�_merge_dictssr�cCsi|�|�S)zBHelper to merge dicts to guarantee a copy result (r is never x).
	rr�rrr
�_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+rrr
rGKsz"extractOptions.<locals>.<listcomp>r-r��)
�
OPTION_CRE�matchr��groups�dict�OPTION_EXTRACT_CRE�finditer�group�startr�)�optionr��option_nameZoptstrZoption_optsZoptmatch�optr�rrr
�extractOptions;s0

 �
�
��r�cCs
t�|�Sr`)�OPTION_SPLIT_CRE�findall)r�rrr
�splitWithOptionsPsr�r�z<([^ <>]+)>rrcCs�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�searchr:�hasattr�keys�callabler�r#�getr��end�MAX_TAG_REPLACE_COUNTr�rr rr��id�copy�add)ZinptagsZconditional�ignoreZaddreplZ
tre_searchZtags�doneZ	noRecReplZ	repCountsZrepFlag�tagr�Zorgvalr�ZrplcZrtag�replrrr
�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�_libcapZprctlr~rrr
�prctl_set_th_name�s
r�cCsdSr`rr~rrr
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__rr
r��s�zBgService.__new__cCs2d|_d|_d|_|j|_ttd�r.t�d�dS)Ni��rC�
set_thresholdr)�_BgService__serviceTime�_BgService__periodTime�_BgService__threshold�_BgService__countr��gcr�rerrr
r5�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�)rA�force�waitrrr
�service�s$
�
�zBgService.service)FF)r0rVrWrXrr�r�r�r5r��
__classcell__rrr�r
r��sr�)NN)r�TT)rrN)>�
__author__�__license__r��localer[rrPr.rK�	threadingrZ
server.mytimer�	importlib�ctypes�CDLLr��getpreferredencodingr!�
startswith�stdout�encoding�allrr#r$r,r2r=�objectr>r\rYrkro�Logger�_logrrryrirjrzr{r}r�r�r�r�r�r��compile�DOTALLr�r�r�r�r�r�r�r�r�r�rrrr
�<module>s~

 
	
.
	



��	
�
c