HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ns3133907 6.8.0-86-generic #87-Ubuntu SMP PREEMPT_DYNAMIC Mon Sep 22 18:03:36 UTC 2025 x86_64
User: cssnetorguk (1024)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //usr/libexec/kcare/python/kcarectl/__pycache__/kcare.cpython-312.pyc
�

p��g�%����ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlm
Z
dd	lmZ	d
Zd�Zd�Zd
�Zd�Zd�Zd�Zd�ZGd�de�ZGd�de�ZGd�de�Zd�Zd�Z ejBd��Z"ejBd��Z#ejBd��Z$d�Z%d�Z&d�Z'd �Z(d!�Z)d"�Z*ejBd#��Z+d$�Z,d%�Z-d&�Z.d'�Z/y)(�N�)�config)�	constants)�	log_utils)�
process_utils)�utils)�SafeExceptionWrapper)�json_loads_nstrzuname: c�8�tj|�xs|dvS)Nz.-_+)�str�isalnum)�cs �+/usr/libexec/kcare/python/kcarectl/kcare.py�
is_uname_charrs���;�;�q�>�(�Q�&�[�(�c
��t�}tt||tj�d�}	|j�D]f}|j
t�s�djtt|tt�dj���c|j�S	|j�y#|j�wxYw)N�r�)�get_kernel_hash�open�get_cache_pathr�
PATCH_INFO�	readlines�
startswith�UNAME_LABEL�join�filterr�len�strip�close)�patch_level�khash�f�lines    r�parse_unamer%s�����E��^�E�;��0A�0A�
B�C�H�A���K�K�M�	X�D����{�+��w�w�v�m�T�#�k�:J�:L�5M�5S�5S�5U�V�W�W�	���	�		X�	
���	�
��	
���	�s�(B<�>B<�)B<�<Cc��tjjtj�r=	ttjd�}|j
|�|j�yy#t$rYywxYw)N�wTF)	�os�path�existsr�KCARE_UNAME_FILEr�writer �	Exception)�new_versionr#s  r�kcare_update_effective_versionr/*sc��	�w�w�~�~�f�-�-�.�	��V�,�,�c�2�A�
�G�G�K� �
�G�G�I�����	���	�s�;A,�,	A8�7A8c���ttjd�}	tj|j��j
�|j�S#|j�wxYw)N�rb)rr�KERNEL_VERSION_FILE�hashlib�sha1�read�	hexdigestr �r#s rrr6sI���V�
'�
'��.�A���|�|�A�F�F�H�%�/�/�1�	���	�����	�s�0A�A/c	���tjjtjd�}tjj|�rBt
|d�5}|j�j�}	t|�|cddd�Sy#t$r=tttjj|���cYcddd�St$rYddd�ywxYw#1swYyxYw)z:Returns timestamp from PATCH_CACHE/stoped.at if its exsitsz
stopped.atrN�errorz-1)r(r)rr�PATCH_CACHEr*rr5�rstrip�int�
ValueErrorr�getctimer-)�stopped_at_filename�fh�values   r�
get_last_stoprBAs����'�'�,�,�y�'<�'<�l�K��	�w�w�~�~�)�*�
�%�s�
+�	�r��G�G�I�$�$�&�E�
��E�
�
�	�	���
�
G��3�r�w�w�/�/�0C�D�E�F�F�	�	��
��	�	�
��
	��s<�C,�:B�C,�:C)�C,�C)�C,�(C)�)C,�,C5c��tjxsd}tjxsd}dj||t	|�|g�}t
