Your IP : 216.73.216.218


Current Path : /usr/lib/python3/dist-packages/uaclient/entitlements/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/uaclient/entitlements/__pycache__/livepatch.cpython-38.pyc

U

��.d1�@s�ddlZddlZddlmZmZmZmZddlmZm	Z	m
Z
mZmZm
Z
mZmZddlmZmZddlmZddlmZddgZd	d
d�Ze	��ZGdd
�d
e�Zdd�ZdS)�N)�Any�Dict�Optional�Tuple)�apt�event_logger�
exceptions�	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 kernelcs�eZdZdZdZdZdZdZdZdZ	dZ
eee
dfd�d	d
��Zeeedfd�dd��Zdeed
�dd�Zdeeed�dd�Zd dd�Zeeeejfd�dd�Zeeeejfd�dd�Zdd�Zd!eeefeeefeed��fdd�
Z�Z S)"�LivepatchEntitlementz%https://ubuntu.com/security/livepatchr	Z	LivepatchzCanonical Livepatch serviceFT.)�returncCs0ddlm}ddlm}t|tj�t|tj�fS)Nr��FIPSEntitlement)�RealtimeKernelEntitlement)�uaclient.entitlements.fipsrZuaclient.entitlements.realtimerrr
ZLIVEPATCH_INVALIDATES_FIPSZREALTIME_LIVEPATCH_INCOMPATIBLE)�selfrr�r�A/usr/lib/python3/dist-packages/uaclient/entitlements/livepatch.py�incompatible_services+s���z*LivepatchEntitlement.incompatible_servicescsPddlm}||j�}t|��dtjk��tjdd�dftj	�fdd�dffS)NrrcSst��S�N)r�is_containerrrrr�<lambda>H�z9LivepatchEntitlement.static_affordances.<locals>.<lambda>Fcs�Srrr�Zis_fips_enabledrrrMr)
rr�cfg�bool�application_statusr�ENABLEDr
Z$LIVEPATCH_ERROR_INSTALL_ON_CONTAINERZ!LIVEPATCH_ERROR_WHEN_FIPS_ENABLED)rrZfips_entrr r�static_affordances:s
��
��z'LivepatchEntitlement.static_affordances)�silentrc
Cs�t�tj�s�t�d�t�tj�zt�	�Wn4t
jk
rb}zt�
dt|��W5d}~XYnXztjddddgtjd�Wq�t
jk
r�t
���Yq�Xnt��s�t
jtj|jd	��ztjtjd
ddgd
d�WnLt
jk
�r$}z*t�dt|�����rt�tj�n�W5d}~XYnXt�d|jjtj�}t�d|jj tj!�}tj"||tj#d�t$�%��s�t�d�ztjtjddgd
tj#d�Wn6t
jk
�r�}zt
j&t|�d��W5d}~XYnXt$�'||�|j(d
d
d�S)zYEnable specific entitlement.

        @return: True on success, False otherwise.
        zInstalling snapdz<Trying to install snapd. Ignoring apt-get update failure: %sNzapt-get�installz--assume-yesZsnapd��retry_sleeps)Zsnap_cmd�service�waitrzseed.loadedT��capturezunknown command .*waitZhttpZhttps)�
http_proxy�https_proxyr)z#Installing canonical-livepatch snapzcanonical-livepatch)r-r))Z	error_msg��process_directives�
process_token))rZwhichrZSNAP_CMD�event�infor
ZAPT_UPDATING_LISTSrZrun_apt_update_commandrZUserFacingError�logging�debug�str�subpZAPT_RETRIES�ProcessExecutionErrorZCannotInstallSnapdErrorZis_installedZSnapdNotProperlyInstalledError�title�re�search�lowerZwarningZSNAPD_DOES_NOT_HAVE_WAIT_CMDr
Zvalidate_proxyr!r.ZPROXY_VALIDATION_SNAP_HTTP_URLr/ZPROXY_VALIDATION_SNAP_HTTPS_URLZconfigure_snap_proxyZSNAP_INSTALL_RETRIESr	�is_livepatch_installedZErrorInstallingLivepatchZconfigure_livepatch_proxy�setup_livepatch_config)rr&�er.r/rrr�_perform_enableRsz
�
�
��
���


�
"�z$LivepatchEntitlement._perform_enable)r1r2rc
Cs�|jjj�|j�}|rnzt|�WnJtjk
rl}z*dt|�}t	�
|�t�|�WY�dSd}~XYnX|�r�|�d�}|s�t�
d|j�|jjd}|��\}}|tjk�rt�
d|j�zt�tjdg�Wn:tjk
�r}zt�t|��WY�dSd}~XYnXztjtjd	|gd
d�Wn�tjk
�r�}z^d}t��D]&\}	}
|	t|�k�rN||
7}�qv�qN|dk�r�|t|�7}t	�
|�WY�dSd}~XYnXt	�
d
�d
S)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.
        zUnable to configure Livepatch: FN�
resourceTokenzHNo specific resourceToken present. Using machine token as %s credentialsZmachineTokenz.Disabling %s prior to re-attach with new token�disable�enableTr,zUnable to enable Livepatch: zCanonical livepatch enabled.)r!Zmachine_token_fileZentitlements�get�name�process_config_directivesrr9r7r3r4r5�errorr6r:Z
machine_tokenr#r�DISABLEDrr8r	�
LIVEPATCH_CMD�
ERROR_MSG_MAP�items)rr1r2Zentitlement_cfgr@�msgZlivepatch_tokenr#Z_detailsZ
error_messageZ
print_messagerrrr?�s^

�


��
�




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

        @return: True on success, False otherwise.
        TrCr,)r	r>rr8rJ)rr&rrr�_perform_disable�sz%LivepatchEntitlement._perform_disablec
Cs�tjdf}t��stjtjfSztjtj	dgt
d�WnPtjk
r�}z0t
�dt|��tjtjdt|�d�fWY�Sd}~XYnX|S)N�statusr(zLivepatch not enabled. %s�)rFrM)rr$r	r>rIr
ZLIVEPATCH_NOT_ENABLEDrr8rJ�LIVEPATCH_RETRIESrr9r5r6r7�NamedMessage)rrOr@rrrr#�s
�
�z'LivepatchEntitlement.application_statuscCs6t��dkr2t��}t��}dtjj|j|d�fSdS)NFT)�version�arch)FN)	r	�on_supported_kernelrZget_kernel_infoZ
get_dpkg_archr
ZLIVEPATCH_KERNEL_NOT_SUPPORTED�formatZ
uname_release)rZkernel_inforTrrr�enabled_warning_status�s��z+LivepatchEntitlement.enabled_warning_statuscCst��dkrt��stjSdS)NF)r	rUrrr
Z*LIVEPATCH_KERNEL_NOT_SUPPORTED_DESCRIPTION)rrrr�status_description_overrides
��z0LivepatchEntitlement.status_description_override)�orig_access�deltas�allow_enablerc
s�t��|||�rdS|�di�}|�di��dd�}|rH|��\}}|S|��\}}|tjkrbdS|�di�}	tddg�}
t|
�	|	��}t|�d	d��}t
||g�r�t�d
|j
�|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�entitlementZobligationsZenabledByDefaultF�
directives�caCerts�remoteServerrBz$Updating '%s' on changed directives.r0)�super�process_contract_deltasrErDr#rrI�setr"�intersection�anyr5r4rFr?)
rrYrZr[Zdelta_entitlementZprocess_enable_defaultZenable_success�_r#Zdelta_directivesZsupported_deltasr1r2��	__class__rrra	s4�
��z,LivepatchEntitlement.process_contract_deltas)F)TT)F)F)!�__name__�
__module__�__qualname__Zhelp_doc_urlrFr:ZdescriptionZ#affordance_check_kernel_min_versionZaffordance_check_kernel_flavorZaffordance_check_seriesZaffordance_check_arch�propertyrrrrr%r"rAr?rNrrr
rRr#rWrXrr7rra�
__classcell__rrrfrrsBE��;
���

�rcCs�|sdS|�di��di�}|�d�}|rFtjtjdd�|�gdd�|�d	d
�}|�d�rh|dd�}|r�tjtjdd
�|�gdd�dS)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^Zconfigzca-certs={}Tr,r_rP�/���zremote-server={})rErr8r	rJrV�endswith)r!r]Zca_certsZ
remote_serverrrrrG9s.

��
��rG)r5r;�typingrrrrZuaclientrrrr	r
rrr
Zuaclient.entitlements.baserrZ(uaclient.entitlements.entitlement_statusrZuaclient.typesrrQrKZget_event_loggerr3rrGrrrr�<module>s(
