Current File : //usr/libexec/kcare/python/kcarectl/__pycache__/config_handlers.cpython-36.pyc
3

��wh��-@s@ddlZddlZddlmZddlmZddlmZddlmZddlmZddlm	Z	d	Z
d
ddd
dgZe�Z
dd�Zdd�deddd�eedeeeeeeedd�eeeeedd�ejdd�dd�ejdejdd�dd�eeeeejddejedd�edded�,Zdd�Zdd�ZGd d!�d!e�Zd"d#�Zd$d%�Zd&d'�ZdS)(�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_OUTPUTcCs|j�dkS)N�1�TRUE�YES�Y)rrrr)�upper)�value�r�5/usr/libexec/kcare/python/kcarectl/config_handlers.py�bool_converter srcCs|j�S)N)�strip)�vrrr�<lambda>&srcCs|j�S)N)r)rrrrr*scCs
|jd�S)N�/)�rstrip)rrrrr5scCs|pdS)Nr)rrrrr;scCs
|jd�S)Nr)r)rrrrr=scCs
|jd�S)Nr)r)rrrrr>scCs
|jd�S)Nr)r)rrrrrBscCs
|jd�S)Nr)r)rrrrrCscCsdd�|jd�D�S)NcSsg|]}|j�j��qSr)r�lower)�.0�ptchrrr�
<listcomp>Msz<lambda>.<locals>.<listcomp>�,)�split)rrrrrMs),�AFTER_UPDATE_COMMAND�AUTO_STICKY_PATCHSET�AUTO_UPDATE�AUTO_UPDATE_DELAY�BEFORE_UPDATE_COMMAND�CHECK_SSL_CERTSr�	FORCE_GID�
FORCE_IPV4�
FORCE_IPV6r
�HTTP_TIMEOUT�IGNORE_UNKNOWN_KERNELr�KCORE_OUTPUT_SIZE�
KDUMPS_DIRr
�LIBCARE_DISABLED�!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MB�LIBCARE_SOCKET_TIMEOUT�LIB_AUTO_UPDATE�PATCH_LEVEL�PATCH_METHOD�PATCH_SERVER�PATCH_SERVER_IPV6�
PATCH_TYPE�PREFIX�PREV_PATCH_TYPE�REGISTRATION_URL�REGISTRATION_URL_IPV6�PRINT_LEVEL�REPORT_FQDN�SILENCE_ERRORS�STATUS_CHANGE_GAP�STICKY_PATCH�STICKY_PATCHSET�UPDATE_DELAY�
UPDATE_POLICY�UPDATE_SYSCTL_CONFIG�USERSPACE_PATCHESr	�KERNEL_VERSION_FILE�KCARE_UNAME_FILE�SUCCESS_TIMEOUTc	Ks�tt�}|j�}|j�x�|j�D]�\}}d}|d}|d}x^tt|��D]N}||j|�sl||j|�rL|dkr|||=n|dt|�d||<d}PqLW|s"|j	|dt|�d�q"Wt
jtdj|��dS)NF�=� z = �
T�)
�open�CONFIG�	readlines�close�items�range�len�
startswith�str�appendr�atomic_write�join)	�kwargsZcf�linesZpropr�updatedZprop_eqZprop_sp�irrr�
update_configUs"r]c
Cs�i}tjd�}xD|D]<}|j|�}|r<|j�\}}|sHd}ntd|��|||<qWt|�tt�}|r~tddjt|����x`|j	�D]T\}}t|}	|dks�|	dkr�q�y|	|�Wq�t
k
r�td||f��Yq�Xq�Wtf|�dS)Nz^([^=]+)=([^=]*)$z8Invalid parameter format: %s. Format should be KEY=VALUEzUnknown parameter: %sz, zBad value for %s: %s)�re�compile�match�groups�
SystemExit�set�POSSIBLE_CONFIG_OPTIONSrX�sortedrQ�	Exceptionr])
�paramsZparams_for_update�pattern�paramr`�keyrZunknown_params�var_name�convertrrr�update_config_from_argsjs,


rmc@s$eZdZdd�Zdd�Zdd�ZdS)�FakeSecHeadcCs||_d|_dS)Nz[asection]
)�fp�sechead)�selfrorrr�__init__�szFakeSecHead.__init__cCs&|jrz|jSd|_Xn
|jj�SdS)N)rpro�readline)rqrrrrs�s

zFakeSecHead.readlineccs.|jr|jVd|_x|jD]
}|VqWdS)N)rpro)rq�linerrr�__iter__�s
zFakeSecHead.__iter__N)�__name__�
__module__�__qualname__rrrsrurrrrrn�s	rnc
s�tj�i�tddd�d��y,ttt��}tjr<�j|�n
�j	|�Wnt
k
r\iSXd��fdd�	}x4dD],\}}tj|�st�j
d
|�}|rt|tj|<qtWx tj�D]\}}|||d�q�W�S)NrL)�
HTTP_PROXY�HTTPS_PROXY)�defaultscsTy�jd|�}Wntk
r(|}YnX|dk	rP|r>||�}|�|<tj|�dS)N�asection)�getrf�CONFIG_OPTIONS�add)�name�defaultrlr)�cp�resultrr�read_var�s
z%get_config_settings.<locals>.read_var�httpry�httpsrzr|)rl)NN�r�ry�r�rz)r�r�)r~�clearrrnrMrNr�PY2�readfp�	read_filerfr�get_proxy_from_envr}�os�environrdrQ)rr��scheme�variable�proxyrkrlr)r�r�r�get_config_settings�s&
r�cCsPi}xF|j�D]:\}}|j�}|jd�r|jdd�jdd�j�}|||<qW|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-rL�-�_)rQrrT�replace)�headers�flagsrjrZ	key_upperZ
formatted_keyrrr�%get_config_options_from_feature_flags�s

r�cCs�t|�}xz|j�D]n\}}|tkr$q|dk	r|tkry&tt|��tj|<tj	j
d||�Wqtk
r~tj	jd||�YqXqWdS)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�rQ�FEATURE_FLAGS_WHITELISTr~�bool�intr�__dict__r�kcarelog�info�
ValueError�error)r�Zoptions_from_psrjrrrr�set_config_from_patchserver�sr�)r�r^rLrrrrr�py23rrNr�rcr~rr�rUrrrdr]rm�objectrnr�r�r�rrrr�<module>s�(
Page not found – Hello World !