
    gr                        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      Z]de)fdZ^de+fd Z_d!e`d"ead#eLfd$Zbd!e`d"ead%ead#eLfd&Zc	 dVd'ee`   d(e`d)edd*edd+ee`   d,e`fd-Zed#eLd.e`d,eafd/ZfdWd0Zgd#eLfd1Zhd#eLd,eafd2Zid3ee`   d,e`fd4Zjd#eLd"ead,eafd5Zkd#eLd,eafd6Zld#eLd7e`d,eafd8Zmd7e`d#eLd"ead,eafd9Zn	 dXd(ed:e`d;e`fd<Zod=e`fd>Zpd?e]d@e.fdAZqd?e]d@e/fdBZrd?e]d@e-fdCZsd?e]d@e"fdDZtd?e]d@e#fdEZud?e]d@e$fdFZvd?e]d@e(fdGZwd?e]d@e&fdHZxd?e]d@e%fdIZyde)d"ead#eLd,eeee   f   fdJZz e>j                  dKL      dM        Z| eBdKej                  ej                  e|eFj                  dN eA e@d!ej                   O       e@dPej                  dQR       e@dSej                  dQR      gT      gU      Zy)Y    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                   j    e Zd Zdededee   defdZd Z	 ddee   d	ed
e	e   fdZ
dee   defdZy)
FixContexttitledry_runaffected_pkgscfgc                     d| _         g | _        t               | _        t        j
                  | _        || _        || _        || _	        || _
        d| _        d| _        d| _        y )Nr   TF)	pkg_indexunfixed_pkgssetinstalled_pkgsr   SYSTEM_NON_VULNERABLE
fix_statusrG   rI   rH   rJ   should_print_pkg_header warn_package_cannot_be_installedfixed_by_livepatch)selfrG   rH   rI   rJ   s        2/usr/lib/python3/dist-packages/uaclient/cli/fix.py__init__zFixContext.__init__R   s_     !e#99
*'+$05-"'    c                 Z   | j                   rt        j                  j                  t	        | j                               j                  t	        | j                         dj                  t        | j                                     }t        t        j                  |t        dd             y y )N, )countpkgs    F)widthsubsequent_indentreplace_whitespace)rI   r   SECURITY_AFFECTED_PKGS	pluralizelenformatjoinsortedprinttextwrapfillr<   )rU   msgs     rV   print_fix_headerzFixContext.print_fix_headere   s    11;;D&&'f$,,-YYvd&8&89:    *&,',	 rX   Nsource_pkgsstatuspocketc                     | j                   rDt        t        ||| j                  t	        | j
                        |rt        |      nd              y y )N)pkg_listrm   rL   num_pkgspocket_source)rR   rg   _format_packages_messagerL   rc   rI   get_pocket_description)rU   rl   rm   rn   s       rV   print_pkg_headerzFixContext.print_pkg_headerv   sJ     ''((!"nn !3!34:@.v6d
 (rX   r\   unfixed_reasonc                 ^    |D ](  }| j                   j                  t        ||             * y )N)pkgrv   )rM   appendr   )rU   r\   rv   rx   s       rV   add_unfixed_packageszFixContext.add_unfixed_packages   s/     	C$$3~F	rX   N)__name__
__module____qualname__strboolr   r;   rW   rk   r   ru   rz    rX   rV   rF   rF   Q   s{    (( ( Cy	(
 (&* !%	#Y  	&c C rX   rF   cvec                     dj                  | j                  j                         | j                        dj                  | j                  j                               g}t	        dj                  |             y )N{issue}: {description}issuedescriptionz! - https://ubuntu.com/security/{}
)rd   rG   upperr   rg   re   )r   liness     rV   print_cve_headerr      s^     ''))//# 	( 	
 	,22399??3DE	E 
$))E
rX   fix_planc                    | j                   }dj                  |j                  j                         |j                        g}|j
                  }t        |t              r|j                  ry|j                  t        j                         |j                  D ]J  }|j                  dj                  t        j                  j                  j                  |                   L nP|j                  rD|j                  t        j                         |j                  D ]  }|j                  d|z           t!        dj#                  |             y )Nr   r   z - {})r   z - r   )target_usn_planrd   rG   r   r   additional_data
