HEX
Server: nginx/1.30.4
System: Linux d-twindigital-web-1.host-ed.eu 4.18.0-553.141.2.el8_10.x86_64 #1 SMP Wed Jul 8 10:28:18 EDT 2026 x86_64
User: u_twindigital_html (1009)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/fail2ban/__pycache__/helpers.cpython-36.opt-1.pyc
3

=�Z]�=�@s dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
ej�atjd�r�ejr�ejjdk	r�ejjjd�r�ejjanedd	�dCD��r�daejdDkr�dd�Zet�[ejdEkr�tdfdd�Zdd�Zn.tdfdd�Zej�j�dk�rdd�ZneZdd�Zdd�Zdd�ZGdd �d e�ZGd!d"�d"ej �Z!ej"j#Z$d#d$�Z%e%ej"_#d%d&�Z&d'd(�Z'dFd+d,�Z(d-d.�Z)d/d0�Z*ejdGk�r�e+e,d2e-d3��nd4d5�Z.d6d7�Z/ej,d8ej0�Z1ej,d9ej0�Z2d:d;�Z3d<Z4ej,d=�Z5d>fdfd?d@�Z6GdAdB�dBe�Z7dS)Hz<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav HalchenkoZGPL�N)�Lock�)�MyTimeZANSI_ccs|]}tj|�dkVqdS)N�)Nr)�os�getenv)�.0�v�r
�/usr/lib/python3.6/helpers.py�	<genexpr>)sr�LANGUAGE�LC_ALL�LC_CTYPE�LANGzUTF-8�cCs�tj�j�}|dkr�|tj�kr�t}t|d�slyddlm}|dd�}Wn"tk
rjtjt�t}YnXt|d�r�|j	|�dS)N�ASCII�setdefaultencodingr)�load_dynamic�_sys�sys)
r�getdefaultencoding�upper�
PREFER_ENC�hasattr�impr�ImportError�reloadr)�encodingZoderZ__ldmr
r
r�__resetDefaultEncoding1s



r�strictcCsJyt|t�r|j||�S|Sttfk
rD|dkr8�|j|d�SXdS)Nr �replace)�
isinstance�bytes�decode�UnicodeDecodeError�UnicodeEncodeError)�x�enc�errorsr
r
r�
uni_decodeRs
r*cCst|t�st|�S|jtd�S)Nr!)r"r#�strr$r)r'r
r
r�
uni_string[s
r,cCsJyt|t�r|j||�S|Sttfk
rD|dkr8�|j|d�SXdS)Nr r!)r"r+�encoder%r&)r'r(r)r
r
rr*`s
cCst|t�st|�S|jtd�S)Nr!)r"r+r-r)r'r
r
rr,js
cCst|t�st|�S|j�dkS)N�1�on�true�yes)r.r/r0r1)r"r+�bool�lower)�valr
r
r�_as_boolrsr5cCs"tj�dd�\}}|jt|�fS)z+ Consistently format exception information N�)r�exc_info�__name__r,)Zcla�excr
r
r�formatExceptionInfowsr:cCsRtjj|�}|jd�r"|dd�}|tddg�krNtjjtjj|��d|}|S)zaCustom function to include directory name if filename is too common

	Also strip .py at the end
	z.pyNr�base�__init__�.���)r�path�basename�endswith�set�dirname)�sr;r
r
r�	mbasename�s
rEc@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
rr<�s	zTraceBack.__init__c	Cs�tjdd�dd�}dd�|D�}dd�|D�}|dg}xP|dd�D]@}|d|ddkr~|ddd	|d7<qH|j|�qHWd
jdd�|D��}|jr�|}tjj|j|f�}t	j
dd
|�}|d
kr�d|t|�d�}||_|S)N�d)�limitr6cSs2g|]*}t|d�tjj|d�t|d�g�qS)rr)rErr?rCr+)rr'r
r
r�
<listcomp>�sz&TraceBack.__call__.<locals>.<listcomp>cSs6g|].}|ddkp |djd�s|d|dg�qS)r�unittest�logging.__init__rz	/unittestr6)rNrO)rA)r�er
r
rrM�srrz,%s�>cSs$g|]}dt|d�|df�qS)z%s:%srr)rE)rr'r
r
rrM�sz>[^>]*$rz...������rS)�	traceback�
extract_stack�append�joinrHrr?�commonprefixrG�re�sub�len)	rIZftbZentriesZentries_out�entryZsftbZ	prev_nextZ
common_prefixZcommon_prefix2r
r
r�__call__�s$


zTraceBack.__call__N)F)r8�
__module__�__qualname__�__doc__r<r]r
r
r
rrF�s
rFc@s eZdZdZdd�Zdd�ZdS)�FormatterWithTraceBackz}Custom formatter which expands %(tb) and %(tbc) with tracebacks

	TODO: might need locking in case of compressed tracebacks
	cOs4tjj|f|�d|i|��d|k}t|d�|_dS)N�fmtz%(tbc)s)rJ)�logging�	Formatterr<rF�_tb)rIrb�args�kwargsrJr
r
rr<�szFormatterWithTraceBack.__init__cCs|j�|_|_tjj||�S)N)reZtbc�tbrcrd�format)rI�recordr
r
rri�szFormatterWithTraceBack.formatN)r8r^r_r`r<rir
r
r
rra�sracKs�yt||||f|�Wn�tk
r�}zhyTxNd|t|�ffddd�|D�fffD]&}yt||f|��WqPYqPXqPWWnYnXWYdd}~XnXdS)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.
	zlogging failed: %r on %sz
  args: %rcSsg|]}t|��qSr
)r,)r�ar
r
rrM�sz__safeLog.<locals>.<listcomp>N)�	__origLog�	Exceptionr,)rI�level�msgrfrgrPr
r
r�	__safeLog�srpcCs$d|krd|jd�d}tj|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	r=zfail2ban.%srrS)�
rpartitionrc�	getLogger)�namer
r
rrr�srrcCsTy.t|t�s|j�rt|�}ntt|j��}Wn tk
rNtd|��YnX|S)NzInvalid log level %r)r"�int�isdigit�getattrrcr�AttributeError�
ValueError)�valueZllr
r
r�str2LogLevel�s
rz� %(message)sTcCsn|dkr@|dkrd|}|dkr*d|}qTd|}|rTd|}nd|}|rTd	|}|sjtjd
dd�|�}|S)
z(Custom log format for the verbose runs
	rrz6 | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |r6zB +%(relativeCreated)5d %(thread)X %(name)-25.25s %(levelname)-5.5sz %(thread)X %(levelname)-5.5sz %(asctime)-15sz-%(name)-23.23s [%(process)d]: %(levelname)-7sz%(asctime)s z(?<=\))-?\d+(?:\.\d+)?scSsdS)NrDr
)�mr
r
r�<lambda>
sz$getVerbosityFormat.<locals>.<lambda>)rYrZ)�	verbosityrbZaddtimeZpaddingr
r
r�getVerbosityFormat�s

