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: //proc/self/root/usr/libexec/kcare/python/kcarectl/__pycache__/config_handlers.cpython-312.pyc
�

p��g	��
�ddlZddlZddlmZddlmZddlmZddlmZddlmZddlm	Z		d	Zgd
�Ze�Zd�Zidd
��dd�de�dd�dd��de�de�dd�de�de�de�de�de�dd��de�de�de�id e�d!e�d"d#��d$ej*�d%d&��d'ej,�d(d�d)ej,�d*d+��d,e�d-e�d.e�d/e�d0ej*�d1d�d2d�d3ej*��ed4�edded5��Zd6�Zd7�ZGd8�d9e�Zd:�Zd;�Zd<�Zy)=�N�)�	constants)�	log_utils)�utils)�config)�
http_utils)�ConfigParserz/etc/sysconfig/kcare/kcare.conf)�USE_CONTENT_FILE_V3�FORCE_JSON_SIG_V3�ENABLE_CRASHREPORTER�KCORE_OUTPUT�KMSG_OUTPUTc�&�|j�dvS)N)�1�TRUE�YES�Y)�upper)�values �5/usr/libexec/kcare/python/kcarectl/config_handlers.py�bool_converterr s���;�;�=�5�5�5��AFTER_UPDATE_COMMANDc�"�|j�S�N��strip��vs r�<lambda>r &s��a�g�g�i�r�AUTO_STICKY_PATCHSET�AUTO_UPDATE�AUTO_UPDATE_DELAY�BEFORE_UPDATE_COMMANDc�"�|j�Srrrs rr r *s��q�w�w�y�r�CHECK_SSL_CERTSr�	FORCE_GIDr�HTTP_TIMEOUT�IGNORE_UNKNOWN_KERNELr
�KCORE_OUTPUT_SIZE�
KDUMPS_DIRc�$�|jd�S�N�/��rstriprs rr r 3s��A�H�H�S�M�rr�LIBCARE_DISABLED�!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MB�LIBCARE_SOCKET_TIMEOUT�LIB_AUTO_UPDATE�PATCH_LEVELc��|xsdSr�rs rr r 9s
��Q�Y�$�r�PATCH_METHOD�PATCH_SERVERc�$�|jd�Sr-r/rs rr r ;s��a�h�h�s�m�r�
PATCH_TYPE�PREFIX�PREV_PATCH_TYPE�REGISTRATION_URLc�$�|jd�Sr-r/rs rr r ?s��!�(�(�3�-�r�PRINT_LEVEL�REPORT_FQDN�SILENCE_ERRORS�STATUS_CHANGE_GAP�STICKY_PATCH�STICKY_PATCHSET�UPDATE_DELAY�
UPDATE_POLICYc��|jd�D�cgc] }|j�j���"c}Scc}w)N�,)�splitr�lower)r�ptchs  rr r Is+��Q�W�W�S�\�#R�T�D�J�J�L�$6�$6�$8�#R���#Rs�%<)�UPDATE_SYSCTL_CONFIG�USERSPACE_PATCHESr
�KERNEL_VERSION_FILE�KCARE_UNAME_FILE�SUCCESS_TIMEOUTc��tt�}|j�}|j�|j	�D]�\}}d}|dz}|dz}tt
|��D]K}||j|�s||j|�s�,|�||=n|dzt|�zdz||<d}n|r�w|j|dzt|�zdz���tjtdj|��y)NF�=� z = �
T�)
�open�CONFIG�	readlines�close�items�range�len�
startswith�str�appendr�atomic_write�join)	�kwargs�cf�lines�propr�updated�prop_eq�prop_sp�is	         r�
update_configrkQs���	
�f��B��L�L�N�E��H�H�J��|�|�~�
;���e�����*����*���s�5�z�"�	�A��Q�x�"�"�7�+�u�Q�x�/B�/B�7�/K��=��a��#�e�|�c�%�j�8�4�?�E�!�H����	���L�L�����E�
�2�T�9�:�
;�
���v�r�w�w�u�~�.rc���i}tjd�}|D]@}|j|�}|r|j�\}}|sd}nt	d|z��|||<�Bt|�tt�z
}|r&t	ddjt|��z��|j�D]\}}t|}	|�|	��	|	|��tdi|��y#t$rt	d|�d|����wxYw)Nz^([^=]+)=([^=]*)$z8Invalid parameter format: %s. Format should be KEY=VALUEzUnknown parameter: %sz, zBad value for z: r7)�re�compile�match�groups�
SystemExit�set�POSSIBLE_CONFIG_OPTIONSrb�sortedr[�	Exceptionrk)
�params�params_for_update�pattern�paramro�keyr�unknown_params�var_name�converts
          r�update_config_from_argsr~fs�����j�j�-�.�G��'���
�
�e�$�������J�C������W�Z_�_�`�`�!&��#��'��*�+�c�2I�.J�J�N���0�4�9�9�V�N�=S�3T�T�U�U�,�2�2�4�I���%�)�(�3���=�G�O��	I��E�N�I��&�%�&���	I��x��G�H�H�	I�s�C�C6c��eZdZd�Zd�Zd�Zy)�FakeSecHeadc� �||_d|_y)Nz[asection]
)�fp�sechead)�selfr�s  r�__init__zFakeSecHead.__init__�s�����%��rc��|jr	|jd|_S|jj�S#d|_wxYwr)r�r��readline)r�s rr�zFakeSecHead.readline�s:���<�<�
$��|�|�#����7�7�#�#�%�%�� $���s	�;�	Ac#�xK�|jr|j��d|_|jD]}|���y�wr)r�r�)r��lines  r�__iter__zFakeSecHead.__iter__�s6�����<�<��,�,���D�L��G�G�	�D��J�	�s�8:N)�__name__�
__module__�__qualname__r�r�r�r7rrr�r��s��&�&�rr�c����tj�i�tddd����	tt	t
��}tjr�j|�n�j|�d��fd�	}dD]C\}}tj|�r��jd|�}|s�1|tj|<�Et j#�D]\}}|||����S#t$ricYSwxYw)	NrV)�
HTTP_PROXY�HTTPS_PROXY)�defaultsc���	�jd|�}|�%|r||�}|�|<tj|�yy#t$r|}Y�5wxYw)N�asection)�getru�CONFIG_OPTIONS�add)�name�defaultr}r�cp�results    ��r�read_varz%get_config_settings.<locals>.read_var�s^���	��F�F�:�t�,�E�������� �F�4�L����t�$����	��E�	�s�=�A�
A))�httpr�)�httpsr�r�)r})NN)r��clearr	r�rWrXr�PY2�readfp�	read_filerur�get_proxy_from_envr��os�environrsr[)	rr��scheme�variable�proxyr|r}r�r�s	       @@r�get_config_settingsr��s��������
�F�	�b��D�	E�B���T�&�\�*���=�=��I�I�f���L�L�� �
%�O�-�����,�,�V�4��F�F�:�x�0�E��',��
�
�8�$�-�5�:�:�<�,���'���7�+�,��M��3���	��s�AC+�+C9�8C9c���i}|j�D]\\}}|j�}|jd�s�(|jdd�jdd�j�}|||<�^|S)ao
    Checking headers for feature flags which start with 'KC-Flag-' and
    reformat it to dictionary with keys in upper case and without 'KC-Flag-' prefix
    and dashes replaced with underscores. For unification all header keys are checking in upper case.
    For example:
    'KC-Flag-Some-Value' -> 'SOME_VALUE'
    :return: dict {'SOME_VALUE': 'value', ...}
    zKC-FLAG-rV�-�_)r[rr^�replace)�headers�flagsrzr�	key_upper�
formatted_keys      r�%get_config_options_from_feature_flagsr��st��
�E��m�m�o�)�
��U��I�I�K�	����
�+�%�-�-�j�"�=�E�E�c�3�O�U�U�W�M�#(�E�-� �	)�
�Lrc�b�t|�}|j�D]a\}}|tvr�|��|tvs�	t	t|��tj|<tjjd||��cy#t$r$tjjd||�Y��wxYw)z�
    Set global variables using feature flag from patchserver headers.
    Checks that option is allowed by whitelist and update global variable
    using globals()
    :param headers: Response headers from patchserver
    :return: None
    Nz'patchserver config override: %s with %szGInvalid value during attempt to override config from patchserver %s: %s)
r�r[�FEATURE_FLAGS_WHITELISTr��bool�intr�__dict__r�kcarelog�info�
ValueError�error)r��options_from_psrzrs    r�set_config_from_patchserverr��s���<�G�D�O�%�+�+�-�@�
��U��-�-�����N�!:�
@�'+�C��J�'7�����$��"�"�'�'�(Q�SV�X]�^�
@���
@��"�"�(�(�)r�tw�y~��
@�s�AB�*B.�-B.)r�rmrVrrrrr�py23r	�typing�Optional�Set�ListrXr�rrr�rr�r_rrKrsrkr~�objectr�r�r�r�r7rr�<module>r�sB��

�	��������
+�������6�*��/�*��D�*��>�	*�
��*��0�
*��~�*��N�*���*���*��C�*��^�*��N�*���*��)�*� �>�!*�"��#*�$(��%*�&�c�'*�(�~�)*�*�&�+*�,�C�I�I�-*�.�+�/*�0�#�)�)�1*�2
�d�3*�4�s�y�y�5*�6�/�7*�8�3�9*�:�>�;*�<�n�=*�>��?*�@�C�I�I�A*�B�t�C*�D�D�E*�F�S�Y�Y�G*�H+�R�)����S*��Z/�*'�:�&��,%�P�&@r