HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/lib/python3.6/site-packages/fail2ban/__pycache__/helpers.cpython-36.opt-1.pyc
3

TB(dcG�@s�dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
yddlZejd�ZWndZYnXej�atjd�r�ejr�ejjdk	r�ejjjd�r�ejjaned	d
�dOD��r�daejdPk�r�dd�Zet�[ejdQk�rtdfdd�Zdd�Zn.tdfdd�Zej�j�dk�rHdd�ZneZdd�Zdd�Zdd�Z Gd d!�d!e!�Z"Gd"d#�d#ej#�Z$d$e_%dRd%d&�Z&ye'Z'Wne(k
�r�e)Z'YnXej*j+Z,d'd(�Z-e-ej*_+ej.j/Z0d)d*�Z1e1ej._/d+d,�Z2d-d.�Z3dSd1d2�Z4d3d4�Z5d5d6�Z6ejdTk�r2e7e8d8e9d9��nd:d;�Z:d<d=�Z;ej8d>ej<�Z=ej8d?ej<�Z>ej8d@ej<�Z?dAdB�Z@dCdD�ZAdEZBej8dF�ZCdGfdfdHdI�ZDe�r�dJdK�ZEndLdK�ZEGdMdN�dNe!�ZFdS)Uz<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav HalchenkoZGPL�N)�Lock�)�MyTimezlibcap.so.2ZANSI_ccs|]}tj|�dkVqdS)N�)Nr)�os�getenv)�.0�v�r
�/usr/lib/python3.6/helpers.py�	<genexpr>0sr�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�__resetDefaultEncoding8s



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_decodeYs
r*cCst|t�st|�S|jtd�S)Nr!)r"r#�strr$r)r'r
r
r�
uni_stringbs
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*gs
cCst|t�st|�S|jtd�S)Nr!)r"r+r-r)r'r
r
rr,qs
cCst|t�st|�S|j�dkS)N�1�on�true�yes)r.r/r0r1)r"r+�bool�lower)�valr
r
r�_as_boolysr5cCs"tj�dd�\}}|jt|�fS)z+ Consistently format exception information N�)r�exc_info�__name__r,)Zcla�excr
r
r�formatExceptionInfo~sr: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�sraFc	Csh|rt|j�r|j|jd�|r,dd�|_dd�tj_tjrdytj	j�WnYnXtj
d�dS)NrcSsdS)Nr
r
r
r
r�<lambda>�sz!__stopOnIOError.<locals>.<lambda>cSsdS)Nr
)rIr
r
rrk�s)r[ZhandlersZ
removeHandler�closerc�
StreamHandler�flush�
exitOnIOErrorr�stderr�exit)ZlogSysZlogHndlrr
r
r�__stopOnIOError�s
rrcKs�yt||||f|�Wn�ttfk
rP}z|jdkr>t|��WYdd}~Xn�tk
r�}zhyTxNd|t|�ffddd�|D�fffD]&}yt||f|��Wq�Yq�Xq�WWn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.
	� Nzlogging failed: %r on %sz
  args: %rcSsg|]}t|��qSr
)r,)r�ar
r
rrM�sz__safeLog.<locals>.<listcomp>)�	__origLog�BrokenPipeError�IOError�errnorr�	Exceptionr,)rI�level�msgrfrgrPr
r
r�	__safeLog�s"
r|cCsNyt|�Wn<ttfk
rH}z|jdkr6td|��WYdd}~XnXdS)zQSafe flush inject stopping endless logging on closed streams (redirected pipe).
	rsN)�__origLogFlushrvrwrxrr)rIrPr
r
r�__safeLogFlush
s

r~cCs$d|krd|jd�d}tj|�S)zBGet logging.Logger instance with Fail2Ban logger name convention
	r=zfail2ban.%srrS)�
rpartitionrc�	getLogger)�namer
r
rr�sr�cCsTy.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�str2LogLevels
r�� %(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)-24s[%(process)d]: %(levelname)-7sz%(asctime)s z(?<=\))-?\d+(?:\.\d+)?scSsdS)NrDr
)�mr
r
rrk8sz$getVerbosityFormat.<locals>.<lambda>)rYrZ)�	verbosityrbZaddtimeZpaddingr
r
r�getVerbosityFormat&s

r�cCs td�jddd�tj|||�S)z>Except hook used to log unhandled exceptions to Fail2Ban log
	Zfail2banz Unhandled exception in Fail2Ban:T)r7)r�Zcriticalr�__excepthook__)�exctyper�rTr
r
r�
excepthook<s
r�cCs(|sgStttdd�tjd|�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|]}|j��qSr
)�strip)rr	r
r
rrMKszsplitwords.<locals>.<listcomp>z[ ,
]+)�list�filterr2rY�split)rDr
r
r�
splitwordsCsr��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_dicts\s

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_dictsds
r�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�tj|�}|std��|j�\}}t�}|r�x�tj|�D]�}|jd�rrtd|jd�|jd�|jd�dd�f��|jd�r�td|jd�|jd�dd�f��|jd�}|s�q8d	d
�|jddd
�D�d}|j	�||j	�<q8W||fS)Nzunexpected option syntaxZwrngAz+unexpected syntax at %d after option %r: %srr�ZwrngBz'expected option, wrong syntax at %d: %scSsg|]}|dk	r|�qS)Nr
)rr4r
r
rrM�sz"extractOptions.<locals>.<listcomp>r6r�)
�
OPTION_CRE�matchr��groups�dict�OPTION_EXTRACT_CRE�finditer�group�startr�)�optionr�Zoption_nameZoptstrZoption_optsZoptmatch�optr�r
r
r�extractOptions|s&

(
 
r�cCs
tj|�S)N)�OPTION_SPLIT_CRE�findall)r�r
r
r�splitWithOptions�sr�r�z<([^ <>]+)>rcCs�tj}|}t|�}t�}t|d�}i}�x�d}	�x�|j�D�]�}
|
|ks:|
|krRq:|rft|j|
��rfq:t||
�}}||�}
|j|
i�}�x|
�r�|
j	d�}||kr�|||
j
��}
q�||
ks�|j|d�tkr�td|
|||f��d}|r�|j|d|�}|dk�r,|j|�}|dk�r,|dk	�r,||�}|dk�rF|||
j
��}
q�t
|t��sZt|�}|jd||�}|j|d�d||<|||
j��}
q�W||k�r�||��r�|||
<d	}	t|�t|�k�r�|j�}|||
<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�searchrBr�keys�callabler�r,�getr��end�MAX_TAG_REPLACE_COUNTr�r"r+r!r��idr��add)ZinptagsZconditional�ignoreZaddreplZ
tre_searchZtags�doneZ	noRecReplZ	repCountsZrepFlag�tagr�Zorgvalr�ZrplcZrtag�replr
r
r�substituteRecursiveTags�sh







r�c	Cs>y,tjdkr|j�}nt|�}tjd|�WnYnXdS)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)r�version_infor-r#�_libcapZprctl)r�r
r
r�prctl_set_th_names

r�cCsdS)Nr
)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|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)NN)r�TT)rr�)G�
__author__Z__license__r�ZlocalercrrYrrTZ	threadingrZ
server.mytimerrZctypesZCDLLr��getpreferredencodingr�
startswith�stdoutr�allr�rr*r,rrr+r5r:rE�objectrFrdrarorrrv�	NameErrorrwZLoggerZ_logrur|rmrnr}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�

"
	
	

.

	





	
b