o
    ÙKÕiƒr  ã                   @   sn  d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZ d d	lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d d
l3m4Z4 d dl3m5Z6 d dl7m8Z8 d dl7m5Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZT d dlUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z\ G dd„ dƒZ]de)fdd„Z^d e+fd!d"„Z_d#e`d$ead%eLfd&d'„Zbd#e`d$ead(ead%eLfd)d*„Zc	drd+ee` d,e`d-edd.edd/ee` d0e`fd1d2„Zed%eLd3e`d0eafd4d5„Zfdsd6d7„Zgd%eLfd8d9„Zhd%eLd0eafd:d;„Zid<ee` d0e`fd=d>„Zjd%eLd$ead0eafd?d@„Zkd%eLd0eafdAdB„Zld%eLdCe`d0eafdDdE„ZmdCe`d%eLd$ead0eafdFdG„Zn	Hdtd,edIe`dJe`fdKdL„ZodMe`fdNdO„ZpdPe]dQe.fdRdS„ZqdPe]dQe/fdTdU„ZrdPe]dQe-fdVdW„ZsdPe]dQe"fdXdY„ZtdPe]dQe#fdZd[„ZudPe]dQe$fd\d]„ZvdPe]dQe(fd^d_„ZwdPe]dQe&fd`da„ZxdPe]dQe%fdbdc„Zyd e)d$ead%eLd0eeee f fddde„Zze>j{dfdg�dhdi„ ƒZ|eBdfej}ej~e|eFjdjeAe@d#ej€dk�e@dlej�dmdn�e@doej‚dmdn�gdp�gdq�ZƒdS )ué    N)ÚDictÚListÚ
NamedTupleÚOptionalÚSetÚTupleÚUnion)ÚaptÚ
exceptionsÚmessagesÚsystemÚutil)Úattach_with_tokenÚenable_entitlement_by_name)Ú	_initiate)ÚMagicAttachRevokeOptionsÚ_revoke)ÚMagicAttachWaitOptionsÚ_wait)Ú	FixStatusÚUnfixedPackageÚstatus_message)ÚESM_APPS_POCKETÚESM_INFRA_POCKETÚSTANDARD_UPDATES_POCKETÚFixPlanAptUpgradeStepÚFixPlanAttachStepÚFixPlanEnableStepÚFixPlanNoOpAlreadyFixedStepÚFixPlanNoOpLivepatchFixStepÚFixPlanNoOpStatusÚFixPlanNoOpStepÚFixPlanResultÚFixPlanStepÚFixPlanUSNResultÚFixPlanWarningÚ"FixPlanWarningFailUpdatingESMCacheÚ&FixPlanWarningPackageCannotBeInstalledÚ#FixPlanWarningSecurityIssueNotFixedÚNoOpAlreadyFixedDataÚNoOpLivepatchFixDataÚUSNAdditionalData)ÚCVEFixPlanOptions)Ú_plan)ÚUSNFixPlanOptions)ÚContractExpiryStatusÚ_is_attached)Úcli_util)ÚProArgumentÚProArgumentGroupÚ
ProCommand)Úaction_detach)ÚHelpCategory)ÚCLOUD_TYPE_TO_TITLEÚPRO_CLOUD_URLSÚget_cloud_type)ÚUAConfig)ÚPRINT_WRAP_WIDTH)Úentitlement_factory)ÚApplicabilityStatusÚCanEnableFailureÚUserFacingStatus)Únotices)ÚNotice)ÚPRO_HOME_PAGE)Úcolorize_commandsc                   @   sj   e Zd Zdededee defdd„Zdd„ Z		dd
ee dede	e fdd„Z
dee defdd„Zd	S )Ú
FixContextÚtitleÚdry_runÚaffected_pkgsÚcfgc                 C   sJ   d| _ g | _tƒ | _tj| _|| _|| _|| _	|| _
d| _d| _d| _d S )Nr   TF)Ú	pkg_indexÚunfixed_pkgsÚsetÚinstalled_pkgsr   ÚSYSTEM_NON_VULNERABLEÚ
fix_statusrE   rG   rF   rH   Úshould_print_pkg_headerÚ warn_package_cannot_be_installedÚfixed_by_livepatch)ÚselfrE   rF   rG   rH   © rS   ú2/usr/lib/python3/dist-packages/uaclient/cli/fix.pyÚ__init__R   s   
zFixContext.__init__c                 C   sR   | j r'tj t| j ƒ¡jt| j ƒd t| j ƒ¡d�}tt	j
|tddd�ƒ d S d S )Nú, )ÚcountÚpkgsú    F)ÚwidthÚsubsequent_indentÚreplace_whitespace)rG   r   ÚSECURITY_AFFECTED_PKGSÚ	pluralizeÚlenÚformatÚjoinÚsortedÚprintÚtextwrapÚfillr;   )rR   ÚmsgrS   rS   rT   Úprint_fix_headere   s"   ÿüüÿùzFixContext.print_fix_headerNÚsource_pkgsÚstatusÚpocketc                 C   s8   | j rtt||| jt| jƒ|rt|ƒnd d�ƒ d S d S )N)Úpkg_listri   rI   Únum_pkgsÚpocket_source)rO   rc   Ú_format_packages_messagerI   r_   rG   Úget_pocket_description)rR   rh   ri   rj   rS   rS   rT   Úprint_pkg_headerv   s   úÿÿzFixContext.print_pkg_headerrX   Úunfixed_reasonc                 C   s"   |D ]}| j  t||d�¡ qd S )N)Úpkgrq   )rJ   Úappendr   )rR   rX   rq   rr   rS   rS   rT   Úadd_unfixed_packages‰   s
   
