HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/lib/python3.9/site-packages/tracer/packageManagers/__pycache__/rpm.cpython-39.pyc
a

�|
`��@s�ddlmZddlmZe��dvr�ddlmZddlmZddl	m
Z
ddlmZdd	l
mZmZdd
lZdd
lZdd
lZGdd�de�Zd
S)
�)�absolute_import)�System)ZfedoraZrhelZcentosZmageiaZol)�listdir�)�IPackageManager)�Package)�PackagesCollection)�LockedDatabase�DatabasePermissionsNc@s�eZdZdZdd�Zedd��Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zedd��ZdS)�Rpmz!
		Package manager class - RPM
		cKs
||_dS�N)�opts)�self�kwargs�r�>/usr/lib/python3.9/site-packages/tracer/packageManagers/rpm.py�__init__)szRpm.__init__cCstSr)�NotImplemented)rrrr�history_path,szRpm.history_pathc	
Cs�tj�|j�stg�S|j�d�r(d}nd}zbt�}|��}t�	|�}tj
|_|��}|�
||g�|��D]}|�t|d|d��ql|WStjy�}z$t|�dkr�t�nt��WYd}~n
d}~00dS)zp
			Returns list of packages which were modified between unix_time and present
			Requires root permissions.
			�modern_swdbz�
					SELECT DISTINCT rpm.name, trans.dt_end AS end

					FROM trans JOIN trans_item JOIN rpm
					ON trans.id=trans_item.trans_id
					AND trans_item.item_id=rpm.item_id

					WHERE trans.dt_begin > ?
					ORDER BY rpm.name
				aJ
					SELECT DISTINCT pkgtups.name, trans_end.timestamp AS end

					FROM trans_beg JOIN trans_end JOIN trans_data_pkgs JOIN pkgtups
					ON trans_beg.tid=trans_end.tid
					AND trans_data_pkgs.tid=trans_beg.tid
					AND trans_data_pkgs.pkgtupid=pkgtups.pkgtupid

					WHERE trans_beg.timestamp > ?
					ORDER BY pkgtups.name
				�name�endzdatabase is lockedN)�os�path�existsrrr
�get�_database_file�sqlite3ZconnectZRowZrow_factory�cursorZexecuteZfetchall�appendrZOperationalError�strr	r
)	rZ	unix_timeZsqlZpackagesZsqliteZconnr�result�errr�packages_newer_than/s"
zRpm.packages_newer_thancCs>|�|�r:t��}|�d|�}t�t|��}dd�|D�SgS)z�
			Returns list of files provided by package
			See also: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch04s02s03.html
			rcSsg|]}|d�qS)rr)�.0�frrr�
<listcomp>j�z%Rpm.package_files.<locals>.<listcomp>)�
_is_installed�rpm�TransactionSet�dbMatch�fi�next)r�pkg_name�ts�mir,rrr�
package_filesas
zRpm.package_filescCs�|�|�}t��}|�d|�}|D]h}|tj|dkr"|tj|dkr"|tj|dkr"|tj|dkr"t|�}|�	||�|Sq"dS)Nrrr��)
�
_splitEvrar)r*r+�RPMTAG_EPOCH�RPMTAG_VERSION�RPMTAG_RELEASEZRPMTAG_ARCHr�_load_package_info_from_hdr)rr�evrar/r0�hdr�packagerrr�find_packageos
H
zRpm.find_packagec	Cs�|sdSt��}|�d|j�}d}|D]r}|dur8|}q&t�t|tj�t|tj�t|tj�ft|tj�t|tj�t|tj�f�}|dkr&|}q&|dur�dS|�	||�dS)zFFrom database load informations about given package and set them to itNr���)
r)r*r+r�labelComparer r5r6r7r8)rr;r/r0Zlatestr:Zcomparerrr�load_package_info}s *&�zRpm.load_package_infocCs<t�t|j�t|j�t|j�ft|j�t|j�t|j�f�S)zf
			labelCompare returns:
			0 if the EVR matches
			1 if EVR(1) > EVR(2)
			-1 if EVR(2) > EVR(1)
			)r)r>r �epoch�version�release)rZp1Zp2rrr�compare_packages�szRpm.compare_packagescCsh|jd}|�|j�}|rd|jdkr`|��dd�D]*}tj�|�r4|�|�}|rV|ndSq4|SdS)z8Returns name of package which provides given applicationrzDevelopment/LanguagesrN)Z	instances�_file_provided_byZexe�categoryZcmdlinerr�isfile)rZappZprocessr;�argrrr�provided_by�s


zRpm.provided_byc
Cs�|�d�}||dd�}|d|��d�}||d|�}|d|��d�}||d|�}|�d�}|dkrvd}	n|d|�}	|	|||fS)z�
			Derived from rpmUtils.miscutils.splitFilename
			https://github.com/rpm-software-management/yum/blob/master/rpmUtils/miscutils.py

			Given: 9-123a.ia64
			Return: (9, 123a, 1, ia64)
			�.rN�-�:r=)�rfind�find)
rr9Z	archIndexZarchZrelIndex�relZverIndexZverZ
epochIndexr@rrrr4�s	

zRpm._splitEvracCsH|tj|_|tj|_|tj}|r,||_|tj|_|tj	|_
dSr)r)ZRPMTAG_SUMMARY�description�RPMTAG_GROUPrEr5r@r6rAr7rB)rr;r:r@rrrr8�s
zRpm._load_package_info_from_hdrcCsJt��}|�d|�}|��dkr$dSt|�}t|tj�}|tj|_|S)z1Returns name of package which provides given fileZ	basenamesrN)	r)r*r+�countr-rZRPMTAG_NAMErPrE)r�filer/Zdb�pkg�prrrrD�szRpm._file_provided_bycCsP|j�d�r|jStt|j�dd�D]&}|�d�r$|�d�r$|j|Sq$dS)z)Returns path to yum history database filerT)�reversezhistory-z.sqliteN)r
rr�sortedr�
startswith�endswith)rrRrrrr�s
zRpm._database_filecCs(t��}|�d|�}t|�dkr$dSdS)z$Returns True if package is installedrrTF)r)r*r+�len)r.r/r0rrrr(�szRpm._is_installedN)�__name__�
__module__�__qualname__�__doc__r�propertyrr#r1r<r?rCrHr4r8rDr�staticmethodr(rrrrr"s 
2	r)Z
__future__rZtracer.resources.systemrZdistributionrrZipackageManagerrZtracer.resources.packagerZtracer.resources.collectionsrZtracer.resources.exceptionsr	r
rr)rrrrr�<module>s