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/tests/__pycache__/databasetestcase.cpython-39.opt-2.pyc
a

��7�P�|�@s�dZdZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZddl
mZddlmZmZd	d
lmZzddlmZejZWney�dZYn0d	dlmZmZmZej�ej�e �d
�Z!dd�Z"Gdd�de�Z#dS)z"Copyright (c) 2013 Steven HiscocksZGPL�N�)�
FileContainer�Filter)�MyTime)�
FailTicket)�Actions�Utils�)�	DummyJail)�database)�LogCaptureTestCase�logSys�
uni_decode�filescCstjjrtd�St|�S)N�:memory:)�unittest�F2B�	memory_db�
Fail2BanDb)�filename�r�C/usr/lib/python3.9/site-packages/fail2ban/tests/databasetestcase.py�
getFail2BanDb0srcs�eZdZ�fdd�Zedd��Zejdd��Z�fdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zedd��Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Z�Z S)6�DatabaseTestcsJtt|���tdur t�d��d|_tjjs@t	�
dd�\}|_d|_dS)zCall before every test case.NzEUnable to import fail2ban database module as sqlite is not available.�.db�	fail2ban_�:auto-create-in-memory:)�superr�setUprr�SkipTest�
dbFilenamerr�tempfile�mkstemp�_db)�self�_��	__class__rrr8s�zDatabaseTest.setUpcCs(t|jt�r"|jdkr"t|j�|_|jS)Nr)�
isinstancer#�strrr �r$rrr�dbDszDatabaseTest.dbcCs t|jt�r|j��||_dS�N)r(r#r�close)r$�valuerrrr+Is
cs4tt|���tdurdS|jdur0t�|j�dS)zCall after every test case.N)rr�tearDownrr �os�remover*r&rrr/Os

zDatabaseTest.tearDowncCs,|jjdkrt�d��|�|j|jj�dS)Nr�in :memory: database)r+rrr�assertEqualr r*rrr�testGetFilenameXs
zDatabaseTest.testGetFilenamecCsD|�|jjd�d|j_|�|jjd�d|j_|�|jjd�dS)Ni�QZ1y6mon15d5h30mi�_�z2y 12mon 30d 10h 60miP��)r3r+Zpurgeager*rrr�testPurgeAge]s
zDatabaseTest.testPurgeAgecCs|�tjtd�dS)Nz/this/path/should/not/exist)�assertRaises�sqlite3ZOperationalErrorrr*rrr�testCreateInvalidPathds
�z"DatabaseTest.testCreateInvalidPathcCsH|jjdkrt�d��|��t|j�|_|�|jj	|j�
�vd�dS)Nrr2z3Jail not retained in Db after disconnect reconnect.)r+rrr�testAddJailrr �
assertTrue�jail�name�getJailNamesr*rrr�testCreateAndReconnectjs
�z#DatabaseTest.testCreateAndReconnectcsFtj�Gdd�dtj��G�fdd�dtj����fdd�}|t_dS)z4[Mock-Up] broken connect to cover reparable restore.c@seZdZdd�ZdS)z2DatabaseTest._mockupFailedDB.<locals>._mckp_Cursorc_st�d��dS)Nz[mock-up] broken database)r7�Error��args�kwargsrrr�executezsz:DatabaseTest._mockupFailedDB.<locals>._mckp_Cursor.executeN)�__name__�
__module__�__qualname__rCrrrr�_mckp_CursorysrGcseZdZ�fdd�ZdS)z6DatabaseTest._mockupFailedDB.<locals>._mckp_Connectioncs�|i|��Sr,rr@�rGrr�cursor~sz=DatabaseTest._mockupFailedDB.<locals>._mckp_Connection.cursorN)rDrErFrIrrHrr�_mckp_Connection}srJcst�d��t_�|i|��S)Nz3[mock-up] broken connect to cover reparable restore)�	DefLogSys�debugr7�connectr@)rJ�_org_connectrr�
_mckp_connect�s
z3DatabaseTest._mockupFailedDB.<locals>._mckp_connectN)r7rMZCursorZ
Connection)rOr)rJrGrNr�_mockupFailedDBus
zDatabaseTest._mockupFailedDBc
Cs�tjddd�}|r|ds$t�d��t|d��d�}|rVtttt	|d��d���nd	}d|_
|jdur|t�
d
d�\}|_dD�]^}|d
kr�|dkr�d}|��|�d|�t�tj�td�|j�t�|jtj�}t�||�t�|�z�t|j�|_
|d
k�rH|jddddd�|�|j
��tdg��|�t|j
� ��d�n>|jddddd�|�t|j
���d�|�t|j
� ��d�W|j
�r�|j
j!dk�r�t�"|j
j#�d|_
q�|j
�r�|j
j!dk�r�t�"|j
j#�d|_
0q�dS)Nzsqlite3 --versionT)�outputrzno sqlite3 commandr	� �.)�rrrr)�6i�rU)rT�*i@8z)[test-repair], next phase - file-size: %d�database_v1.dbzRepair seems to be successfulzCheck integrityzDatabase updated)�all�/tmp/Fail2BanDb_pUlZJh.logzRepair seems to be failedzNew database created.r)$rZ
executeCmdrrr�split�tuple�map�intr)r+r r!r"rP�pruneLog�shutil�copyfiler0�path�join�TEST_FILES_DIR�open�O_RDWR�	ftruncater-r�assertLoggedr3�getLogPaths�set�lenr=�_dbFilenamer1�_dbBackupFilename)r$Zretr%Z	truncSize�frrr�testRepairDb�sL
$

