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/utils/__pycache__/win_system.cpython-310.pyc
o

�N�g�9�@s�dZddlZddlZddlZzddlZddlZdZWney%dZYnwe�	e
�ZdZdZ
dZdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�ZdS)&zx
Win System Utils

Functions shared with salt.modules.win_system and salt.grains.pending_reboot

.. versionadded:: 3001
�NTFZ
win_systemz;SYSTEM\CurrentControlSet\Services\salt-minion\Volatile-DatazReboot requiredcCstjj��sdStsdStS)z'
    Only works on Windows systems
    )FzNwin_system salt util failed to load: The util will only run on Windows systems)�salt�utils�platformZ
is_windows�HAS_WIN32_MODS�__virtualname__�rr�I/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/win_system.py�__virtual__"s
r	cCst�tj�}|r
|SdS)aZ
    Get the Windows computer name. Uses the win32api to get the current computer
    name.

    .. versionadded:: 3001

    Returns:
        str: Returns the computer name if found. Otherwise returns ``False``.

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_computer_name()
    F)�win32apiZGetComputerNameEx�win32conZComputerNamePhysicalDnsHostname)�namerrr�get_computer_name5sr
cCsXt�}ztjjjdddd�d}Wn
tyYdSw|r*|��|��kr(|SdSdS)a�
    Get a pending computer name. If the computer name has been changed, and the
    change is pending a system reboot, this function will return the pending
    computer name. Otherwise, ``None`` will be returned. If there was an error
    retrieving the pending computer name, ``False`` will be returned, and an
    error message will be logged to the minion log.

    .. versionadded:: 3001

    Returns:
        str:
            Returns the pending name if pending restart. Returns ``None`` if not
            pending restart.

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_computer_name()
    �HKLMz2SYSTEM\CurrentControlSet\Services\Tcpip\ParameterszNV Hostname��hive�key�vname�vdataN)r
rr�win_reg�
read_value�	TypeError�lower)�current�pendingrrr�get_pending_computer_nameJs����rcC�<d}d}|D]}d�||f�}tjjjd|d�rdSqdS)a�
    Determine whether there are pending Component Based Servicing tasks that
    require a reboot.

    If any the following registry keys exist then a reboot is pending:

    ``HKLM:\\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending``
    ``HKLM:\\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress``
    ``HKLM:\\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if there are pending Component Based Servicing tasks,
        otherwise ``False``

    CLI Example:

    .. code-block:: bash

        salt '*' system.get_pending_component_servicing
    zCSOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing)Z
RebootPendingZRebootInProgressZPackagesPending�\r�rrTF��joinrrrZ
key_exists�Zbase_keyZsub_keysZsub_keyrrrr�get_pending_component_servicingos�r!cCr)a@
    Determine whether there is a pending domain join action that requires a
    reboot.

    If any the following registry keys exist then a reboot is pending:

    ``HKLM:\\SYSTEM\CurrentControlSet\Services\Netlogon\AvoidSpnSet``
    ``HKLM:\\SYSTEM\CurrentControlSet\Services\Netlogon\JoinDomain``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if there is a pending domain join action, otherwise
        ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_domain_join()
    z*SYSTEM\CurrentControlSet\Services\Netlogon)ZAvoidSpnSetZ
JoinDomainrrrTFrr rrr�get_pending_domain_join�s�r"cCsLd}d}|D]}tjjjd||d�}|dr#|dr#|ddkr#dSqd	S)
a�
    Determine whether there are pending file rename operations that require a
    reboot.

    A reboot is pending if any of the following value names exist and have value
    data set:

    - ``PendingFileRenameOperations``
    - ``PendingFileRenameOperations2``

    in the following registry key:

    ``HKLM:\\SYSTEM\CurrentControlSet\Control\Session Manager``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if there are pending file rename operations, otherwise
        ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_file_rename()
    )ZPendingFileRenameOperationsZPendingFileRenameOperations2z0SYSTEM\CurrentControlSet\Control\Session Managerrr�successrz(value not set)TF)rrrr)Zvnamesrr�reg_retrrr�get_pending_file_rename�s�r%cCsZd}d}tjjjd||d�}|dr+zt|d�dkrWdSWd	Sty*Yd	Swd	S)
a@
    Determine whether there are pending Server Manager tasks that require a
    reboot.

    A reboot is pending if the ``CurrentRebootAttempts`` value name exists and
    has an integer value. The value name resides in the following registry key:

    ``HKLM:\\SOFTWARE\Microsoft\ServerManager``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if there are pending Server Manager tasks, otherwise
        ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_servermanager()
    ZCurrentRebootAttemptsz SOFTWARE\Microsoft\ServerManagerrrr#rrTF�rrrr�int�
ValueError)rrr$rrr�get_pending_servermanager�s���r)cCstjjjdddd�S)a�
    Determine whether the DVD Reboot flag is set.

    The system requires a reboot if the ``DVDRebootSignal`` value name exists
    at the following registry location:

    ``HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if the above condition is met, otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_dvd_reboot()
    rz1SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceZDVDRebootSignalr)rrrZvalue_existsrrrr�get_pending_dvd_reboots
�r*cCr)ag
    Determine whether there are pending updates that require a reboot.

    If either of the following registry keys exists, a reboot is pending:

    ``HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired``
    ``HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if any of the above conditions are met, otherwise
        ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_update()
    zCSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update)ZRebootRequiredZPostRebootReportingrrrTFrr rrr�get_pending_updates��r+cCs tjjjdttd�}|ddkS)a>
    Determine if at any time during the current boot session the salt minion
    witnessed an event indicating that a reboot is required.

    This function will return ``True`` if an install completed with exit
    code 3010 during the current boot session and can be extended where
    appropriate in the future.

    If the ``Reboot required`` value name exists in the following location and
    has a value of ``1`` then the system is pending reboot:

    ``HKLM:\\SYSTEM\CurrentControlSet\Services\salt-minion\Volatile-Data``

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if the ``Requires reboot`` registry flag is set to ``1``,
        otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_reboot_required_witnessed()

    rrr�)rrrr�MINION_VOLATILE_KEY�REBOOT_REQUIRED_NAME)Z
value_dictrrr�get_reboot_required_witnessedBs�r/cCstjjjdtdtddd�S)a�
    This function is used to remember that an event indicating that a reboot is
    required was witnessed. This function relies on the salt-minion's ability to
    create the following volatile registry key in the *HKLM* hive:

       *SYSTEM\CurrentControlSet\Services\salt-minion\Volatile-Data*

    Because this registry key is volatile, it will not persist beyond the
    current boot session. Also, in the scope of this key, the name *'Reboot
    required'* will be assigned the value of *1*.

    For the time being, this function is being used whenever an install
    completes with exit code 3010 and can be extended where appropriate in the
    future.

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if successful, otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.set_reboot_required_witnessed()
    rTr,Z	REG_DWORD)rrZvolatilerrZvtype)rrrZ	set_valuer-r.rrrr�set_reboot_required_witnessedds�r0cCsVd}tjjjd|dd�}|dr)zt|d�dkrWdSWd	Sty(Yd	Swd	S)
a�
    Determine whether there is a volatile update exe that requires a reboot.

    Checks ``HKLM:\Microsoft\Updates``. If the ``UpdateExeVolatile`` value
    name is anything other than 0 there is a reboot pending

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if there is a volatile exe, otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_update_exe_volatile()
    zSOFTWARE\Microsoft\UpdatesrZUpdateExeVolatilerr#rrTFr&)rr$rrr�get_pending_update_exe_volatile�s����r1cCstjj��S)a�
    Check the Windows Update system for a pending reboot state.

    This leverages the Windows Update System to determine if the system is
    pending a reboot.

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if the Windows Update system reports a pending update,
        otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_windows_update()
    )rrZ
win_updateZneeds_rebootrrrr�get_pending_windows_update�sr2c
Cs2tttttttttt	f
}|D]}|�rdSqdS)a/
    Determine whether there is a reboot pending.

    .. versionadded:: 3001

    Returns:
        bool: ``True`` if the system is pending reboot, otherwise ``False``

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_reboot()
    TF)
r+r2r1r%r)r!r*r/rr")Zchecks�checkrrr�get_pending_reboot�s �
�r4cCs2t�t�dut�t�t�t�t�t�t�t	�d�
S)a�
    Determine which check is signalling that the system is pending a reboot.
    Useful in determining why your system is signalling that it needs a reboot.

    .. versionadded:: 3001

    Returns:
        dict: A dictionary of the results of each function that checks for a
        pending reboot

    Example:

    .. code-block:: python

        import salt.utils.win_system
        salt.utils.win_system.get_pending_reboot_details()
    N)
zPending Component ServicingzPending Computer RenamezPending DVD RebootzPending File RenamezPending Join DomainzPending ServerManagerzPending UpdatezPending Windows UpdatezReboot Required WitnessedzVolatile Update Exe)
r!rr*r%r"r)r+r2r/r1rrrr�get_pending_reboot_details�s�r5)�__doc__�loggingZsalt.utils.win_regrZsalt.utils.win_updater
rr�ImportError�	getLogger�__name__�logrr-r.r	r
rr!r"r%r)r*r+r/r0r1r2r4r5rrrr�<module>s<�
%"#&(#"& %