HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/pkgin.cpython-310.pyc
o

�N�g�D�@s`dZddlZddlZddlZddlZddlZddlmm	Z	ddl
ZddlZddlZddl
mZmZe�d�Ze�e�ZdZe	jdd��Ze	jdd	��Ze	jd
d��Ze	jdd
��Zdd�Zdd�Zdd�Zdd�Zejj� ed�Z!dd�Z"d3dd�Z#dd�Z$d3dd�Z%d4d!d"�Z&d5d#d$�Z'd6d%d&�Z(d7d'd(�Z)d7d)d*�Z*d+d,�Z+d-d.�Z,d/d0�Z-d1d2�Z.dS)8aL
Package support for pkgin based systems, inspired from freebsdpkg module

.. important::
    If you feel that Salt should be using this module to manage packages on a
    minion, and it is using a different module (or gives an error similar to
    *'pkg.install' is not available*), see :ref:`here
    <module-provider-override>`.
�N)�CommandExecutionError�MinionErrorz%pkgin(?:[\s]+)([\d.]+)(?:[\s]+)(?:.*)�pkgcCsptjj�d�}|dur6z tdddd�}|dur&|�d�}tj�|�s)WdSW|SW|Sty5YdSw|S)zJ
    Looks to see if pkgin is present on the system, return full path
    �pkginN�cmd.runzpkg_info -Q LOCALBASE pkgin�trace��output_loglevelz
/bin/pkgin)�salt�utils�path�which�__salt__�os�existsr)ZppathZ	localbase�r�F/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/pkgin.py�_check_pkgins$�
����rcCsDtdt�dgdd�}|durdSt�|�}|sdS|�d��d�S)	z
    Get the pkgin version
    rz-vrrNF��.)rr�
VERSION_MATCH�search�group�split)Zversion_stringZ
version_matchrrr�_get_version3s
�
rcC�tdd�t�D��dkS)z!
    Check support of regexp
    cs��|]}t|�VqdS�N��int��.0�irrr�	<genexpr>K��z"_supports_regex.<locals>.<genexpr>)r���tuplerrrrr�_supports_regexF�r(cCr)z"
    Check support of parsing
    csrrrr rrrr#Sr$z$_supports_parsing.<locals>.<genexpr>)r�r&rrrr�_supports_parsingNr)r+cCs2gd�}td|vrt�rtSdd�d�|��fS)zD
    Set the virtual pkg module if the os is supported by pkgin
    )ZNetBSD�SunOSZ	DragonFlyZMinix�DarwinZSmartOSrFzJThe pkgin execution module cannot be loaded: only available on {} systems.z, )Z
__grains__r�__virtualname__�format�join)Z	supportedrrr�__virtual__Vs�r1cCs4|d��r|dkr|�dd�d�dd�SdSdS)z2
    Split package name from versioned string
    rZNo�;r�-N)�isalnumr�rsplit)�namerrr�	_splitpkges�r7cKsti}t�}|s	|St�rd|�d�}td|d|gdd�}|��D]}|r7t|��d�}|r7|d||d<q!|S)	z�
    Searches for an exact match using pkgin ^package$

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.search 'mysql-server'
    �^�$r�serrrr)rr(r�
splitlinesr7r)�pkg_name�kwargs�pkglistr�out�line�matchrrrrns�rcOs\tjj�|�dd��}i}t�}|s|S|rt�|dg}t�r&|�dd�|D]m}t	�
|�}|�t�r:d|�d�n|�t
d|d	d
�}|��D]K}	|	�d�rV|S|	�t�r]dnd
�}
|
ri|
ddvriqI|
r�t|
d�}|r�|d|vr�t|
�dkr�|
ddvr�|d||d<qId||d<qIq(|r�t|�dkr�|d|vr�||dSd
S|S)a�
    .. versionchanged:: 2016.3.0

    Return the latest version of the named package available for upgrade or
    installation.

    If the latest version of a given package is already installed, an empty
    string will be returned for that package.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.latest_version <package name>
        salt '*' pkg.latest_version <package1> <package2> ...
    �refreshTr:rz-pr8r9rrrzNo results found forr2Nr)z=:z<:z>:�)�<rC�=rC)r
r�data�is_true�popr�
refresh_dbr+�insert�copy�deepcopy�appendr(rr;�
startswithrr7�len)�namesr=rBr>rZ
cmd_prefixr6�cmdr?r@�p�srrr�latest_version�sD

���rT�available_versioncOstd|i|��S)aY
    Returns a string representing the package version or an empty string if not
    installed. If more than one package name is specified, a dict of
    name/version pairs is returned.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.version <package name>
        salt '*' pkg.version <package1> <package2> <package3> ...
    zpkg_resource.version)r)rPr=rrr�version�s
rVFcKsptjj�t�t�}|r6|dg}|r|�dd�td|dd�}|ddkr6d	}d
|vr2||d
7}t|��dS)z�
    Use pkg update to get latest pkg_summary

    force
        Pass -f so that the cache is always refreshed.

        .. versionadded:: 2018.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.refresh_db
    Zupr�-f�cmd.run_allrr�retcoderrC�stderrT)	r
rrZ
clear_rtagZ__opts__rrJrr)�forcer=rrQ�callZcommentrrrrI�srIcCs*|rtdSt�td�}td|�|S)z'
    Use pkg list from __context__
    �
pkg.list_pkgs�pkg_resource.stringify)�__context__rKrLr)�versions_as_list�retrrr�_list_pkgs_from_contexts
rbc	s�tjj�|�}t�fdd�dD��riSdtvr"��dd�r"t|�St�}i}t	d|r0|dgnd	gd
d�}|�
�D]%}zt�d|d
�d�
dd
�\}}Wn	tyVYq:wt	d|||�q:t	d|�t�|�td<|sut	d|�|S)z�
    .. versionchanged:: 2016.3.0

    List the packages currently installed as a dict::

        {'<package_name>': '<version>'}

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.list_pkgs
    cs g|]}tjj���|���qSr)r
rrFrG�get)r!�x�r=rr�
<listcomp>s zlist_pkgs.<locals>.<listcomp>)ZremovedZ
purge_desiredr]Zuse_contextTrZls�pkg_inforrz[; ]rrr3zpkg_resource.add_pkgzpkg_resource.sort_pkglistr^)r
rrFrG�anyr_rcrbrrr;�rerr5�
ValueErrorrKrL)r`r=rrar?r@r�verrrer�	list_pkgs
s0��"�rlTcKs8i}tt|d����D]}t|dd�}|r|||<q|S)z�
    List all available package upgrades.

    .. versionadded:: 2018.3.0

    refresh
        Whether or not to refresh the package database before installing.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.list_upgrades
    )rBF)�sortedrl�keysrT)rBr=�pkgsrZpkg_upgraderrr�
list_upgrades<s�rpc
Ks�ztd|||fi|��\}}Wnty }zt|��d}~ww|�dd�}	|s-|	r-|	}|s1iSg}
g}t�}|rL|}
|rKt�d|�|
�d|f�nd}
|r]t�d|�|
�d	|f�|d
krdd}
n|dkrv|rv|rq|�d�|�d
�|�	d|
�|�|�t
�}td||
dd�}|ddkr�|dr�|dg}ng}t�dd�t
�}t
jj�||�}|r�td||d�d��t�|S)ae
    Install the passed package

    name
        The name of the package to be installed.

    refresh
        Whether or not to refresh the package database before installing.

    fromrepo
        Specify a package repository to install from.


    Multiple Package Installation Options:

    pkgs
        A list of packages to install from a software repository. Must be
        passed as a python list.

        CLI Example:

        .. code-block:: bash

            salt '*' pkg.install pkgs='["foo","bar"]'

    sources
        A list of packages to install. Must be passed as a list of dicts,
        with the keys being package names, and the values being the source URI
        or local path to the package.

        CLI Example:

        .. code-block:: bash

            salt '*' pkg.install sources='[{"foo": "salt://foo.deb"},{"bar": "salt://bar.deb"}]'

    Return a dict containing the new package names and versions::

        {'<package>': {'old': '<old-version>',
                       'new': '<new-version>'}}

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.install <package name>
    �pkg_resource.parse_targetsN�reporCzSetting PKG_REPOS=%sZ	PKG_REPOSZpkg_addzSetting PKG_PATH=%sZPKG_PATH�fileZ
repositoryrW)�-y�inrrXr)�envr	rYrZr]z)Problem encountered installing package(s)��errors�changes��info)rrrrcr�logr{rM�extendrJrlr_rHr
rrF�
compare_dicts�_rehash)r6rBZfromreporoZsourcesr=�
pkg_params�pkg_type�excrrrv�argsrrQ�oldr?rx�newrarrr�installTsh0�����


�r�cKs�t�}|siStjj�|�rt�t�}g}|s!|�|ddg�n"tjj�|�r7|D]}|�|dd|g�q*nddd�}t	�
|d�|D]}td|d	d
d�}|dd
krXnqEt�
dd�t�}	tjj�||	�}
|dd
krytd|
|d�d��|
S)a�
    Run pkg upgrade, if pkgin used. Otherwise do nothing

    refresh
        Whether or not to refresh the package database before installing.

    Multiple Package Upgrade Options:

    pkgs
        A list of packages to upgrade from a software repository. Must be
        passed as a python list.

        CLI Example:

        .. code-block:: bash

            salt '*' pkg.upgrade pkgs='["foo","bar"]'

    Returns a dictionary containing the changes:

    .. code-block:: python

        {'<package>':  {'old': '<old-version>',
                        'new': '<new-version>'}}

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.upgrade
    rtzfull-upgrader�rz7Ignoring the parameter `pkgs` because it is not a list!)rY�reasonr�rXrF)r	Zpython_shellrYrr]Nz&Problem encountered upgrading packages)ry�resultrz)rr
rrFrGrIrlrMZis_listr|�errorrr_rHr~r)rBror=rr�Zcmdsrr�rQr�rarrr�upgrade�sB �����r�c
s:ztd||�\}}Wnty}zt|��d}~ww|s iSt�}g}|D]'�|��g�}|s2q't|t�rD|��fdd�|D��q'|���d|���q'|sSiSt	�}	|	r]|	ddgndg}
|
�|�td	|
d
d�}|dd
kr}|dr}|dg}ng}t
�dd�t�}
tj
j�||
�}|r�td||d�d��|S)a
    name
        The name of the package to be deleted.


    Multiple Package Options:

    pkgs
        A list of packages to delete. Must be passed as a python list. The
        ``name`` parameter will be ignored if this option is passed.

    .. versionadded:: 0.16.0


    Returns a list containing the removed packages.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.remove <package name>
        salt '*' pkg.remove <package1>,<package2>,<package3>
        salt '*' pkg.remove pkgs='["foo", "bar"]'
    rqNcsg|]	}��d|���qS)r3r)r!�v��paramrrrf7szremove.<locals>.<listcomp>r3rt�removeZ
pkg_removerXrrrYrrZr]z'Problem encountered removing package(s)rwrz)rrrrlrc�
isinstance�listr}rMrr_rHr
rrFr~)r6ror=r�r�r�r�r�rkrrQr?rxr�rarr�rr�sF��

�r�cKst||d�S)a]
    Package purges are not supported, this function is identical to
    ``remove()``.

    name
        The name of the package to be deleted.


    Multiple Package Options:

    pkgs
        A list of packages to delete. Must be passed as a python list. The
        ``name`` parameter will be ignored if this option is passed.

    .. versionadded:: 0.16.0


    Returns a dict containing the changes.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.purge <package name>
        salt '*' pkg.purge <package1>,<package2>,<package3>
        salt '*' pkg.purge pkgs='["foo", "bar"]'
    )r6ro)r�)r6ror=rrr�purgeVsr�cCs6tdd�}|�d�ddvrtdddd	�d
Sd
S)z�
    Recomputes internal hash table for the PATH variable.
    Use whenever a new command is created during the current
    session.
    zenviron.getZSHELL�/���)ZcshZtcshrZrehashrrN)rr)�shellrrrrus�rcKs4t|�}g}|d��D]}|�|�q||d<|S)z�
    List the files that belong to a package.

    CLI Examples:

    .. code-block:: bash

        salt '*' pkg.file_list nginx
    �files)�	file_dict�valuesr})�packager=rar�Z	pkg_filesrrr�	file_list�s
r�c	Os�g}i}|D]7}dd|g}td|dd�}g||<|d��D]}|�|�q|d��D]}|�d�r<||�|�q-q-q||d	�}t|�D]}||rS||d
krV||=qG|S)z�
    .. versionchanged:: 2016.3.0

    List the files that belong to a package.

    CLI Examples:

    .. code-block:: bash

        salt '*' pkg.file_dict nginx
        salt '*' pkg.file_dict nginx varnish
    rgz-qLrXrrrZ�stdoutr�)rxr�rC)rr;rMrNr�)	Zpackagesr=rxr�r�rQrar@�fieldrrrr��s&


�
�r�cKs|S)z�
    Normalize package names

    .. note::
        Nothing special to do to normalize, just return
        the original. (We do need it to be compatible
        with the pkg_resource provider.)
    r)ror=rrr�normalize_name�s	r�)F)T)NFNNN)TN)NN)/�__doc__rK�loggingrriZsalt.utils.datar
Zsalt.utils.decoratorsrZ
decoratorsZsalt.utils.functoolsZsalt.utils.pathZsalt.utils.pkgZsalt.exceptionsrr�compiler�	getLogger�__name__r|r.Zmemoizerrr(r+r1r7rrT�	functoolsZalias_functionrUrVrIrbrlrpr�r�r�r�rr�r�r�rrrr�<module>sT






	>�
#

/

o
K
H$