�

���zDatabaseTest.testRepairDbc	CsTd|_�z |jdur&t�dd�\}|_t�tj�t	d�|j�t
|j�|_|�|j��t
dg��|�|j��t
dg��tdddg�}|�|j��d	|�|�|j�t
j�t
j�|�t|jjt
jd
�|jjddd
�}|�t|�d
�|�|d	��d�W|j�rP|jjdk�rPt�|jj�n&|j�rN|jjdk�rNt�|jj�0dS)NrrrWz"DummyJail #29162448 with 0 ticketsrY�	127.0.0.1gף��ծ�A�abc
rr	iW�Ri@�)�fromtimeZcorrectBanTimer)r+r r!r"r_r`r0rarbrcrr3r=rirhr�getBans�updateDb�__version__r6�NotImplementedError�getCurrentBansrj�
getBanTimerkr1rl)r$r%�ticket�ticketsrrr�testUpdateDb�s*
��zDatabaseTest.testUpdateDbcCsRd|_|jdur"t�dd�\}|_t�tj�t	d�|j�t
|j�|_|�|j��t
dg��|�|j��t
dg��|j��}|�t|�d�tddgd	��}|�d
�|�|d|�|�|d��d
�|�|j�t
j�t
j�tdd�|_|jj|jdd�}|�t|�d�|�|d��d�|�t|jjt
jd�t�|jj�dS)Nrrzdatabase_v2.dbzpam-genericz/var/log/auth.logrz1.2.3.7if�~T)z�Dec  3 09:31:08 f2btest test:auth[27658]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7z�Dec  3 09:31:32 f2btest test:auth[27671]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7z�Dec  3 09:31:34 f2btest test:auth[27673]: pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser= rhost=1.2.3.7rTrr	z1.2.3.8�r<)r;rqiX)r+r r!r"r_r`r0rarbrcrr3r=rirhrrrjr�
setAttempt�getIDrsrtr
r;rvrwr6rur1rl)r$r%Zbansrxryrrr�
testUpdateDb2�s,
�

zDatabaseTest.testUpdateDb2cCs6t�|_|j�|j�|�|jj|j�d�vd�dS)NTzJail not added to database)r
r;r+�addJailr:r<r=r*rrrr9�s�zDatabaseTest.testAddJailcCsh|��t�dd�\}}t|d�|_|j�|j|j�}|�|du�|�	||j�
|j��t�|�dS)Nz.logZFail2BanDb_�utf-8)
r9r!r"r�
fileContainerr+�addLogr;r:�assertInrhr0r1)r$r%r�posrrr�_testAddLog�szDatabaseTest._testAddLogcCs|��|j��}t|d�}|�d�|��|j��|j��|j��|j��}|�|dk�|j	�
|j|j�t|d�|_|�
|j��d�|�
|j	�|j|j�|�t|d�}|�d�|��t|d�|_|�
|j��d�|�
|j	�|j|j�d�t�|�dS)N�wz,Some text to write which will change md5sum
rr�z%Some different text to change md5sum
)r�r�ZgetFileNamerd�writer-�readlineZgetPosr:r+Z	updateLogr;rr3r�r0r1)r$rZfile_ZlastPosrrr�
testUpdateLog�s2






�

�zDatabaseTest.testUpdateLogc	Csb|��|�|j�|jd�d�dD]8}|j�|jd|dt|��|�|j�|jd�|�q$dS)Nzsystemd-journal)i/hYi/hYi/hYZTEST)r9r3r+Z
getJournalPosr;Z
updateJournalr))r$�trrr�testUpdateJournal$s
zDatabaseTest.testUpdateJournalcCs^|��tdddg�}|j�|j|�|jj|jd�}|�t|�d�|�t	|dt��dS)Nrorrp�r;r	)
r9rr+�addBanr;rrr3rjr:r()r$rxryrrr�
testAddBan-s�zDatabaseTest.testAddBancCs�|��tddgd��tddgd��tddgd��tddgd��td	dd
dg�tddd
dg�td
dd
dg�g}|D]}|j�|j|�qr|�d�|jj|jd�}|�d�|�t|�d�t	|�D]h\}}t
�d|||���t
�d||���|�||�
�|�
��|�t||���t|����q�|�d�tj}z`dt_|D]}|j�|j|��qJ|�d�|jj|jd�}|�d�|�t|�d�W|t_n|t_0|�d�|j�|jtd��|jj|jd�}|�t|�d�|�dd�dS)Nror)�user "test"�user "Ñâåòà"uuser "äöüß"�	127.0.0.2z	127.0.0.3)r�suser "�����"suser "äöüß"z	127.0.0.4)r�r�uuser "äöüß"z	127.0.0.5r�uunterminated Ïz	127.0.0.6z	127.0.0.7sunterminated �zjson dumps failedr�zjson loads failed�zreadtickets[%d]: %rz == tickets[%d]: %rz[test-phase 2] simulate errorszf2b-test::non-existing-encoding�z[test-phase 3] still operable?z	127.0.0.8�)r9rr+r�r;ZassertNotLoggedrrr3rj�	enumeraterKrLZgetDatar}�
getMatchesr^rZ
PREFER_ENCrg)r$ryrxZreadtickets�iZpriorEncrrr�testAddBanInvalidEncoded7sH�	

"



z%DatabaseTest.testAddBanInvalidEncodedcCsX|��dD]&}td|ddg�}|j�|j|�q|jj|jd�}|�t|�d�|S)N)r	rrTz
192.0.2.%drztest
r�rT)r9rr+r�r;rrr3rj)r$r�rxryrrr�
_testAdd3BanssszDatabaseTest._testAdd3BanscCs~|��}|j�|j|d���|�t|jj|jd��d�|j�|j|d��|d���|�t|jj|jd��d�dS)Nrr�rr	)r�r+�delBanr;r}r3rjrr)r$ryrrr�
testDelBan|s
"zDatabaseTest.testDelBancCs6|��|j�|j�|�t|jj|jd��d�dS)Nr�r)r�r+r�r;r3rjrrr*rrr�
testFlushBans�szDatabaseTest.testFlushBanscCs�|��|j�|jtdt��ddg��|j�|jtdt��ddg��|�t|jj	|jdd��d�|�t|jj	|jdd��d	�|�t|jj	|jd
d��d�dS)Nro�<rp�(�2)r;�bantimer	�r���r)
r9r+r�r;rr�timer3rjrrr*rrr�testGetBansWithTime�s��z DatabaseTest.testGetBansWithTimecCs|��d}dgtdg�d�dgtdg�d�dgtddg�d�dgtddg�d�g}d	d
�|D�}d}|D]<}|d8}td
t��||d�}|�d�|j�|j|�qj||j_	|j�
d
�}|�|��d
�|�|�
�t|��|�t|���|�|�|��||d��td
t��d|dtddg�id�}|�t|��|j�|j|�|j�
d
�}|�|�
�dt|��|�t|���|�|�|��||d��|jj|jd
t��dd�}|�|du�|�|�
�t|��|�t|���|�|�|��||d��|jj|jd
t��ddd�}|�t|���d�|�|��|dd�|jj|jd
t��ddd�}|�t|���d�|�gd��d|j_	|j�|j|�|jj|jd
t��dd�}|�|du�|�|�
�t|��|�t|���d�dS)Nrrp�test)�matches�user�123
�ABC
�rootz1234
cSsg|]}|dd�qS)r�rr)�.0rmrrr�
<listcomp>��z=DatabaseTest.testGetBansMerged_MaxMatches.<locals>.<listcomp>�P�
ro)�datar	r��d)rq)rqZ
maxmatchesrTr�r)�1�2�3)r9rirrr�r|r+r�r;�
maxMatches�
getBansMergedr3r}�
getAttemptrjr�rvr:�
setMatches)r$r�ZfailuresZmatches2findr�rmrxrrr�testGetBansMerged_MaxMatches�sd�
���z)DatabaseTest.testGetBansMerged_MaxMatchescCs�|��tdd�}|j�|�tdt��ddg�}|�d�|j�|j	|�tdt��ddg�}|�d	�|j�|j	|�td
t��d	dg�}|�d�|j�|j	|�tdt��ddg�}|�d�|j�||�|j�
d�}|�|��d�|�|�
�d�|�|��gd
��|jj
d|j	d�}|�|��d�|�|�
�d�|�|��ddg�|�t|�t|jj
d|j	d���td
t��d	dg�}|�d�|j�|j	|�|�t|�t|jj
d|j	d���tdt��ddg�}|�d�|j�|j	|�|�t|�t|jj
d|j	d���|j�
�}|�t|�d�|�ttdd�|D���dd�|D��|jj
|d�}|�t|�d�|jj
dd�}|�t|�d�|jj
dd�}|�t|�d�|jj
dd�}|�t|�d�|jj
dd�}|�t|�d�|jj|j	d�}|�t|�d�|jjddd�}|�|��d�|jj|j	dt��d�}|�t|�d�|jj|j	dt��t�d�d�}|�t|�d�|jj|j	dt��t�d�d�}|�t|�d�|�d�|j�|j	|�|jj|j	dt��t�d�d�}|�t|�d�|�d|j	���|j	j�d�|jj|j	dt��t�d�d�}|�t|�d�|�|d��d�dS)NzDummyJail-2r{ror�rpr��r�r�r�r��F)rpr�r�r�rcss|]}|��VqdSr,�r}�r�rxrrr�	<genexpr>r�z1DatabaseTest.testGetBansMerged.<locals>.<genexpr>cSsg|]}|���qSrr�r�rrrr�r�z2DatabaseTest.testGetBansMerged.<locals>.<listcomp>r	�)r�r��rr�)r;Zip)r;Z
forbantimerqZ1yearz(ignore ticket (with new max ban-time %r))r9r
r+rrrr�r|r�r;r�r3r}r�r��idZassertNotEqualrjZassertSortedEqual�listrirvZstr2secondsZ
setBanTimergZ
getMaxBanTime�actionsrw)r$Zjail2rxZ	newTicketryrrr�testGetBansMerged�s�




�
�
�
����
��zDatabaseTest.testGetBansMergedcCs�|��|j|j_|j�|j�|jj}|�dtj�	t
d�i�|j�d�t
|j�|j_}|j�d�td�}|�d�|�ddg�|j�|�|��|�dd	�|�d
d�dS)NZaction_checkainfozaction.d/action_checkainfo.pyr�r�z1.2.3.4r�r�zban ainfo %s, %s, %s, %s)TTTTzjail info %d, %d, %d, %d)r	�rr�)r9r+r;rrr��addr0rarbrcZ
banManagerZsetBanTotalrZ
_Jail__filterZfailManagerZsetFailTotalrr|r�Z
putFailTicketZ_Actions__checkBanrg)r$r�Zfltrxrrr�testActionWithDB9s&
�
zDatabaseTest.testActionWithDBcCs|��|j�|j�|j��}|�t|�dko6|jj|�|jjdd�}|�t|�dko`|jj|�|jjdd�}|�t|�dk�|j�	|j�|j��}|�t|�dko�|jj|�|jjdd�}|�t|�dko�|jj|�|jjdd�}|�t|�dk�dS)Nr	F)ZenabledTr)
r9r+�delJailr;r=r�rjr<r:r)r$Zjailsrrr�testDelAndAddJailNs

zDatabaseTest.testDelAndAddJailcCs|��|j��|�t|j���d�|j�|j�|j��|�t|j���d�|��|j�|j�|j��|�t|j���d�|�t|jj	|jd��d�|��|j�
|jtdt�
�dg��|j�|j�|j��|�t|j���d�|�t|jj	|jd��d�dS)Nr	rr�rorp)r9r+�purger3rjr=r�r;r�rrr�rrr�r*rrr�	testPurgeas&


�
zDatabaseTest.testPurge)!rDrErFr�propertyr+�setterr/r4r5r8r>�staticmethodrPrnrzr~r9r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__rrr&rr6s<

	
*!'	
<		9ir)$Z
__copyright__Z__license__r0�sysrr!r7r_Z
server.filterrrZ
server.mytimerZ
server.ticketrZserver.actionsrrZ	dummyjailr
Zserverrr�ImportErrorZutilsrr
rKrrarb�dirname�__file__rcrrrrrr�<module>s*