403Webshell
Server IP : 198.38.94.13  /  Your IP : 216.73.217.33
Web Server : Apache
System : Linux d4744.dxb1.stableserver.net 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
User : revivere ( 1140)
PHP Version : 8.2.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/pkg/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/pkg/__pycache__/rpm.cpython-310.pyc
o

;j)�@s�dZddlZddlZddlZddlZddlZddlZddlZe�	e
�ZdZedZ
dZdZdZdZd	Zd
ZdZdZe
eeeeeeeZd
Zdd�Zd#dd�Zd$dd�Zd#dd�Zd#dd�Zdd�Zdefdd�Zde de defdd �Z!d!d"�Z"dS)%z0
Common functions for working with RPM packages
�N)�x86_64Z	x86_64_v2)Zathlon�amd64Zia32eZia64Zgeode)Zi386Zi486Zi586Zi686)�ppcZppc64Zppc64leZppc64iseriesZppc64pseries)Zs390Zs390x)ZsparcZsparcv8Zsparcv9Zsparcv9vZsparc64Zsparc64v)
�alphaZalphaev4Z	alphaev45Zalphaev5Z	alphaev56Z
alphapca56Zalphaev6Z	alphaev67Z	alphaev68Zalphaev7)Zarmv5telZ	armv5tejlZarmv6lZarmv6hlZarmv7lZarmv7hlZarmv7hnl)�aarch64)Zsh3Zsh4Zsh4azS%{NAME}_|-%{EPOCH}_|-%{VERSION}_|-%{RELEASE}_|-%{ARCH}_|-%{REPOID}_|-%{INSTALLTIME}cCsptjj�d�rtjgd�dtjtjd���d}nd�dd�t	�
�d	d
�D�dd
��}tjj�|��
�p7dS)
z2
    Get the os architecture using rpm --eval
    �rpm)rz--evalz%{_host_cpu}T)�	close_fds�stdout�stderrr�cSsg|]}|r|�qS�r��.0�xrr�F/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/pkg/rpm.py�
<listcomp>Jszget_osarch.<locals>.<listcomp>���N����unknown)�salt�utils�path�which�
subprocess�Popen�PIPE�communicate�join�platform�unameZstringutilsZto_str�strip)�retrrr�
get_osarch>s��(r"cCs:|durt�}tdd�||fD��ptdd�||fD��S)zT
    Returns True if both the OS arch and the passed arch are x86 or ARM 32-bit
    Ncs��|]}|tvVqdS�N)�	ARCHES_32r
rrr�	<genexpr>Us�zcheck_32.<locals>.<genexpr>csr#r$)�
ARCHES_ARM_32r
rrrr&Us�
�)r"�all)�arch�osarchrrr�check_32Os
�r+cCst�dd�}|||||||�S)z/
    Build and return a pkginfo namedtuple
    ZPkgInfo)�name�versionr)�repoid�install_date�install_date_time_t)�collections�
namedtuple)r,r-r)r.r/r0Z
pkginfo_tuplerrr�pkginfoZs
�r3cCsF|durt�}t||�s!||dfvr!|tvr|tvs!|d|��7}|S)z�
    Resolve the package name and arch into a unique name referred to by salt.
    For example, on a 64-bit OS, a 32-bit package will be pkgname.i386.
    NZnoarch�.)r"r+�
ARCHES_X86_64)r,r)r*rrr�resolve_namees�r6cCs�z|�d�\}}}}}}}Wn
tyYdSwt|||�}|r(|d|��7}|dvr3d�||f�}|dvrHtj�t|����d}	t|�}
nd}	d}
t|||||	|
�S)zf
    A small helper to parse an rpm/repoquery command's output. Returns a
    pkginfo namedtuple.
    z_|-N�-)z(none)�0�:�Z)	�split�
ValueErrorr6r�datetime�utcfromtimestamp�int�	isoformatr3)�liner*r,�epochr-�releaser)r.Zinstall_timer/r0rrr�
parse_pkginfovs"��
rDcCsTt|t�s|g}g}|D]}t|t�st|�}|�d�|�d�����qd�|�S)z�
    Given a list of comments, strings, a single comment or a single string,
    return a single string of text containing all of the comments, prepending
    the '#' and joining with newlines as necessary.
    z# {}
�#r)�
isinstance�list�str�append�format�lstripr)Zcommentsr!Zcommentrrr�combine_comments�s