ÿÿzFixContext.add_unfixed_packages©N)Ú__name__Ú
__module__Ú__qualname__ÚstrÚboolr   r:   rU   rg   r   rp   rt   rS   rS   rS   rT   rD   Q   s(    þýü
ûüþý
ürD   Úcvec                 C   s8   dj | j ¡ | jd�d  | j ¡ ¡g}td |¡ƒ d S )Nú{issue}: {description}©ÚissueÚdescriptionz! - https://ubuntu.com/security/{}Ú
)r`   rE   Úupperr   rc   ra   )r{   ÚlinesrS   rS   rT   Úprint_cve_header�   s   ÿürƒ   Úfix_planc                 C   s¨   | j }dj|j ¡ |jd�g}|j}t|tƒrK|jr5| 	t
j¡ |jD ]}| 	d t
jjj|d�¡¡ q#n|jrK| 	t
j¡ |jD ]	}| 	d| ¡ qAtd |¡ƒ d S )Nr|   r}   z - {})r{   z - r€   )Útarget_usn_planr`   rE   r�   r   Úadditional_dataÚ
isinstancer+   Úassociated_cvesrs   r   ÚSECURITY_FOUND_CVESÚurlsÚSECURITY_CVE_PAGEÚassociated_launchpad_bugsÚSECURITY_FOUND_LAUNCHPAD_BUGSrc   ra   )r„   Ú
target_usnr‚   r†   r{   Úlp_bugrS   rS   rT   Úprint_usn_header›   s*   ÿÿ

ÿÿÿ
r�   Úsecurity_issuerF   rH   c                 C   sz   t t| gd�|d�}|jjd j}|r$|jr$tjt 	|j
pd|j¡d�‚t|jjd ƒ tƒ  t|jjd ||ƒ\}}|S )N)Úcves©ÚoptionsrH   r   úunexpected-error©Ú	named_msg)Úcve_planr,   Ú	cves_datar’   Úerrorrf   r
   ÚAnonymousUbuntuProErrorr   ÚNamedMessageÚcoderƒ   rc   Úexecute_fix_plan)r‘   rF   rH   r„   rš   ri   Ú_rS   rS   rT   Úfix_cveµ   s   ÿ