isinstancer,   associated_cvesry   r   SECURITY_FOUND_CVESurlsSECURITY_CVE_PAGEassociated_launchpad_bugsSECURITY_FOUND_LAUNCHPAD_BUGSrg   re   )r   
target_usnr   r   r   lp_bugs         rV   print_usn_headerr      s   ))J ''""((*
8N8N 	( 	
E !00O/#45**LL556&66 NN 77>>3>G 66LL??@)CC -UV^,- 
$))E
rX   security_issuerH   rJ   c                    t        t        | g      |      }|j                  j                  d   j                  }|rN|j
                  rBt        j                  t        j                  |j                  xs d|j
                              t        |j                  j                  d          t                t        |j                  j                  d   ||      \  }}|S )N)cvesoptionsrJ   r   unexpected-error	named_msg)cve_planr-   	cves_datar   errorrj   r   AnonymousUbuntuProErrorr   NamedMessagecoder   rg   execute_fix_plan)r   rH   rJ   r   r   rm   _s          rV   fix_cver      s    !'78cH ##A&,,E00++

00%))
 	

 X'',,Q/0	G !3!3!8!8!;WcJIFAMrX   
no_relatedc           	         t        t        | g      |      }|j                  j                  d   j                  j
                  }|rN|j                  rBt        j                  t        j                  |j                  xs d|j                              t        |j                  j                  d          t        dt        j                  j                  |       z          t!        |j                  j                  d   j                  ||      \  }}|t"        j$                  t"        j&                  fvr|S |j                  j                  d   j(                  }|r|r|S t        dt        j*                  j                  dj-                  d	 |D              
      z          t        dt        j.                  z          i }	|D ]J  }
t        dj                  |
j0                               t!        |
||      |	|
j0                  <   t                L t        t        j2                         t5        || t        j6                         d}|D ]  }
|	|
j0                     \  }}t5        ||
j0                  t        j8                         |t"        j:                  k(  r.t        dt        j<                  j                  d      z          d}|t"        j>                  k(  s|D ]>  }|j@                  st        dj                  |jB                  |j@                               @ d} |r,t        dt        jD                  j                  |       z          |S )N)usnsr   r   r   r   r   )issue_idz
- c              3   4   K   | ]  }|j                     y wr{   )rG   ).0usns     rV   	<genexpr>zfix_usn.<locals>.<genexpr>   s     $L3SYY$Ls   )related_usnsz- {})contextF- fix operation	operationTz
  - {}: {})#usn_planr/   	usns_datar   r   r   rj   r   r   r   r   r   r   rg   SECURITY_FIXING_REQUESTED_USNrd   r   r   rP   SYSTEM_NOT_AFFECTEDrelated_usns_planSECURITY_RELATED_USNSre   SECURITY_FIXING_RELATED_USNSrG   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_VULNERABLErv   rx   SECURITY_RELATED_USN_ERROR)r   rH   r   rJ   r   r   target_usn_statusr   r   related_usn_statusrelated_usn_planfailure_on_related_usnrm   rM   unfixed_pkgs                  rV   fix_usnr      s2    !'78cH ##A&66<<E00++

00%))
 	

 X'',,Q/0	

0
0
7
7# 8 
	
 ,"22q ''%%!  !  **//2DD
  	

(
(
/
/$L:K$LL 0 
	
 
$66
67
  . fmm,22345E6
+112
 	 
(
'
'(44 #- *12B2H2HI"""66	
 Y===66==- >  &*"Y666+ --$++'OO[-G-G &*"1*4 1188' 9 	
 rX   rp   rm   rL   rq   rr   returnc           
      v   | syg }g }| D ]9  }|dz  }|j                  dj                  ||             |j                  |       ; t        j                  dj                  ddj	                  |      z   dz   dj	                  t        |                  t        d	      }d
j                  |t        ||            S )z;Format the packages and status to an user friendly message.    z{}/{}z{} {}:(rZ   )r]   r^   r_   z{}
{})ry   rd   rh   ri   re   rf   r<   r   )	rp   rm   rL   rq   rr   	msg_indexsrc_pkgssrc_pkg
msg_headers	            rV   rs   rs   /  s     IH !Q		8<= !
 $))I&&,diix8H.I	
  J ??:~fm'LMMrX   tokenc                     t        t        dd|gg             	 t        | |d       y# t        j                  $ r}t        |j
                         Y d}~yd}~ww xY w)ztAttach to an Ubuntu Pro subscription with a given token.

    :return: True if attach performed without errors.
    proattachT)r   allow_enableNF)rg   rD   r   r   UbuntuProErrorrj   )rJ   r   errs      rV   _run_ua_attachr   K  sT    
 