jd|f}|r||fz
}tjj|�S)N�none�default�-�patches)	r�PREFIX�
PATCH_TYPErrrr:r(r))r"�plevel�fname�prefix�ptype�	patch_dir�results       rrrRso��
�]�]�
$�f�F����*��E����&�%��V��e�<�=�I��#�#�Y�	�
:�F���5�(���
�7�7�<�<�� � rc�J�tjtjg|���S�N)r�get_patch_server_urlrrH)�partss r�get_kernel_prefixed_urlrT\s���%�%�f�m�m�<�e�<�<rc��eZdZd�Zd�Zy)�BaseKernelPatchLevelc�B�t|jt|�g|���SrQ)rr"r��selfrSs  r�
cache_pathzBaseKernelPatchLevel.cache_pathas���d�j�j�#�d�)�<�e�<�<rc�`�|j|j|j|jd�S)N��levelr"�baseurl�releaser\)rYs r�as_dictzBaseKernelPatchLevel.as_dictds(���Z�Z��Z�Z��|�|��|�|�	
�	
rN)�__name__�
__module__�__qualname__rZr`�rrrVrV`s��=�
rrVc�4��eZdZd�fd�	Zdd�Zd�Zd�Z�xZS)�KernelPatchLevelc�$��t||�||�SrQ)�super�__new__)�clsr"r]r^r_�	__class__s     �rrizKernelPatchLevel.__new__ns����S�#�&�s�E�2�2rc�<�||_||_||_||_yrQr\)rYr"r]r^r_s     r�__init__zKernelPatchLevel.__init__qs����
���
������rc�X�tj|j|jg|���SrQ)rrRr^r"rXs  r�kmod_urlzKernelPatchLevel.kmod_urlws"���)�)�$�,�,��
�
�K�U�K�Krc�l�tj|j|jt	|�g|���SrQ)rrRr^r"rrXs  r�file_urlzKernelPatchLevel.file_urlzs)���)�)�$�,�,��
�
�C��I�V�PU�V�VrrQ)rarbrcrirmrorq�
__classcell__�rks@rrfrfms���3��L�Wrrfc�6��eZdZ�fd�Zd�Zd�Zd�Zd�Z�xZS)�LegacyKernelPatchLevelc�^��	t||�||�S#t$r}t|��d}~wwxYwrQ)rhrir=r	)rjr"r]�excrks    �rrizLegacyKernelPatchLevel.__new__s7���	,���c�*�3��6�6���	,�&�s�+�+��	,�s��	,�'�,c�<�||_||_d|_d|_yrQr\)rYr"r]s   rrmzLegacyKernelPatchLevel.__init__�s����
���
������rc��dtjvr t|jt	|�g|���St|jg|���S)Nzpatches.kernelcare.com)r�PATCH_SERVERrTr"rrXs  rrozLegacyKernelPatchLevel.kmod_url�s>��#�v�':�':�:�*�4�:�:�s�4�y�I�5�I�I�&�t�z�z�:�E�:�:rc�B�t|jt|�g|���SrQ)rTr"rrXs  rrqzLegacyKernelPatchLevel.file_url�s��&�t�z�z�3�t�9�E�u�E�Erc�B�t|jt|�|�SrQ)rfr"r<)rYr^s  r�upgradezLegacyKernelPatchLevel.upgrade�s����
�
�C��I�w�?�?r)	rarbrcrirmrorqr}rrrss@rruru~s���,��;�F�@rruc�4�	ttjjtj
d�d�5}t
j|j�|�ddd�y#1swYyxYw#t$rtjdd��YywxYw)N�kernel_patch_level.jsonr'z!failed to dump kernel patch levelF��	print_msg)rr(r)rrr:�json�dumpr`r-r�logexc)�kernel_patch_levelr#s  r�dump_kernel_patch_levelr��sz��O�
�"�'�'�,�,�y�4�4�6O�P�RU�
V�	7�Z[��I�I�(�0�0�2�A�6�	7�	7�	7���O����<��N�O�s.�8A4�%A(�A4�(A1�-A4�1A4�4 B�Bc��	ttjjtj
d��5}t
|j��cddd�S#1swYyxYw#t$rtjdd��YywxYw)Nrz(failed to read dumped kernel patch levelFr�)rr(r)rrr:r
r5r-rr�r7s r�read_dumped_kernel_patch_levelr��sm��V�
�"�'�'�,�,�y�4�4�6O�P�
Q�	-�UV�"�1�6�6�8�,�	-�	-�	-���V����C�u�U�V�s.�7A(�A�	A(�A%�!A(�%A(�( B�
Bc���d}d}tjjd�rTtdd�5}|D]9}|j	�}|jd�s�%|j
dd�\}}�;	ddd�tjj|�rGtjtjj|d��}|rtd�|D��}|S#1swY�qxYw)Nz
/var/crashz/etc/kdump.confrzpath rz*/vmcorec3�ZK�|]#}tjj|����%y�wrQ)r(r)r>��.0�its  r�	<genexpr>z0kdumps_latest_event_timestamp.<locals>.<genexpr>�s����D�"����)�)�"�-�D�s�)+)r(r)�isfilerrr�split�isdir�globr�max)�
kdump_pathrO�
kdump_confr$�_�vmcore_lists      r�kdumps_latest_event_timestampr��s����J�
�F�	�w�w�~�~�'�(�
�#�S�
)�	8�Z�"�
8���z�z�|���?�?�7�+�$(�J�J�t�Q�$7�M�A�z�
8�	8�

�w�w�}�}�Z� ��i�i������Z�� D�E����D��D�D�F��M�	8�	8�s�'C �C � C)c��tjs-tjj	tj
�r=t
jtj
ddgdd��\}}}|j�Sy)Nz	is-active�kdumpT)�catch_stdout�catch_stderrzsystemd-absent)	r�SKIP_SYSTEMCTL_CHECKr(r)r��	SYSTEMCTLr�run_commandr)r��stdouts  r�kdump_statusr��s`���%�%������	�8K�8K�)L�$�0�0�)�2E�2E�{�T[�1\�ko�C�D���6�1��|�|�~��rc���tjjtj�sytj
tj�}|syt
d�|D��S)Nc3�K�|]O}tjjtjjtj
|�����Qy�wrQ)r(r)r>rr�
KDUMPS_DIRr�s  rr�z7crashreporter_latest_event_timestamp.<locals>.<genexpr>�s4����Z��r�w�w��������V�->�->�� C�D�Z�s�AA)r(r)r�rr��listdirr�)�
files_lists r�$crashreporter_latest_event_timestampr��sF��
�7�7�=�=��*�*�+�����F�-�-�.�J����Z�z�Z�Z�Zrc���d}tjj|�syt|d�5}|j	�j�}ddd�|S#1swYSxYw)Nz/sys/module/kcare/versionr)r(r)r*rr5r)�kmod_version_filer#�versions   r�get_current_kmod_versionr��sU��3��
�7�7�>�>�+�,��	
���	%�#���&�&�(�.�.�"��#��N�#��N�s�A�A"c
��t�}|sytjdddt||tj
�g�j
�}||k7S)NTz
/sbin/modinfoz-Fr�)r�r�check_outputrr�KMOD_BINr)r"rJ�old_versionr.s    r�is_kmod_version_changedr��sR��*�,�K����,�,�	�$�	�>�%���I[�I[�+\�]���e�g���+�%�%rc�X�t�}|stj�St|�SrQ)�loaded_patch_level�platformr_r%)r!s r�kcare_uname_sur��s'��$�&�K�����!�!��{�#�#rc���tjjtj�r6ttjd�j
�j�St�S)Nr)	r(r)r*rr+rr5rr�rdrr�kcare_unamer��sH��	�w�w�~�~�f�-�-�.��F�+�+�S�1�6�6�8�>�>�@�@���rc��tt��d}|r 	t|�t
t�|�Sy#t$r}t	|dt���d}~wwxYw)N�patch-levelzUnexpected patch state)�parse_patch_description�loaded_patch_descriptionr<r=r	�_patch_inforur)�pl�es  rr�r��sb��	 �!9�!;�	<�]�	K�B�	�	S���G�&�o�&7��<�<�
���	S�&�q�*B�K�M�R�R��	S�s�:�	A�A�Ac�L�tjtjdg�S)N�info)rr�r�
KPATCH_CTLrdrrr�r��s���%�%�y�';�';�V�&D�E�Erc���	td�D�cgc]}|j�d��c}Scc}w#ttf$r/}t	j
dt
|�zd��gcYd}~Sd}~wwxYw)Nz
/proc/modulesrz#Error getting loaded modules list: Fr�)rr��OSError�IOErrorr�logerrorr)r$�exs  r�get_loaded_modulesr�s_���,0��,A�B�D��
�
��Q��B�B��B���W������@�3�r�7�J�V[�\��	���s'�
1�,�1�1�A/�$A*�$A/�*A/c�D�dt�vrytt�d�S)N�kcarezkpatch-description)r��get_patch_valuer�rdrrr�r�
s#���(�*�*���;�=�*>�?�?rc�J�tj|�j|�SrQ)r�data_as_dict�get)r��labels  rr�r�s�����d�#�'�'��.�.rc���ddddd�}|s|S|jd�\}}}|jd�\}}}|jd�\}}}|xsd|d<|xsd|d<||d	<||d
<|S)NrEr)r��
patch-type�last-update�kernel-version�;�:rFr�r�r�r�)�	partition)	�descrO�level_type_timestampr��kernel�
level_type�	timestampr!�
patch_types	         rr�r�s���!��2�ac�
d�F���
�&*�n�n�S�&9�#��!�V�3�=�=�c�B��J��9�!+�!5�!5�c�!:��K��J�(�/�4�F�=��%�2��F�<��%�F�=��%�F����Mrc��tjjtjd�}tjj|�r<t
|d�5}	|j�}tj|�cddd�Sy#tttttf$rYnwxYw	ddd�y#1swYyxYw)Nzkcare.stater)r(r)rrr:r*rr5�ast�literal_eval�SyntaxErrorr�r=�	TypeError�UnicodeDecodeError)�
state_filer#�states   r�	get_stater�*s��������i�3�3�]�C�J�	�w�w�~�~�j�!�
�*�c�
"�	�a�
�������'�'��.�	�	�"��
 ��*�i�AS�T�
��
���	�	�	�s*�B9�$B�B,�)B9�+B,�,B9�9C)0r�r�r(r3r�r�rrrrrr�errorsr	�py23r
�typing�Optional�Tuplerrr%r/rrBrrTr<rVrfrur�r��cachedr�r�r�r�r�r�r�r�r�r�r�r�r�r�rdrr�<module>r�s'��
��	���������(�!����)�	�	���"!�=�

�3�

�W�+�W�"@�1�@�6O�V����
��
� ���������[��[��&�$� �=�F�������@�/��(r