HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/uaclient/entitlements/__pycache__/livepatch.cpython-38.pyc
U

��Jh�7�@s�ddlZddlmZmZmZmZddlmZmZm	Z	m
Z
mZmZm
Z
mZmZddlmZmZddlmZddlmZddgZd	d
d�Ze��Ze�e�e��ZGdd
�d
e�Zdd�Z dS)�N)�Any�Dict�Optional�Tuple)	�api�event_logger�
exceptions�http�	livepatch�messages�snap�system�util)�EntitlementWithMessage�
UAEntitlement)�ApplicationStatus)�StaticAffordanceg�?g�?z)Invalid Auth-Token provided to livepatch.z2Your running kernel is not supported by Livepatch.)zUnknown Auth-Tokenzunsupported kernelcs2eZdZejjZdZejZ	ej
ZejZ
dZdZdZdZeeedfd�dd��Zeeedfd�dd	��Zed�d
d�Zed�dd
�Zejed�dd�Zd ejeeed�dd�Zejd�dd�Z ee!e"ej#fd�dd�Z$eee"ej#fd�dd�Z%dd�Z&d!e'e(e)fe'e(e)feed��fdd�
Z*�Z+S)"�LivepatchEntitlementr
FT.)�returncCs0ddlm}ddlm}t|tj�t|tj�fS)Nr��FIPSEntitlement)�RealtimeKernelEntitlement)�uaclient.entitlements.fipsrZuaclient.entitlements.realtimerrrZLIVEPATCH_INVALIDATES_FIPSZREALTIME_LIVEPATCH_INCOMPATIBLE)�selfrr�r�A/usr/lib/python3/dist-packages/uaclient/entitlements/livepatch.py�incompatible_services,s���z*LivepatchEntitlement.incompatible_servicescs\ddlm}||jd�}t|��dtjk��tjj	|j
d�dd�dftj�fdd�dffS)	Nrr)�cfg)�titlecSst��pt��dkS)NZwsl)r
�is_containerZ
get_virt_typerrrr�<lambda>Ksz9LivepatchEntitlement.static_affordances.<locals>.<lambda>Fcs�S�Nrr�Zis_fips_enabledrrr Q�)rrr�bool�application_statusr�ENABLEDrZ"SERVICE_ERROR_INSTALL_ON_CONTAINER�formatrZ!LIVEPATCH_ERROR_WHEN_FIPS_ENABLED)rrZfips_entrr"r�static_affordances;s ���	
��z'LivepatchEntitlement.static_affordancescCsdS)N�r�rrrr�enable_stepsVsz!LivepatchEntitlement.enable_stepscCsdS)N�rr*rrr�
disable_stepsYsz"LivepatchEntitlement.disable_steps)�progressrc
Cs�|�tj�t��s2|�dtjjdd��t��t�	�s�|�dtjjdd��zt�
d�WnHtjk
r�}z(t
jd|d�|�dtjjdd��W5d	}~XYnXt�|�zt�d�WnHtjk
�r}z&t
jd
|d�t�tjjdd��W5d	}~XYnXt�d|jjtj�}t�d
|jjtj�}tj||tjd�t���s�|�dtjjdd��zt�
d�Wn6tjk
�r�}ztjt |�d��W5d	}~XYnXt�!||�|j"|ddd�S)zYEnable specific entitlement.

        @return: True on success, False otherwise.
        �infoZsnapd)Zpackagesz
snapd snapz!Failed to install snapd as a snap��exc_infozsnap install snapd�ZcommandNzFailed to refresh snapd snapzsnap refresh snapdr	Zhttps)�
http_proxy�https_proxyZretry_sleepszcanonical-livepatch snapzcanonical-livepatch�Z	error_msgT)�process_directives�
process_token)#r.rZINSTALLING_LIVEPATCHrZis_snapd_installed�emitZINSTALLING_PACKAGESr'Z
install_snapdZis_snapd_installed_as_a_snapZinstall_snapr�ProcessExecutionError�LOGZwarningZEXECUTING_COMMAND_FAILEDZrun_snapd_wait_cmdZrefresh_snap�eventr/r	Zvalidate_proxyrr3ZPROXY_VALIDATION_SNAP_HTTP_URLr4ZPROXY_VALIDATION_SNAP_HTTPS_URLZconfigure_snap_proxyZSNAP_INSTALL_RETRIESr
�is_livepatch_installedZErrorInstallingLivepatch�strZconfigure_livepatch_proxy�setup_livepatch_config)rr.�er3r4rrr�_perform_enable\s�����
�����
��"�z$LivepatchEntitlement._perform_enable)r.r6r7rc
Cs�|�tj�|j���|j�}|r�zt|�WnVtj	k
r�}z6t
jt|�|d�|�
dtjjt|�d��WY�dSd}~XYnX|�r�|�d�}|s�t
�d|j�|jjd}|��\}}|tjk�r8t
�d	�|�
dtj�zt�tjd
g�Wn>tj	k
�r6}zt
jt|�|d�WY�dSd}~XYnXztjtjd|gdd
�Wn�tj	k
�r�}zdtj}	t��D]&\}
}|
t|�k�rv|	|7}	�q��qv|	tjk�r�|	t|�7}	|�
d|	�WY�dSd}~XYnXd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.
        r0r/r5FN�
resourceTokenzHNo specific resourceToken present. Using machine token as %s credentialsZmachineTokenz&Disabling livepatch before re-enabling�disable�enableT�Zcapture)r.rZSETTING_UP_LIVEPATCHZmachine_token_fileZentitlements�get�name�process_config_directivesrr9r:�errorr=r8ZLIVEPATCH_UNABLE_TO_CONFIGUREr'�debugrZ
machine_tokenr%r�DISABLEDr/ZLIVEPATCH_DISABLE_REATTACHr
�subpr
�
LIVEPATCH_CMDZLIVEPATCH_UNABLE_TO_ENABLE�
ERROR_MSG_MAP�items)rr.r6r7Zentitlement_cfgr?Zlivepatch_tokenr%Z_details�msgZ
error_messageZ
print_messagerrrr>�sb
��
��

�

z+LivepatchEntitlement.setup_livepatch_config)r.cCsBt��sdStjdg}|�tjjd�|�d��tj	|dd�dS)zYDisable specific entitlement

        @return: True on success, False otherwise.
        TrB� r2rD)
r
r<rLr.rZEXECUTING_COMMANDr'�joinr
rK)rr.�cmdrrr�_perform_disable�s
�z%LivepatchEntitlement._perform_disablec
Cs�tjdf}t��stjtjfSzt��}Wn>tj	k
rh}ztj
tjj|j
d�fWY�Sd}~XYnX|dkr~tjtjfS|S)N)Zlivepatch_error)rr&r
r<rJrZLIVEPATCH_NOT_ENABLED�statusrr9ZWARNINGZ LIVEPATCH_CLIENT_FAILURE_WARNINGr'�stderrZ+LIVEPATCH_APPLICATION_STATUS_CLIENT_FAILURE)rrTZlivepatch_statusr?rrrr%�s 
���z'LivepatchEntitlement.application_statuscCszt��}|tjjkr4t��}dtjj|j	|j
d�fS|tjjkr`t��}dtjj|j	|j
d�fS|tjj
krvdtjfSdS)NT)�versionZarch)FN)r
�on_supported_kernel�LivepatchSupport�UNSUPPORTEDr
Zget_kernel_inforZLIVEPATCH_KERNEL_NOT_SUPPORTEDr'Z
uname_releaseZuname_machine_archZ
KERNEL_EOLZLIVEPATCH_KERNEL_EOLZKERNEL_UPGRADE_REQUIREDZ!LIVEPATCH_KERNEL_UPGRADE_REQUIRED)rZsupportZkernel_inforrr�enabled_warning_statuss,�����z+LivepatchEntitlement.enabled_warning_statuscCs"t��tjjkrt��stjSdSr!)r
rWrXrYr
rrZ*LIVEPATCH_KERNEL_NOT_SUPPORTED_DESCRIPTIONr*rrr�status_description_override+s���z0LivepatchEntitlement.status_description_override)�orig_access�deltas�allow_enablerc
s�t��|||�rdS|�di�}|�di��dd�}|rN|�t���\}}|S|��\}}|tjkrhdS|�di�}	t	ddg�}
t
|
�|	��}t
|�d	d��}t||g�r�t
�d
�t�tjj|jd��|jt��||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�entitlementZobligationsZenableByDefaultF�
directives�caCerts�remoteServerrAzANew livepatch directives or token. running setup_livepatch_config)�service)r.r6r7)�super�process_contract_deltasrErCr�ProgressWrapperr%rrJ�setr$�intersection�anyr:r/r;rZ#SERVICE_UPDATING_CHANGED_DIRECTIVESr'rFr>)
rr\r]r^Zdelta_entitlementZprocess_enable_defaultZenable_success�_r%Zdelta_directivesZsupported_deltasr6r7��	__class__rrre4sD�
�����z,LivepatchEntitlement.process_contract_deltas)TT)F),�__name__�
__module__�__qualname__rZurlsZLIVEPATCH_HOME_PAGEZhelp_doc_urlrFZLIVEPATCH_TITLErZLIVEPATCH_DESCRIPTIONZdescriptionZLIVEPATCH_HELP_TEXTZ	help_textZ#affordance_check_kernel_min_versionZaffordance_check_kernel_flavorZaffordance_check_seriesZaffordance_check_arch�propertyrrrrr(�intr+r-rrfr$r@r>rSrrZNamedMessager%rZr[rr=rre�
__classcell__rrrkrrsJI��A�� 
�

�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`raZconfigzca-certs={}TrDrb��/���zremote-server={})rEr
rKr
rLr'�endswith)rr`Zca_certsZ
remote_serverrrrrGms.

��
��rG)!Zlogging�typingrrrrZuaclientrrrr	r
rrr
rZuaclient.entitlements.baserrZ(uaclient.entitlements.entitlement_statusrZuaclient.typesrZLIVEPATCH_RETRIESrMZget_event_loggerr;Z	getLoggerZreplace_top_level_logger_namermr:rrGrrrr�<module>s,�Q