eXu56
78#U>$$ cggs   ) AAAc                      t               \  } }| t        j                         v rQt        t        j
                  j                  t        j                  |       t        j                  |                    yy)z:Alert the user when running Pro on cloud with PRO support.)rG   cloud_specific_urlN)	r:   r9   keysrg   r   SECURITY_USE_PRO_TMPLrd   r8   get)
cloud_typer   s     rV   *_inform_ubuntu_pro_existence_if_applicabler   Y  sa    "$MJ^((****11)--j9#1#5#5j#A 2 	
 +rX   c                    t        t        j                         t        |       }t        dt        j                  j                  |j                        z          t        |j                        }	 t        ||       }t        dt        j                  z          t!        | |j"                        S # t        j                  $ rC}t        t        j                         t        |j                        }t        ||        |d }~ww xY w)N)rJ   r   )	user_code)magic_tokenr   )rg   r   CLI_MAGIC_ATTACH_INITr   CLI_MAGIC_ATTACH_SIGN_INrd   r   r   r   r   r   MagicAttachTokenErrorCLI_MAGIC_ATTACH_FAILEDr   r   CLI_MAGIC_ATTACH_PROCESSINGr   contract_token)rJ   initiate_respwait_options	wait_resperevoke_optionss         rV   _perform_magic_attachr   e  s    	(
(
()#&M	

+
+
2
2#-- 3 
	
 *m6I6IJL	,C8	 
$55
56#y7788 ++ h../1%++
 	C0s   3B2 2D>DDc                 .   t                t        t        j                         t	        j
                  t        j                  g d      }|dk(  ry|dk(  rt        |       S |dk(  r0t        t        j                         t        d      }t        | |      S y)	zZPrompt for attach to a subscription or token.

    :return: True if attach performed.
    )sacvalid_choicesr   Fr   r   > T)r   rg   r   *SECURITY_UPDATE_NOT_INSTALLED_SUBSCRIPTIONr   prompt_choicesSECURITY_FIX_ATTACH_PROMPTr   PROMPT_ENTER_TOKENinputr   )rJ   choicer   s      rV   _prompt_for_attachr    s    
 /0	(
=
=>  ++%F }}$S))}h))*dc5))rX   rM   c           
          t        |       }t        j                  t        j                  j                  |      j                  |dj                  t        |                   t        d      S )zFormat the list of unfixed packages into an message.

    :returns: A string containing the message output for the unfixed
              packages.
    rZ   )rq   r\   r]   r   )
rc   rh   ri   r   SECURITY_PKG_STILL_AFFECTEDrb   rd   re   rf   r<   )rM   num_pkgs_unfixeds     rV   _format_unfixed_packages_msgr    sb     <(==,,66	

&%6,/0  
  	 	rX   c                     t        |       j                  }|r:|t        j                  j                  k(  r|rt        t        j                         yyy)zuCheck if the Ubuntu Pro subscription is expired.

    :returns: True if subscription is expired and not renewed.
    FT)r1   contract_statusr0   EXPIREDvaluerg   r   (SECURITY_DRY_RUN_UA_EXPIRED_SUBSCRIPTION)rJ   rH   contract_expiry_statuss      rV   _check_subscription_is_expiredr    sG    
 *#.>>"&:&B&B&H&HH(CCDrX   c                    ddl }t                t        t        j                         t        j                  t        j                  j                  t              ddg      }|dk(  rdt        t        j                         t        d      }t        t        dd	gg             t        |j                  d
d      |        t        | |      S y)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_yesrd   F)argparser   rg   r   %SECURITY_UPDATE_NOT_INSTALLED_EXPIREDr   r   SECURITY_FIX_RENEW_PROMPTrd   rC   PROMPT_EXPIRED_ENTER_TOKENr  rD   r6   	Namespacer   )rJ   r  r  r   s       rV   _prompt_for_new_tokenr    s    
 .0	(
8
89  **11m1DCjF }h112d%!2 345h((D(GMc5))rX   servicec                    t        t        j                  j                  |             t	        j
                  t        j                  j                  |      ddg      }|dk(  rit        t        dd|gg             t        | |      \  }}|s=|;t        |t              r+|j                  t        |j                  j                         |S y)	zMPrompt for enable a pro service.

    :return: True if enable performed.
    r  r   r   r   r   enablerJ   nameF)rg   r   SECURITY_SERVICE_DISABLEDrd   r   r   SECURITY_FIX_ENABLE_PROMPTrD   r   r   r?   messagerj   )rJ   r  r  retreasons        rV   _prompt_for_enabler'    s    
 
