HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/timezone.cpython-310.pyc
o

�N�g�N�@sdZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddl
ZddlmZddlmZmZe�e�ZdZdd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd�Z#d d!�Z$d"d#�Z%d$d%�Z&d&d'�Z'dS)(z5
Module for managing timezone on POSIX-like systems.
�N)�DEFAULT_HASH_TYPE)�CommandExecutionError�SaltInvocationError�timezonecCs$tjj��rdStjj��rdStS)z)
    Only work on POSIX-like systems
    )Fz�The timezone execution module failed to load: win_timezone.py should replace this module on Windows.There was a problem loading win_timezone.py.)Fz�The timezone execution module failed to load: mac_timezone.py should replace this module on macOS.There was a problem loading mac_timezone.py.)�salt�utils�platformZ
is_windowsZ	is_darwin�__virtualname__�r
r
�I/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/timezone.py�__virtual__s
rcCs8tddgdd�}|ddkrd�|d�}t|��|S)	z'
    get the output of timedatectl
    zcmd.run_all�timedatectlF�Zpython_shell�retcoderztimedatectl failed: {}�stderr)�__salt__�formatr)�ret�msgr
r
r�_timedatectl1s
rcC�d}tjj�|d��2}|D]'}tjj�|�}d|vr4|�d��d�d}|�d�p*dWd�Sq
Wd�n1s?wYt	d	|��)
Nz
/etc/TIMEZONE�r�TZ=�
�=����'"�UTC�Unable to get timezone from �
rr�files�fopen�stringutils�
to_unicode�rstrip�split�stripr��tzfile�fp_�lineZzonepartr
r
r�_get_zone_solaris>����r+cCsHd}tj�|�rddd|g}td|dd�Stj�d�r"td	|��d
S)zA
    Return the timezone in /etc/adjtime of the system clock
    �/etc/adjtime�tailz-n�1�cmd.runFrz/dev/rtcz$Unable to get hwclock timezone from N)�os�path�existsrr)Zadjtime_file�cmdr
