HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/uaclient/entitlements/__pycache__/livepatch.cpython-310.pyc
o

nHJe�2�@s�ddlZddlmZmZmZmZddlmZmZm	Z	m
Z
mZmZm
Z
mZddlmZmZddlmZddlmZddgZd	d
d�Ze��Ze�e�e��ZGdd
�d
e�Zdd�ZdS)�N)�Any�Dict�Optional�Tuple)�event_logger�
exceptions�http�	livepatch�messages�snap�system�util)�IncompatibleService�
UAEntitlement)�ApplicationStatus)�StaticAffordanceg�?g�?z)Invalid Auth-Token provided to livepatch.z2Your running kernel is not supported by Livepatch.)zUnknown Auth-Tokenzunsupported kernelc	seZdZejjZdZejZ	ej
ZejZ
dZdZdZdZedeedffdd��Zedeedffdd	��Zdd
edefdd�Z	dd
ededefdd�Zddd�Zdeeeejffdd�Zdeeeejffdd�Z dd�Z!	dde"e#e$fde"e#e$fdedef�fdd�
Z%�Z&S) �LivepatchEntitlementr	FT�return.cCs0ddlm}ddlm}t|tj�t|tj�fS)Nr��FIPSEntitlement)�RealtimeKernelEntitlement)�uaclient.entitlements.fipsr�uaclient.entitlements.realtimerrr
�LIVEPATCH_INVALIDATES_FIPS�REALTIME_LIVEPATCH_INCOMPATIBLE)�selfrr�r�A/usr/lib/python3/dist-packages/uaclient/entitlements/livepatch.py�incompatible_services+s���z*LivepatchEntitlement.incompatible_servicescsZddlm}||j�}t|��dtjk��tjj	|j
d�dd�dftj�fdd�dffS)Nrr��titlecSst��S�N)r�is_containerrrrr�<lambda>Jsz9LivepatchEntitlement.static_affordances.<locals>.<lambda>Fcs�Sr!rr��is_fips_enabledrrr#Os)rr�cfg�bool�application_statusr�ENABLEDr
�"SERVICE_ERROR_INSTALL_ON_CONTAINER�formatr �!LIVEPATCH_ERROR_WHEN_FIPS_ENABLED)rr�fips_entrr$r�static_affordances:s 
���
��z'LivepatchEntitlement.static_affordances�silentc
CsJt��st�tjjdd��t��t��sLt�tjjdd��zt�	d�Wn$t
jyK}ztj
d|d�t�tjjdd��WYd}~nd}~wwt��t�d	|jjtj�}t�d
|jjtj�}tj||tjd�t��s�t�tjjdd��zt�	d
�Wnt
jy�}zt
jt|�d��d}~wwt�||�|jddd�S)zYEnable specific entitlement.

        @return: True on success, False otherwise.
        �snapd)�packagesz
snapd snapz!Failed to install snapd as a snap��exc_infozsnap install snapd)�commandNr�https)�
http_proxy�https_proxy�retry_sleepszcanonical-livepatch snapzcanonical-livepatch��	error_msgT��process_directives�
process_token)r�is_snapd_installed�event�infor
�INSTALLING_PACKAGESr+�
install_snapd�is_snapd_installed_as_a_snap�install_snapr�ProcessExecutionError�LOG�warning�EXECUTING_COMMAND_FAILED�run_snapd_wait_cmdr�validate_proxyr&r6�PROXY_VALIDATION_SNAP_HTTP_URLr7�PROXY_VALIDATION_SNAP_HTTPS_URL�configure_snap_proxy�SNAP_INSTALL_RETRIESr	�is_livepatch_installed�ErrorInstallingLivepatch�str�configure_livepatch_proxy�setup_livepatch_config)rr/�er6r7rrr�_perform_enableTs\�������������z$LivepatchEntitlement._perform_enabler<r=c
Cs�|jjj�|j�}|r;zt|�Wn)tjy:}ztj	t
|�|d�t�t
jjt
|�d��WYd}~dSd}~ww|r�|�d�}|sQt�d|j�|jjd}|��\}}|tjkr�t�d�t�t
j�z
t�tjd	g�Wntjy�}ztj	t
|�|d�WYd}~dSd}~wwz
tjtjd
|gdd�Wn<tjy�}z/t
j}t��D]\}	}
|	t
|�vr�||
7}nq�|t
jkr�|t
|�7}t�|�WYd}~dSd}~wwt�t
jjd
d��dS)aProcesss configuration setup for livepatch directives.

        :param process_directives: Boolean set True when directives should be
            processsed.
        :param process_token: Boolean set True when token should be
            processsed.
        r2r9NF�
resourceTokenzHNo specific resourceToken present. Using machine token as %s credentials�machineTokenz&Disabling livepatch before re-enabling�disable�enableT��capturezCanonical Livepatchr)r&�machine_token_file�entitlements�get�name�process_config_directivesrrErF�errorrQr?r@r
�LIVEPATCH_UNABLE_TO_CONFIGUREr+�debugr �
machine_tokenr(r�DISABLED�LIVEPATCH_DISABLE_REATTACHr�subpr	�
LIVEPATCH_CMD�LIVEPATCH_UNABLE_TO_ENABLE�
ERROR_MSG_MAP�items�ENABLED_TMPL)rr<r=�entitlement_cfgrT�livepatch_tokenr(�_details�msg�
error_message�
print_messagerrrrS�sr

�����
�

��

��

��
�z+LivepatchEntitlement.setup_livepatch_configcCs$t��sdStjtjdgdd�dS)zYDisable specific entitlement

        @return: True on success, False otherwise.
        TrXrZ)r	rOrrgrh)rr/rrr�_perform_disable�sz%LivepatchEntitlement._perform_disablecCs:tjdf}t��stjtjfSt��durtjtjfS|Sr!)	rr)r	rOrer
�LIVEPATCH_NOT_ENABLED�status�+LIVEPATCH_APPLICATION_STATUS_CLIENT_FAILURE)rrurrrr(�s
�z'LivepatchEntitlement.application_statuscCszt��}|tjjkrt��}dtjj|j	|j
d�fS|tjjkr0t��}dtjj|j	|j
d�fS|tjj
kr;dtjfSdS)NT)�version�arch)FN)r	�on_supported_kernel�LivepatchSupport�UNSUPPORTEDr�get_kernel_infor
�LIVEPATCH_KERNEL_NOT_SUPPORTEDr+�
uname_release�uname_machine_arch�
KERNEL_EOL�LIVEPATCH_KERNEL_EOL�KERNEL_UPGRADE_REQUIRED�!LIVEPATCH_KERNEL_UPGRADE_REQUIRED)r�support�kernel_inforrr�enabled_warning_status�s,�����z+LivepatchEntitlement.enabled_warning_statuscCs"t��tjjkrt��stjSdSr!)r	ryrzr{rr"r
�*LIVEPATCH_KERNEL_NOT_SUPPORTED_DESCRIPTION)rrrr�status_description_overrides��z0LivepatchEntitlement.status_description_override�orig_access�deltas�allow_enablec
s�t��|||�r
dS|�di�}|�di��dd�}|r$|��\}}|S|��\}}|tjkr1dS|�di�}	tddg�}
t|
�	|	��}t|�d	d��}t
||g�rit�d
�t
�tjj|jd��|j||d�SdS)
a1Process any contract access deltas for this entitlement.

        :param orig_access: Dictionary containing the original
            resourceEntitlement access details.
        :param deltas: Dictionary which contains only the changed access keys
        and values.
        :param allow_enable: Boolean set True if allowed to perform the enable
            operation. When False, a message will be logged to inform the user
            about the recommended enabled service.

        :return: True when delta operations are processed; False when noop.
        T�entitlement�obligations�enabledByDefaultF�
directives�caCerts�remoteServerrVzANew livepatch directives or token. running setup_livepatch_config)�servicer;)�super�process_contract_deltasr^rYr(rre�setr'�intersection�anyrFr@r?r
�#SERVICE_UPDATING_CHANGED_DIRECTIVESr+r_rS)
rr�r�r��delta_entitlement�process_enable_default�enable_success�_r(�delta_directives�supported_deltasr<r=��	__class__rrr�	s@�
�����z,LivepatchEntitlement.process_contract_deltas)F)TT)'�__name__�
__module__�__qualname__r
�urls�LIVEPATCH_HOME_PAGE�help_doc_urlr_�LIVEPATCH_TITLEr �LIVEPATCH_DESCRIPTION�description�LIVEPATCH_HELP_TEXT�	help_text�#affordance_check_kernel_min_version�affordance_check_kernel_flavor�affordance_check_series�affordance_check_arch�propertyrrrrr.r'rUrSrsrr�NamedMessager(r�r�rrQrr��
__classcell__rrr�rrsR6���
�
>

�
�
�
�
���rcCs�|sdS|�di��di�}|�d�}|r#tjtjdd�|�gdd�|�d	d
�}|�d�r4|dd�}|rFtjtjdd
�|�gdd�dSdS)a�Process livepatch configuration directives.

    We process caCerts before remoteServer because changing remote-server
    in the canonical-livepatch CLI performs a PUT against the new server name.
    If new caCerts were required for the new remoteServer, this
    canonical-livepatch client PUT could fail on unmatched old caCerts.

    @raises: ProcessExecutionError if unable to configure livepatch.
    Nr�r�r��configzca-certs={}TrZr���/���zremote-server={})r^rrgr	rhr+�endswith)r&r��ca_certs�
remote_serverrrrr`As0

��
�
��r`) �logging�typingrrrr�uaclientrrrr	r
rrr
�uaclient.entitlements.baserr�(uaclient.entitlements.entitlement_statusr�uaclient.typesr�LIVEPATCH_RETRIESrj�get_event_loggerr?�	getLogger�replace_top_level_logger_namer�rFrr`rrrr�<module>s (
�&