(
,
,
3
3G
3
DE  ++2272CCjF
 }%7!; <=>0SwGV "6#34~~)fnn(()
rX   c                 ,   t        ||       }|r|j                         \  }}|t        j                  k(  ry|j	                         \  }}|t
        j                  k(  r|r7t        dt        j                  j                  |j                        z          yt        ||j                        ryt        t        j                  j                  |j                               yt        t        j                  j                  |j                               y)zQ
    Verify if the Ubuntu Pro subscription has the required service enabled.
    r   Tr   r  F)r=   user_facing_statusr@   ACTIVEapplicability_statusr>   
APPLICABLErg   r   'SECURITY_DRY_RUN_UA_SERVICE_NOT_ENABLEDrd   r!  r'  SECURITY_UA_SERVICE_NOT_ENABLED SECURITY_UA_SERVICE_NOT_ENTITLED)r  rJ   rH   ent
ent_statusr   r+  s          rV   )_handle_subscription_for_required_servicer2    s    #G
4C
..0
A)000"%":":"<a#6#A#AAFFMM # N  !#sxx0<<CC # D   99@@HH A  rX   r   r   c                    | t         j                  k(  rc|r"t        j                  j	                  ||      }n t        j
                  j	                  |      }t        t        j                  |             y | t         j                  k(  rc|r"t        j                  j	                  ||      }n t        j                  j	                  |      }t        t        j                  |             y | t         j                  k(  rc|r"t        j                  j	                  ||      }n t        j                  j	                  |      }t        t        j                  |             y |r"t        j                  j	                  ||      }n t        j                  j	                  |      }t        t        j                  |             y )N)r   r   )r   )r   rP   r   %SECURITY_ISSUE_RESOLVED_ISSUE_CONTEXTrd   SECURITY_ISSUE_RESOLVEDrg   r   handle_unicode_charactersr   'SECURITY_ISSUE_UNAFFECTED_ISSUE_CONTEXTSECURITY_ISSUE_UNAFFECTEDr   )SECURITY_ISSUE_NOT_RESOLVED_ISSUE_CONTEXTSECURITY_ISSUE_NOT_RESOLVED)rm   r   r   rj   s       rV   r   r     sv    000@@GG H C 22999ICd,,S12	900	0BBII J C 44;;(;KCd,,S12	9;;	;DDKK L C 66==H=MCd,,S12DDKK L C 66==H=MCd,,S12rX   rn   c                     | t         k(  rt        j                  S | t        k(  rt        j                  S | t
        k(  rt        j                  S | S r{   )r   r   'SECURITY_UBUNTU_STANDARD_UPDATES_POCKETr   SECURITY_UA_INFRA_POCKETr   SECURITY_UA_APPS_POCKET)rn   s    rV   rt   rt   ?  sE    ((???	#	#000	?	"///rX   fix_contextstepc                    | j                  |j                  j                  d|j                  j                         d| _        t
        j                  j                  |j                  j                  |j                  j                        }t        d|z          | j                  |j                  j                  g|       d| _        t        j                  | _        y )Nreleasedrl   rm   rn   F)packageversionr   r\   rv   T)ru   datarelated_source_packagesrn   rR   r   FIX_CANNOT_INSTALL_PACKAGErd   binary_packagebinary_package_versionrg   rz   source_packagerS   r   r   rQ   )r?  r@  warn_msgs      rV   )_execute_package_cannot_be_installed_steprN  J  s       II55yy ! 
 +0K'2299		((		00 : H 