ÿÿr    Ú
no_relatedc                 C   sÞ  t t| gd�|d�}|jjd jj}|r%|jr%tjt	 
|jpd|j¡d�‚t|jjd ƒ tdt	jj| d� ƒ t|jjd j||ƒ\}}|tjtjfvrO|S |jjd j}|rZ|r\|S tdt	jjd d	d
„ |D ƒ¡d� ƒ tdt	j ƒ i }	|D ]}
td |
j¡ƒ t|
||ƒ|	|
j< tƒ  qztt	jƒ t|| t	jd� d}|D ]=}
|	|
j \}}t||
jt	jd� |tjkrÆtdt	jjdd� ƒ d}|tjkrß|D ]}|j rÜtd |j!|j ¡ƒ qÍd}q¢|rítdt	j"j| d� ƒ |S )N)Úusnsr“   r   r•   r–   r€   )Úissue_idz
- c                 s   s   � | ]}|j V  qd S ru   )rE   )Ú.0ÚusnrS   rS   rT   Ú	<genexpr>ñ   s   € zfix_usn.<locals>.<genexpr>)Úrelated_usnsz- {})ÚcontextFú- úfix operation©Ú	operationTz
  - {}: {})#Úusn_planr.   Ú	usns_datar¢   r…   rš   rf   r
   r›   r   rœ   r�   r�   rc   ÚSECURITY_FIXING_REQUESTED_USNr`   rž   r   rM   ÚSYSTEM_NOT_AFFECTEDÚrelated_usns_planÚSECURITY_RELATED_USNSra   ÚSECURITY_FIXING_RELATED_USNSrE   ÚSECURITY_USN_SUMMARYÚ_handle_fix_status_messageÚFIX_ISSUE_CONTEXT_REQUESTEDÚFIX_ISSUE_CONTEXT_RELATEDÚSYSTEM_VULNERABLE_UNTIL_REBOOTÚENABLE_REBOOT_REQUIRED_TMPLÚSYSTEM_STILL_VULNERABLErq   rr   ÚSECURITY_RELATED_USN_ERROR)r‘   rF   r¡   rH   r„   rš   Útarget_usn_statusrŸ   r±   Úrelated_usn_statusÚrelated_usn_planÚfailure_on_related_usnri   rJ   Úunfixed_pkgrS   rS   rT   Úfix_usnÈ   s¸   ÿ
ÿÿÿÿÿýþÿÿÿÿ
ý
ýý
ÿÿÿ
ÿÿ€€ÿÿÿrÁ   rk   ri   rI   rl   rm   Úreturnc           	      C   s€   | sdS g }g }| D ]}|d7 }|  d ||¡¡ |  |¡ q
tjd dd |¡ d d t|ƒ¡¡tdd	�}d
 |t||ƒ¡S )z;Format the packages and status to an user friendly message.Ú é   z{}/{}z{} {}:ú(rV   ú)rY   ©rZ   r[   z{}
{})rs   r`   rd   re   ra   rb   r;   r   )	rk   ri   rI   rl   rm   Ú	msg_indexÚsrc_pkgsÚsrc_pkgÚ
msg_headerrS   rS   rT   rn   /  s    ÿûrn   Útokenc              
   C   s\   t tdd|ggƒƒ z
t| |dd� W dS  tjy- } zt |jƒ W Y d}~dS d}~ww )ztAttach to an Ubuntu Pro subscription with a given token.

    :return: True if attach performed without errors.
    ÚproÚattachT)rÌ   Úallow_enableNF)rc   rC   r   r
   ÚUbuntuProErrorrf   )rH   rÌ   ÚerrrS   rS   rT   Ú_run_ua_attachK  s   
€þrÒ   c                  C   s>   t ƒ \} }| t ¡ v rttjjt | ¡t | ¡d�ƒ dS dS )z:Alert the user when running Pro on cloud with PRO support.)rE   Úcloud_specific_urlN)	r9   r8   Úkeysrc   r   ÚSECURITY_USE_PRO_TMPLr`   r7   Úget)Ú
cloud_typerŸ   rS   rS   rT   Ú*_inform_ubuntu_pro_existence_if_applicableY  s   
þÿÿrØ   c              
   C   s¤   t tjƒ t| d�}t dtjj|jd� ƒ t|jd�}zt	|| d�}W n  t
jyD } zt tjƒ t|jd�}t|| d� |‚d }~ww t dtj ƒ t| |jƒS )N)rH   r€   )Ú	user_code)Úmagic_tokenr“   )rc   r   ÚCLI_MAGIC_ATTACH_INITr   ÚCLI_MAGIC_ATTACH_SIGN_INr`   rÙ   r   rÌ   r   r
   ÚMagicAttachTokenErrorÚCLI_MAGIC_ATTACH_FAILEDr   r   ÚCLI_MAGIC_ATTACH_PROCESSINGrÒ   Úcontract_token)rH   Úinitiate_respÚwait_optionsÚ	wait_respÚeÚrevoke_optionsrS   rS   rT   Ú_perform_magic_attache  s.   