r
r�_get_adjtime_timezoneIs�r5cCs�d}tjj�|d��=}|D]2}tjj�|�}t�d|�rq
d|vr?d|vr?|�d��	d�d}|�
d�p5d	Wd�Sq
Wd�n1sJwYtd
|��)N�/etc/sysconfig/clockr�^\s*#ZZONErrrrrr)rrr r!r"r#�re�matchr$r%r&rr'r
r
r�_get_zone_sysconfigZs���r:c
Cs�t�}d}t|�}ztj�tj�dt�|���}|�|�r$||d�WSWt
d	��ty�}z�|j	t	j
krKdtdvrEt�WYd}~St
|d��|j	t	jkr�dtdvr`t�WYd}~St�d|�t�dt�}tjj�||�}tjj�|�D]>\}}}	|	D]-}
tj�||
�}||d�}|dtjvr�q�|tjj�||�kr�|WYd}~Sq�q{WYd}~t
d	��WYd}~t
d	��d}~ww)
N�/usr/share/zoneinfo/z/etc�FreeBSD�	os_familyz does not existzD%s is not a symbolic link. Attempting to match it to zoneinfo files.�	hash_typerzUnable to determine timezone)�_get_localtime_path�lenr1r2�normpath�join�readlink�
startswith�OSError�errno�ENOENT�
__grains__�get_zonecoder�EINVAL�log�warningZ__opts__�getrrrZ	hashutilsZget_hashZos_walk�string�ascii_lowercase)r(ZtzdirZ	tzdir_lenZ
olson_name�excr>Ztzfile_hash�root�dirsr �filename�	full_pathr
r
r�_get_zone_etc_localtimegsR
���
���
�
�
��rUc
Cs�d}z'tjj�|d��}tjj�|�����Wd�WS1s"wYWdSty@}zt	d|�d|j
����d}~ww)N�
/etc/timezonerzProblem reading timezone file z: )rrr r!r"r#�readr&rEr�strerror)r(r)rPr
r
r�_get_zone_etc_timezone�s(����rYcCr)
N�/etc/environmentrrrrrrrrrr'r
r
r�
_get_zone_aix�r,r[c	Cs�tjj�d�r:t�}dd�tjj�|dd�D�D]}zt�d|��	d�WSt
y0Yqwtd�|d���t
d	��d
krEt�St
d}dD]}||vrVt�SqKd
D]}||vrdt�SqY|dvrlt�Sd|vrst�Sd|vrzt�Std��)a,
    Get current timezone (i.e. America/Denver)

    .. versionchanged:: 2016.11.4

    .. note::

        On AIX operating systems, Posix values can also be returned
        'CST6CDT,M3.2.0/2:00:00,M11.1.0/2:00:00'

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.get_zone
    r
cs��|]}|��VqdS�N�r&��.0�xr
r
r�	<genexpr>�s�
�zget_zone.<locals>.<genexpr>�stdoutrzTime ?zone:\s+(\S+)��JFailed to parse timedatectl output: {}
Please file an issue with SaltStackr1Zcentosr=)�RedHat�Suse)�Debian�Gentoo)r<ZOpenBSDZNetBSD�	NILinuxRT�	Slackware�Solaris�AIXzUnable to get timezone)rrr2�whichr�	itertoolsr%r8r9�group�AttributeErrorrrrH�lowerrUr:rYr+r[)rr*r=�familyr
r
r�get_zone�s@
��
�
�
�rtcCstdddgdd�S)z�
    Get current timezone (i.e. PST, MDT, etc)

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.get_zonecode
    r0�datez+%ZFr)rr
r
r
rrI�s
rIcCsNdtdvrtdddgdd�Sd}tj�|�sd	|��Std|dgdd�S)
z�
    Get current numeric timezone offset from UTC (i.e. -0700)

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.get_offset
    rmr=r0ruz+%zFrz/opt/salt/bin/datez&date in salt binaries does not exist: )rHrr1r2r3)Z	salt_pathr
r
r�
get_offset�s

rvcCs�tjj�d�rztdd|���Wn	tyYnwdtdvs(dtdvr.d|��}nd|��}tj�|�sDdtdvrDd	|��St	�}tj�|�rRt�
|�dtdvrdtd
ddd
|���n/dtdvr�t�}d|g}td|dd�}|dkrdSd|g}td|dd�dSt�||�dtdvr�td
ddd|�d��dSdtdvr�td
ddd|�d��dSdtdvs�dtdvr�tjj
�dd��}|�tjj�|����|�d �Wd!�dS1s�wYdS)"a{
    Unlinks, then symlinks /etc/localtime to the set timezone.

    The timezone is crucial to several system processes, each of which SHOULD
    be restarted (for instance, whatever you system uses as its cron and
    syslog daemons). This will not be automagically done and must be done
    manually!

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.set_zone 'America/Denver'

    .. versionchanged:: 2016.11.4

    .. note::

        On AIX operating systems, Posix values are also allowed, see below

    .. code-block:: bash

        salt '*' timezone.set_zone 'CST6CDT,M3.2.0/2:00:00,M11.1.0/2:00:00'

    r
r0ztimedatectl set-timezone rlr=rmz/usr/share/lib/zoneinfo/r;zZone does not exist: �file.sedz/etc/default/initz^TZ=.*rZchtz�cmd.retcodeFrrTrfr6�^ZONE=.*�ZONE="�"rg�^TIMEZONE=.*�
TIMEZONE="rhrirV�wrN)rrr2rnrrrHr1r3r?�unlinkrt�symlinkr r!�writer"Zto_strr&)r�zonepathr(Zcurtzstringr4�resultZofhr
r
r�set_zone�sT�



���
��r�c
Cs�dtdvsdtdvr|t�kSdtdvsdtdvr)tj�t��s)|t�kSt�}t|�}z	tj||dd�WSt	yb}z|j
}||krPtd|�d	���||kr]td
�
||j����d}~ww)af
    Compares the given timezone name with the system timezone name.
    Checks the hash sum between the given timezone, and the one set in
    /etc/localtime. Returns True if names and hash sums match, and False if not.
    Mostly useful for running state checks.

    .. versionchanged:: 2016.3.0

    .. note::

        On Solaris-like operating systems only a string comparison is done.

    .. versionchanged:: 2016.11.4

    .. note::

        On AIX operating systems only a string comparison is done.

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.zone_compare 'America/Denver'
    rlr=rm�Archr<F)�shallowzCan't find a local timezone "r{z3Failed to read {} to determine current timezone: {}N)rHrtr1r2�isfiler?�_get_zone_file�filecmp�cmprErSrrrrX)rr(r�rPZproblematic_filer
r
r�zone_compareCs,

����r�cCs dtdvrdtdvrdSdS)Nrjr=ZnilrtZlsb_distrib_idz/etc/natinst/share/localtime�/etc/localtime)rHr
r
r
rr?tsr?cCs
d|��S)Nr;r
)rr
r
rr�}s
r�c
Cs:tjj�d�rFt�}dd�|d��D�D]'}d|��vr<z|�d�d����dkr/Wd	SWd
St	y;Yqwqt
d�|d���td}d
D]}||vrWt
�SqLdtdvr�zZtjj�dd��F}|D]8}tjj�|�}t�d|�rzqjd|vr�|�d��d�d��}|dkr�Wd�Wd
SWd�Wd	SqjWd�Wt
�S1s�wYWt
�Sty�}zWYd}~t
�Sd}~wwdtdv�rUtj�d��sRd}z^tjj�|d��I}|D]>}tjj�|�}|�d��r'|�d�}|�d�d�d�}|d
k�r|Wd�WS|dk�r'Wd�WdSq�t
d|����1�s3wYWt
�St�yQ}z	t
d�||j���d}~wwt
�Sdtdv�r�d }z;tjj�|d��(}|D]}tjj�|�}|�d!��r�Wd�Wd
S�qj	Wd�Wd	S1�s�wYWn$t�y�}z|jtjk�r�WYd}~d
St
d�||j���d}~wwd"tdv�r'd#}z;tjj�|d��(}|D]}tjj�|�}|�d$��r�Wd�Wd
S�q�	Wd�Wd	S1�s�wYWn$t�y&}z|jtjk�rWYd}~d
St
d�||j���d}~wwd%tdv�r�tj�d��s�d&}z=tjj�|d��(}|D]}tjj�|�}|�d
��r\Wd�Wd
S�qC	Wd�Wd	S1�slwYWt
�St�y�}z|jtjk�r�WYd}~d
SWYd}~t
�Sd}~wwt
�SdS)'z�
    Get current hardware clock setting (UTC or localtime)

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.get_hwclock
    r
csr\r]r^r_r
r
rrb�s�zget_hwclock.<locals>.<genexpr>rczrtc in local tz�:rZyes�	localtimerrer=)rfrgrjrh�/etc/default/rcSrr7zUTC=rrNrir-�/etc/conf.d/hwclockzclock=r�localZLOCALz"Correct offset value not found in z"Problem reading offset file {}: {}rlz/etc/rtc_configz
zone_info=GMTrmrZzTZ=UTCrk�/etc/hardwareclock)rrr2rnr�
splitlinesrrr%r&�
IndexErrorrrrHr5r r!r"r#r8r9r$rEr1r3rDrXrFrG)rr*r=rsr)Zis_utcrPZoffset_filer
r
r�get_hwclock�s 
��	
�
��
�����
��

�
��
��������(�����
�(�����
�&�	�
����r�cCsFtjj�d�rdd|dkrdndg}td|dd�d	kStd
}|dvr0|��dkr.td
��dSt�}dtd
vrd|��dvrCtd��dtdvrMtd��dd|��dkrWdn|g}td|dd�d	kSd|��}t	j�
|�swtd|�d���t	�d�t	�
|d�dtd
vr�dd|dkr�dndg}td|dd�d	kSdtd
vr�tdd d!d"|�d#��dSd$td
vr�tdd d%d&|�d#��dSd'td
vr�|d(kr�tdd)d*d+�dS|dkr�tdd)d*d,�dSd-td
v�r
|d.vr�td/��|dkr�d0}tdd1d2d3|�d#��dSd4|v�r!|d.v�rtd/��tdd5d6|��dS)7z�
    Sets the hardware clock to be either UTC or localtime

    CLI Example:

    .. code-block:: bash

        salt '*' timezone.set_hwclock UTC
    r
z
set-local-rtcr��true�falserxFrrr=)rmrj�utczUTC is the only permitted valueTrl)r�r�z/localtime and UTC are the only permitted valuesZsparcZcpuarchz-UTC is the only choice for SPARC architectureZrtcz-z�GMTr;zZone 'z' does not existr�r�Ztimezonectlrfrwr6ryrzr{rgr|r}rhrr�z^UTC=.*zUTC=yeszUTC=nori)rr�z&Only 'UTC' and 'localtime' are allowedr�r�z	^clock=.*zclock="rkr�z^(UTC|localtime))rrr2rnrrHrrrrtr1r3rrr�)Zclockr4r=rr�r
r
r�set_hwclocks�
���

���
����
�
r�)(�__doc__rFr��loggingr1r8rNZsalt.utils.filesrZsalt.utils.hashutilsZsalt.utils.itertoolsZsalt.utils.pathZsalt.utils.platformZsalt.utils.stringutilsZsalt.configrZsalt.exceptionsrr�	getLogger�__name__rKr	rrr+r5r:rUrYr[rtrIrvr�r�r?r�r�r�r
r
r
r�<module>sF


%4
K1