$/$$ii&&' %  48K0&>>KrX   c                    | j                  |j                  j                  |j                  j                         | xj                  t        |j                  j                        z  c_        | j                  |j                  j                  t        |j                  j                               t        j                  | _
        y )N)rl   rm   rF  )ru   rG  source_packagesrm   rL   rc   rz   r   r   r   rQ   r?  r@  s     rV   &_execute_security_issue_not_fixed_steprR  c  s       II--yy !  S!:!:;;$$YY&&%dii&6&67 %  '>>KrX   c                     t        j                         rt        t        j                         y t        dt        j
                  z   dz          y )Nr   )r   we_are_currently_rootrg   r   CLI_FIX_FAIL_UPDATING_ESM_CACHE(CLI_FIX_FAIL_UPDATING_ESM_CACHE_NON_ROOTrQ  s     rV   %_execute_fail_updating_esm_cache_steprW  s  s6     !!#h667dXFFFMNrX   c                 P   | j                  |j                  j                  d|j                  j                         | xj                  t        |j                  j                        z  c_        |j                  j                  s;| j                  st        t        j                         t        j                  | _        y t        j                         sp| j                   sdt        t        j"                         t        j$                  | _        | j'                  |j                  j                  t        j"                         y t        t)        g dg dz   t+        |j                  j                        z   g             | j                   rt        j                  | _        y 	 t-        j.                          t-        j0                  g d|j                  j                  z   ddi	       t        j                  | _        d| _        | j:                  j=                  |j                  j                         y # t2        $ rg}t5        |d
t7        |            }t        |       t        j$                  | _        | j'                  |j                  j                  |       Y d }~y d }~ww xY w)NrB  rC  rF  )r
   updatez&&)r
   install--only-upgrade-y)zapt-getrZ  r[  r\  DEBIAN_FRONTENDnoninteractive)cmdoverride_env_varsrj   T)ru   rG  rP  rn   rL   rc   binary_packagesrS   rg   r   SECURITY_UPDATE_INSTALLEDr   rP   rQ   r   rT  rH   SECURITY_APT_NON_ROOTr   rz   rD   rf   r
   run_apt_update_commandrun_apt_command	Exceptiongetattrr   rR   rO   rY  )r?  r@  r   rj   s       rV   _execute_apt_upgrade_steprh  |  s      II--yy ! 
 S!:!:;;99$$;;(445!*!@!@%%'0C0Ch,,-!*!B!B((**#99 	) 	
 		'<=2234	
 !*!@!@""$>ii''(02BC	
 '<<K*.K'%%dii&?&?@  aA'c
!*!B!B((** 	) 	
 	s   #AH5 5	J%>AJ  J%c                    |j                   j                  dk(  rt        nt        }| j	                  |j                   j
                  d|       d| _        t        | j                        j                  s| j                  rt        dt        j                  z          nPt        | j                        s:t        j                   | _        | j%                  |j                   j
                  t        j&                  j)                  |j                   j                               y t+        | j                  | j                        r| j                  rt        t        j,                         nt/        | j                        sot        j                   | _        | j%                  |j                   j
                  t        j0                  j)                  |j                   j                               y t        j2                  | _        y )	N	esm-infrarB  rC  Fr   r  rF  )rJ   rH   )rG  required_servicer   r   ru   rP  rR   r1   rJ   is_attachedrH   rg   r    SECURITY_DRY_RUN_UA_NOT_ATTACHEDr  r   r   rQ   rz   SECURITY_UA_SERVICE_REQUIREDrd   r  r  r  $SECURITY_UA_SERVICE_WITH_EXPIRED_SUBrP   r?  r@  rn   s      rV   _execute_attach_steprq    s    99%%4 	 
   II-- !  +0K'(44$BBBC%koo6)2)J)J&0022#+#H#H#O#O $		 : : $P $ 1  	'OO[%8%8
 (CCD&{7%.%F%FK",,YY..'LLSS II66  T   -  &<<KrX   c                    |j                   j                  dk(  rt        nt        }| j	                  |j                   j
                  d|       d| _        t        |j                   j                  | j                  | j                        so| j                  |j                   j
                  t        j                  j                  |j                   j                               t        j                  | _        y t        j"                  S )Nrj  rB  rC  Fr  rF  )rG  r  r   r   ru   rP  rR   r2  rJ   rH   rz   r   %SECURITY_UA_SERVICE_NOT_ENABLED_SHORTrd   r   r   rQ   rP   rp  s      rV   _execute_enable_steprt    s     99+ 	 
   II-- ! 
 +0K'4		
 	((**#IIPP		)) Q  	) 	
 "+!B!B***rX   c                     |j                   j                  t        j                  j                  k(  r/t        t        j                         t        j                  | _
        y y r{   )rG  rm   r!   NOT_AFFECTEDr  rg   r   SECURITY_NO_AFFECTED_PKGSr   r   rQ   rQ  s     rV   _execute_noop_not_affected_steprx  
  sE     yy,99???h001!*!>!> @rX   c                     t        |j                  t              rPt        t        j
                  j                  | j                  |j                  j                               d| _	        y y )N)r   rE  T)
r   rG  r+   rg   r   CVE_FIXED_BY_LIVEPATCHrd   rG   patch_versionrT   rQ  s     rV   %_execute_noop_fixed_by_livepatch_stepr|    sY     $))12++22!''		// 3 	
 *.& 3rX   c                 H   t        |j                  t              r| j                  |j                  j                  d|j                  j
                         t        t        j                         | xj                  t        |j                  j                        z  c_	        y y )NrB  rC  )r   rG  r*   ru   rP  rn   rg   r   rb  rL   rc   rQ  s     rV    _execute_noop_already_fixed_stepr~    sx     $))12$$		1199## 	% 	

 	h001TYY%>%>!?? 3rX   c                 @   g | j                   | j                  }t        | j                  || j                  xs g |      }|j                          t        |d       D ]^  }t        |t              rt        ||       t        |t              rt        ||       t        |t              rt        ||       t        |t              r+t        ||       |j                   t"        j$                  k7  r nt        |t&              r+t)        ||       |j                   t"        j$                  k7  r nt        |t*              r+t-        ||       |j                   t"        j$                  k7  r nYt        |t.              rt1        ||       t        |t2              rt5        ||       t        |t6              sSt9        ||       a t;                |j<                  r]t;        t?        tA        tC        |j<                  D cg c]  }|jD                   c}                         t"        jF                  |_        |j                   t"        j$                  k(  rtI        jJ                  |jL                        ret"        jN                  |_        tP        jR                  jU                  d      }t;        |       tW        jX                  tZ        j\                  d       |j^                  s ta        |j                   | j                         |j                   |j<                  fS c c}w )N)rG   rH   rI   rJ   c                     | j                   S r{   )order)xs    rV   <lambda>z"execute_fix_plan.<locals>.<lambda><  s
     rX   )key)rO   r   r   )1planwarningsrF   rG   affected_packagesrk   rf   r   r(   rN  r)   rR  r'   rW  r   rh  rQ   r   rP   r   rq  r   rt  r"   rx  r    r|  r   r~  rg   rM   r  listrN   rx   r   r   should_rebootrO   r   r   r   rd   rA   addrB   ENABLE_REBOOT_REQUIREDrT   r   )r   rH   rJ   	full_planr?  r@  r   