ÿÿÿ
ÿ€ù	ræ   c                 C   sh   t ƒ  ttjƒ tjtjg d¢d�}|dkrdS |dkr t| ƒS |dkr2ttjƒ t	dƒ}t
| |ƒS dS )	zZPrompt for attach to a subscription or token.

    :return: True if attach performed.
    )ÚsÚaÚc©Úvalid_choicesré   Frç   rè   ú> T)rØ   rc   r   Ú*SECURITY_UPDATE_NOT_INSTALLED_SUBSCRIPTIONr   Úprompt_choicesÚSECURITY_FIX_ATTACH_PROMPTræ   ÚPROMPT_ENTER_TOKENÚinputrÒ   )rH   ÚchoicerÌ   rS   rS   rT   Ú_prompt_for_attach€  s   
þ

ró   rJ   c                 C   s4   t | ƒ}tjtj |¡j|d t| ƒ¡d�t	dd�S )z—Format the list of unfixed packages into an message.

    :returns: A string containing the message output for the unfixed
              packages.
    rV   )rl   rX   rY   rÇ   )
r_   rd   re   r   ÚSECURITY_PKG_STILL_AFFECTEDr^   r`   ra   rb   r;   )rJ   Únum_pkgs_unfixedrS   rS   rT   Ú_format_unfixed_packages_msg—  s   ÿüørö   c                 C   s4   t | ƒj}|r|tjjkr|rttjƒ dS dS dS )zuCheck if the Ubuntu Pro subscription is expired.

    :returns: True if subscription is expired and not renewed.
    FT)r0   Úcontract_statusr/   ÚEXPIREDÚvaluerc   r   Ú(SECURITY_DRY_RUN_UA_EXPIRED_SUBSCRIPTION)rH   rF   Úcontract_expiry_statusrS   rS   rT   Ú_check_subscription_is_expiredª  s   
ÿ
rü   c                 C   s‚   ddl }tƒ  ttjƒ tjtjjt	d�ddgd�}|dkr?ttj
ƒ tdƒ}ttdd	ggƒƒ t|jd
dd�| ƒ t| |ƒS dS )zdPrompt for attach a new subscription token to the user.

    :return: True if attach performed.
    r   N)ÚurlÚrré   rê   rì   rÍ   ÚdetachTÚcli)Ú
assume_yesr`   F)ÚargparserØ   rc   r   Ú%SECURITY_UPDATE_NOT_INSTALLED_EXPIREDr   rî   ÚSECURITY_FIX_RENEW_PROMPTr`   rB   ÚPROMPT_EXPIRED_ENTER_TOKENrñ   rC   r5   Ú	NamespacerÒ   )rH   r  rò   rÌ   rS   rS   rT   Ú_prompt_for_new_token¼  s   
þ

r  Úservicec                 C   sŽ   t tjj|d�ƒ tjtjj|d�ddgd�}|dkrEt tdd|ggƒƒ t| |d�\}}|sC|durCt	|t
ƒrC|jdurCt |jjƒ |S d	S )
zMPrompt for enable a pro service.

    :return: True if enable performed.
    ©r  rä   ré   rê   rÍ   Úenable©rH   ÚnameNF)rc   r   ÚSECURITY_SERVICE_DISABLEDr`   r   rî   ÚSECURITY_FIX_ENABLE_PROMPTrC   r   r‡   r>   Úmessagerf   )rH   r  rò   ÚretÚreasonrS   rS   rT   Ú_prompt_for_enableÓ  s"   þÿÿ