rL�returnc	Cst|\}}}|\}}}t|pd�}t|pd�}||kr"||kr dSdSt|p&d|p)d�}|dkr1|St|p5d|p8d�S)u�
    Compare two RPM package identifiers using full epoch–version–release semantics.

    This is a pure‑Python equivalent of ``rpm.labelCompare()``, returning the same
    ordering as the system RPM library without requiring the ``python3-rpm`` bindings.

    The comparison is performed in three stages:

    1. **Epoch** — compared numerically; missing or empty values are treated as 0.
    2. **Version** — compared using RPM's ``rpmvercmp`` rules:
       - Split into digit, alpha, and tilde (``~``) segments.
       - Tilde sorts before all other characters (e.g. ``1.0~beta`` < ``1.0``).
       - Numeric segments are compared as integers, ignoring leading zeros.
       - Numeric segments sort before alpha segments.
    3. **Release** — compared with the same rules as version.

    :param evr1: The first ``(epoch, version, release)`` triple to compare.
                 Each element may be a string or ``None``.
    :param evr2: The second ``(epoch, version, release)`` triple to compare.
                 Each element may be a string or ``None``.
    :return: ``-1`` if ``evr1`` is considered older than ``evr2``,
             ``0`` if they are considered equal,
             ``1`` if ``evr1`` is considered newer than ``evr2``.

    .. note::
       This comparison is **not** the same as PEP 440, ``LooseVersion``, or
       ``StrictVersion``. It is intended for RPM package metadata and will match
       the ordering used by tools like ``rpm``, ``dnf``, and ``yum``.

    .. code-block:: python

       >>> label_compare(("0", "1.2.3", "1"), ("0", "1.2.3", "2"))
       -1
       >>> label_compare(("1", "1.0", "1"), ("0", "9.9", "9"))
       1
       >>> label_compare(("0", "1.0~beta", "1"), ("0", "1.0", "1"))
       -1
    r�rr)r?�
_rpmvercmp)	Zevr1Zevr2Zepoch1Zversion1Zrelease1Zepoch2Zversion2Zrelease2Zcmp_versionsrrr�evr_compare�s
,
rP�a�bcCs�||krdSd}}t|�t|�}}dtdtfdd�}||ks%||k�r�||krI|||�sI||dvsI|d7}||krI|||�sI||dvr5||krm|||�sm||dvsm|d7}||krm|||�sm||dvrY||krw||dks�||kr�||dkr�||kr�||dks�dS||kr�||dks�d	S|d7}|d7}q||kr�||d
ks�||kr�||d
kr�||kr�d	S||kr�dS||kr�||d
ks�dS||kr�||d
ks�d	S|d7}|d7}q||kr�||ks�n�||}}||��}	|	�r3||k�r||���r|d7}||k�r||���s||k�r2||���r2|d7}||k�r2||���s"n8||k�rO||���rO|d7}||k�rO||���s?||k�rk||���rk|d7}||k�rk||���s[||k�rw|	�rudSd	S|||�}
|||�}|	�r�|
�d�}|�d�}
t|�t|
�k�r�t|�t|
�k�r�dSd	S||
k�r�||
k�r�dSd	Sn|
|k�r�|
|k�r�dSd	S||ks%||ks%||k�r�||k�r�dS||k�r�d	SdS)z�
    Pure-Python comparator matching RPM's rpmvercmp().
    Handles separators, tilde (~), caret (^), numeric/alpha segments.
    r�crMcSs|��Sr$)�isalnum)rSrrr�isalnum_�sz_rpmvercmp.<locals>.isalnum_z~^rN�~r�^r8)�lenrH�bool�isdigit�isalpharK)rQrR�i�jZlaZlbrU�siZsjZisnumZseg_aZseg_bZseg_a_nzZseg_b_nzrrrrO�s�  �  �((
�����



�
�KrOcCs�|dvrdS|�d�}|dkr'ztt|d|���}Wn
ty&d}Ynwd}|�d�}|dkrC||d|�}||dd�}n
||dd�}d	}|||fS)
a[
    Split the package version string into epoch, version and release.
    Return this as tuple.

    The epoch is always not empty. The version and the release can be an empty
    string if such a component could not be found in the version string.

    "2:1.0-1.2" => ('2', '1.0', '1.2)
    "1.0" => ('0', '1.0', '')
    "" => ('0', '', '')
    )Nr)r8rrr9rNr8r7rNr)�findrHr?r<)Z	verstringZidx_erBZidx_rr-rCrrr�version_to_evr<s"
�

r`r$)NN)#�__doc__r1r=�loggingrrZsalt.utils.pathrZsalt.utils.stringutils�	getLogger�__name__�logr5Z	ARCHES_64r%Z
ARCHES_PPCZARCHES_S390ZARCHES_SPARCZARCHES_ALPHAr'Z
ARCHES_ARM_64Z	ARCHES_SHZARCHESZQUERYFORMATr"r+r3r6rDrLr?rPrHrOr`rrrr�<module>s^
	��������




�8_

Youez - 2016 - github.com/yon3zu
LinuXploit