reboot_msgs           rV   r   r   ,  s   				I
 nn006B	K   "y&78 @dBC5k4Hd?@2;Ed>?1+tDd12%k48%%)H)HHd-. d3%%)H)HHd-. d3%%)H)HHdO,+K>d781+tDd78,[$?9@< 
G( 0;/G/G + (OO		
 "+!B!B 	)"A"AA  0J0JK!*!I!I99@@% A 

 	j))%	

 ))";#9#98>>J""K$<$<==7s   :Lfix)r_  c                N   | j                   rt        t        j                         d| j                  j                         v r-t        | j                  | j                   |      }|j                  S t        | j                  | j                   | j                  |      }|j                  S )Nr   )
rH   rg   r   SECURITY_DRY_RUN_WARNINGr   lowerr   r   r   	exit_code)argsrJ   kwargsrm   s       rV   
action_fixr  ~  s    ||h//0##))++,,dllC@ 	 t
 rX   T)helpz	--dry-run
store_true)r  actionz--no-related)	arguments)r  r   r  help_categorypreserve_descriptionargument_groupsr{   )r   N)r   )rh   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.v1r0   r1   uaclient.clir2   uaclient.cli.commandsr3   r4   r5   uaclient.cli.detachr6   uaclient.cli.parserr7   uaclient.clouds.identityr8   r9   r:   uaclient.configr;   uaclient.defaultsr<   uaclient.entitlementsr=   (uaclient.entitlements.entitlement_statusr>   r?   r@   uaclient.filesrA   uaclient.files.noticesrB   uaclient.messages.urlsrC   uaclient.statusrD   rF   r   r   r   r   r   r   intrs   r   r   r   r  r  r  r  r'  r2  r   rt   rN  rR  rW  rh  rq  rt  rx  r|  r~  r    assert_vulnerability_issue_validr  CLI_ROOT_FIXCLI_FIX_DESCSECURITYCLI_FIX_ISSUECLI_FIX_DRY_RUNCLI_FIX_NO_RELATEDfix_commandr   rX   rV   <module>r     s      = < J A 
     , J I I I " K K - , 
 % . 5 
 # ) 0 -< <~- / 4C $ X &dd"&d48d?GdX $(N3iNN N 	N
 C=N 	N8   	
9x 96H  .tCy S & 4 D $x D .H s t 8(((*.(	(X 68"3"3!$"3/2"3J3 ??
0?2??#F? OO#EO;A;A
;A|,=,=
,=^++
+B??#2?
.
.#>
.
@
@#>
@O>O>&*O>19O>
9d>**+O>d +**u5 6 				%%'',83I3IJ!11'
 "!44'	
rX   