r  c                 C   s    t || d�}|rN| ¡ \}}|tjkrdS | ¡ \}}|tjkrD|r0tdtj	j
|jd� ƒ dS t||jƒr8dS ttjj
|jd�ƒ dS ttjj
|jd�ƒ dS )zQ
    Verify if the Ubuntu Pro subscription has the required service enabled.
    r  Tr€   r	  F)r<   Úuser_facing_statusr?   ÚACTIVEÚapplicability_statusr=   Ú
APPLICABLErc   r   Ú'SECURITY_DRY_RUN_UA_SERVICE_NOT_ENABLEDr`   r  r  ÚSECURITY_UA_SERVICE_NOT_ENABLEDÚ SECURITY_UA_SERVICE_NOT_ENTITLED)r  rH   rF   ÚentÚ
ent_statusrŸ   r  rS   rS   rT   Ú)_handle_subscription_for_required_serviceï  s<   

ÿÿÿÿÿúÿÿr  rÃ   r£   r¨   c                 C   sö   | t jkr |rtjj||d�}ntjj|d�}tt |¡ƒ d S | t j	kr@|r0tj
j||d�}ntjj|d�}tt |¡ƒ d S | t jkr`|rPtjj||d�}ntjj|d�}tt |¡ƒ d S |rktjj||d�}ntjj|d�}tt |¡ƒ d S )N)r~   r¨   )r~   )r   rM   r   Ú%SECURITY_ISSUE_RESOLVED_ISSUE_CONTEXTr`   ÚSECURITY_ISSUE_RESOLVEDrc   r   Úhandle_unicode_charactersr°   Ú'SECURITY_ISSUE_UNAFFECTED_ISSUE_CONTEXTÚSECURITY_ISSUE_UNAFFECTEDr¸   Ú)SECURITY_ISSUE_NOT_RESOLVED_ISSUE_CONTEXTÚSECURITY_ISSUE_NOT_RESOLVED)ri   r£   r¨   rf   rS   rS   rT   rµ     s6   
ÿ
ÿ
ÿÿrµ   rj   c                 C   s.   | t krtjS | tkrtjS | tkrtjS | S ru   )r   r   Ú'SECURITY_UBUNTU_STANDARD_UPDATES_POCKETr   ÚSECURITY_UA_INFRA_POCKETr   ÚSECURITY_UA_APPS_POCKET)rj   rS   rS   rT   ro   ?  s   ro   Úfix_contextÚstepc                 C   sh   | j |jjd|jjd� d| _tjj|jj|jj	d�}t
d| ƒ | j|jjg|d� d| _tj| _d S )NÚreleased©rh   ri   rj   F)ÚpackageÚversionr©   ©rX   rq   T)rp   ÚdataÚrelated_source_packagesrj   rO   r   ÚFIX_CANNOT_INSTALL_PACKAGEr`   Úbinary_packageÚbinary_package_versionrc   rt   Úsource_packagerP   r   rº   rN   )r'  r(  Úwarn_msgrS   rS   rT   Ú)_execute_package_cannot_be_installed_stepJ  s    ýþ
ÿr5  c                 C   sR   | j |jj|jjd� |  jt|jjƒ7  _| j|jjt|jjƒd� tj	| _
d S )N)rh   ri   r-  )rp   r.  Úsource_packagesri   rI   r_   rt   r   r   rº   rN   ©r'  r(  rS   rS   rT   Ú&_execute_security_issue_not_fixed_stepc  s   þ
þr8  c                 C   s,   t  ¡ rttjƒ d S tdtj d ƒ d S )Nr€   )r   Úwe_are_currently_rootrc   r   ÚCLI_FIX_FAIL_UPDATING_ESM_CACHEÚ(CLI_FIX_FAIL_UPDATING_ESM_CACHE_NON_ROOTr7  rS   rS   rT   Ú%_execute_fail_updating_esm_cache_steps  s   r<  c              
   C   sh  | j |jjd|jjd� |  jt|jjƒ7  _|jjs)| js#tt	j
ƒ tj| _d S t ¡ sE| jsEtt	jƒ tj| _| j|jjt	jd� d S ttg d¢g d¢ t|jjƒ gƒƒ | jratj| _d S zt ¡  tjg d¢|jj ddid	� W n, ty¢ } z t|d
t|ƒƒ}t|ƒ tj| _| j|jj|d� W Y d }~d S d }~ww tj| _d| _| j |jj¡ d S )Nr)  r*  r-  )r	   Úupdatez&&)r	   Úinstallú--only-upgradeú-y)zapt-getr>  r?  r@  ÚDEBIAN_FRONTENDÚnoninteractive)ÚcmdÚoverride_env_varsrf   T)rp   r.  r6  rj   rI   r_   Úbinary_packagesrP   rc   r   ÚSECURITY_UPDATE_INSTALLEDr   rM   rN   r   r9  rF   ÚSECURITY_APT_NON_ROOTrº   rt   rC   rb   r	   Úrun_apt_update_commandÚrun_apt_commandÚ	ExceptionÚgetattrry   rO   rL   r=  )r'  r(  rä   rf   rS   rS   rT   Ú_execute_apt_upgrade_step|  sl   ý

þÿ
þÿÿÿ
ÿ
ýþ€ø
rL  c                 C   sì   |j jdkrtnt}| j|j jd|d� d| _t| jƒj	sD| j
r(tdtj ƒ nHt| jƒsCtj| _| j|j jtjj|j jd�d� d S n,t| j| j
d�rp| j
rUttjƒ nt| jƒsptj| _| j|j jtjj|j jd�d� d S tj| _d S )	Nú	esm-infrar)  r*  Fr€   r	  r-  )rH   rF   )r.  Úrequired_servicer   r   rp   r6  rO   r0   rH   Úis_attachedrF   rc   r   Ú SECURITY_DRY_RUN_UA_NOT_ATTACHEDró   r   rº   rN   rt   ÚSECURITY_UA_SERVICE_REQUIREDr`   rü   rú   r  Ú$SECURITY_UA_SERVICE_WITH_EXPIRED_SUBrM   ©r'  r(  rj   rS   rS   rT   Ú_execute_attach_stepº  sL   ÿýý
ÿþø	ÿ
ÿþrT  c                 C   st   |j jdkrtnt}| j|j jd|d� d| _t|j j| j| j	ƒs7| j
|j jtjj|j jd�d� tj| _d S tjS )NrM  r)  r*  Fr	  r-  )r.  r  r   r   rp   r6  rO   r  rH   rF   rt   r   Ú%SECURITY_UA_SERVICE_NOT_ENABLED_SHORTr`   r   rº   rN   rM   rS  rS   rS   rT   Ú_execute_enable_stepé  s0   ÿýýýÿþrV  c                 C   s*   |j jtjjkrttjƒ tj	| _
d S d S ru   )r.  ri   r    ÚNOT_AFFECTEDrù   rc   r   ÚSECURITY_NO_AFFECTED_PKGSr   r°   rN   r7  rS   rS   rT   Ú_execute_noop_not_affected_step
  s   
þrY  c                 C   s4   t |jtƒrttjj| j|jjd�ƒ d| _	d S d S )N)r~   r,  T)
r‡   r.  r*   rc   r   ÚCVE_FIXED_BY_LIVEPATCHr`   rE   Úpatch_versionrQ   r7  rS   rS   rT   Ú%_execute_noop_fixed_by_livepatch_step  s   þÿ
ùr\  c                 C   sL   t |jtƒr$| j|jjd|jjd� ttjƒ |  j	t
|jjƒ7  _	d S d S )Nr)  r*  )r‡   r.  r)   rp   r6  rj   rc   r   rF  rI   r_   r7  rS   rS   rT   Ú _execute_noop_already_fixed_step  s   ý
ùr]  c                 C   sÆ  g | j ¢| j¢}t| j|| jpg |d�}| ¡  t|dd„ d�D ]t}t|tƒr,t	||ƒ t|t
ƒr6t||ƒ t|tƒr@t||ƒ t|tƒrRt||ƒ |jtjkrR nCt|tƒrdt||ƒ |jtjkrd n1t|tƒrvt||ƒ |jtjkrv nt|tƒr€t||ƒ t|tƒrŠt||ƒ t|tƒr”t||ƒ q tƒ  |jr¯ttt t!dd„ |jD ƒƒƒƒƒ tj"|_|jtjkrÓt#j$|j%d�rÓtj&|_t'j(j)dd	�}t|ƒ t*j+t,j-dd	� |j.sÝt/|j| jƒ |j|jfS )
N)rE   rF   rG   rH   c                 S   s   | j S ru   )Úorder)ÚxrS   rS   rT   Ú<lambda><  s    z"execute_fix_plan.<locals>.<lambda>)Úkeyc                 S   s   g | ]}|j ‘qS rS   )rr   )r¤   rÀ   rS   rS   rT   Ú
<listcomp>`  s    ÿÿz$execute_fix_plan.<locals>.<listcomp>)rL   rª   r«   )0ÚplanÚwarningsrD   rE   Úaffected_packagesrg   rb   r‡   r'   r5  r(   r8  r&   r<  r   rL  rN   r   rM   r   rT  r   rV  r!   rY  r   r\  r   r]  rc   rJ   rö   ÚlistrK   rº   r   Úshould_rebootrL   r¸   r   r¹   r`   r@   ÚaddrA   ÚENABLE_REBOOT_REQUIREDrQ   rµ   )r„   rF   rH   Ú	full_planr'  r(  Ú
reboot_msgrS   rS   rT   rž   ,  s†   ÿþü

