rcCs td�jddd�tj|||�S)z>Except hook used to log unhandled exceptions to Fail2Ban log
	Zfail2banz Unhandled exception in Fail2Ban:T)r7)rrZcriticalr�__excepthook__)�exctyperyrTr
r
r�
excepthooks
r�c	Cs*|sgSttttttjtjd|�����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
	z[ ,
]+)�list�filterr2�mapr+�striprY�split)rDr
r
r�
splitwordssr��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|j�}|j|�|S)zHelper to merge dicts.
		)�copy�update)r'�y�rr
r
r�_merge_dicts1s

r�cCs|j�}|r|j|�|S)zCHelper to merge dicts to guarantee a copy result (r is never x).
		)r�r�)r'r�r�r
r
r�_merge_copy_dicts9s
r�z^([^\[]+)(?:\[(.*)\])?\s*$z@([\w\-_\.]+)=(?:"([^"]*)"|\'([^\']*)\'|([^,\]]*))(?:,|\]\s*\[|$)cCsztj|�}|sdS|j�\}}t�}|rrxHtj|�D]:}|jd�}dd�|jddd�D�d}|j�||j�<q4W||fS)	NrcSsg|]}|dk	r|�qS)Nr
)rr4r
r
rrMYsz"extractOptions.<locals>.<listcomp>r6r�r)NN)�
OPTION_CRE�match�groups�dict�OPTION_EXTRACT_CRE�finditer�groupr�)Zoptionr�Zoption_nameZoptstrZoption_optsZoptmatch�optryr
r
r�extractOptionsNs

r��
z<([^ <>]+)>rcCs�tj}|j�}t|�}t�}t|d�}�x�d}�x�|j�D�]~}	|	|ks:|	|krRq:|rft|j|	��rfq:t||	�}
}||
�}i}
�x|�r�|j	d�}||kr�||
|j
��}q�||	ks�|
j|d�tkr�t
d|	||
|
f��d}|r�|j|d|�}|dk�r$|j|�}|dk�r$|dk	�r$||�}|dk�r>||
|j
��}q�t|t��sRt|�}|
jd||�}
|
j|d�d|
|<||
|j��}q�W||
k�r�||
��r�d	}|
||	<d
|
kr:|j|	�q:W|s*Pq*W|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�rBr�keys�callabler�r,r��end�get�MAX_TAG_REPLACE_COUNTrxr"r+r!�start�add)ZinptagsZconditional�ignoreZaddreplZ
tre_searchZtags�doneZ	noRecReplZrepFlag�tagryZorgvalr|Z	refCountsZrtag�replr
r
r�substituteRecursiveTagshs`







r�cs<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|�j|�|_|jS)N)�	_instance�superr��__new__)�cls)�	__class__r
rr��szBgService.__new__cCs2d|_d|_d|_|j|_ttd�r.tjd�dS)Ni����rK�
set_thresholdri�)�_BgService__serviceTime�_BgService__periodTime�_BgService__threshold�_BgService__countr�gcr�)rIr
r
rr<�s
zBgService.__init__Fc
Cs�|jd8_|r0|jdks,tj�|jkr0dStjj|�s@dSz6tj�|jkrTdStj�tj�|j	|_|j
|_dStjj�XdS)NrrFT)r�rZtimer�r��_mutex�acquirer�Zcollectr�r��release)rI�force�waitr
r
r�service�szBgService.service)FF)r8r^r_r`rr�r�r�r<r��
__classcell__r
r
)r�rr��sr�)r
rrr)r)r)r{TT)rr�)8�
__author__Z__license__r�ZlocalercrrYrrTZ	threadingrZ
server.mytimerr�getpreferredencodingr�
startswith�stdoutr�all�version_inforr*r,rrr+r5r:rE�objectrFrdraZLoggerZ_logrlrprrrzrr�r��eval�compile�__file__r�r��DOTALLr�r�r�r�r�r�r�r
r
r
r�<module>sn
"


	
	

.





^