€þÿÿÿÿÿÿþrž   Úfix)rC  c                K   sN   | j rttjƒ d| j ¡ v rt| j| j |ƒ}|j	S t| j| j | j|ƒ}|j	S )Nr{   )
rF   rc   r   ÚSECURITY_DRY_RUN_WARNINGr‘   Úlowerr    rÁ   r¡   Ú	exit_code)ÚargsrH   Úkwargsri   rS   rS   rT   Ú
action_fix~  s   
üÿrr  T)Úhelpz	--dry-runÚ
store_true)rs  Úactionz--no-related)Ú	arguments)rs  r   ru  Úhelp_categoryÚpreserve_descriptionÚargument_groupsru   )rÂ   N)rÃ   )„rd   Útypingr   r   r   r   r   r   r   Úuaclientr	   r
   r   r   r   Úuaclient.actionsr   r   Ú+uaclient.api.u.pro.attach.magic.initiate.v1r   Ú)uaclient.api.u.pro.attach.magic.revoke.v1r   r   Ú'uaclient.api.u.pro.attach.magic.wait.v1r   r   Ú'uaclient.api.u.pro.security.fix._commonr   r   r   Ú/uaclient.api.u.pro.security.fix._common.plan.v1r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Ú+uaclient.api.u.pro.security.fix.cve.plan.v1r,   r-   r˜   Ú+uaclient.api.u.pro.security.fix.usn.plan.v1r.   r­   Ú(uaclient.api.u.pro.status.is_attached.v1r/   r0   Úuaclient.clir1   Úuaclient.cli.commandsr2   r3   r4   Úuaclient.cli.detachr5   Úuaclient.cli.parserr6   Úuaclient.clouds.identityr7   r8   r9   Úuaclient.configr:   Úuaclient.defaultsr;   Úuaclient.entitlementsr<   Ú(uaclient.entitlements.entitlement_statusr=   r>   r?   Úuaclient.filesr@   Úuaclient.files.noticesrA   Úuaclient.messages.urlsrB   Úuaclient.statusrC   rD   rƒ   r�   ry   rz   r    rÁ   Úintrn   rÒ   rØ   ræ   ró   rö   rü   r  r  r  rµ   ro   r5  r8  r<  rL  rT  rV  rY  r\  r]  rž   Ú assert_vulnerability_issue_validrr  ÚCLI_ROOT_FIXÚCLI_FIX_DESCÚSECURITYÚCLI_FIX_ISSUEÚCLI_FIX_DRY_RUNÚCLI_FIX_NO_RELATEDÚfix_commandrS   rS   rS   rT   Ú<module>   s>   $
X?ÿÿÿ
ÿlûÿþýüû
ú
ÿÿÿ
þ,ÿÿÿ
ÿ%ÿ
þÿ
ÿÿ
ÿ	ÿ
þ>ÿ
þ/ÿ
þ!ÿ
ÿÿ
ÿÿ
ÿÿÿÿ
þ
R
ýýùÿÿ
ù