
    fDq                        d dl Z 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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/m0Z0m1Z1m2Z2m3Z3 d d
l4m5Z5 d dl4m6Z7 d dl8m9Z9 d dl8m6Z: d dl;m<Z< d dl=m>Z>m?Z? d dl@mAZAmBZBmCZC d dlDmEZE d dlFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZNmOZOmPZP d dlQmRZR d dlSmTZT d dlUmVZV d dlWmXZX  G d d      ZYd ZZd Z[de+fdZ\de-fd Z]d!e^d"e_d#eEfd$Z`d!e^d"e_d%e_d#eEfd&Za	 dKd'ee^   d(e^d)ebd*ebd+ee^   d,e^fd-Zcd#eEd.e^d,e_fd/ZddLd0Zed#eEfd1Zfd#eEd,e_fd2Zgd3ee^   d,e^fd4Zhd#eEd"e_d,e_fd5Zid#eEd,e_fd6Zjd#eEd7e^d,e_fd8Zkd7e^d#eEd"e_d,e_fd9Zl	 dMd(ed:e^d;e^fd<Zmd=e^fd>Znd?eYd@e/fdAZod?eYd@e0fdBZpd?eYd@e$fdCZqd?eYd@e%fdDZrd?eYd@e&fdEZsd?eYd@e*fdFZtd?eYd@e(fdGZud?eYd@e'fdHZvde+d"e_d#eEd,eeee   f   fdIZwdJ Zxy)N    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)CVE_OR_USN_REGEX	FixStatusUnfixedPackagestatus_message)ESM_APPS_POCKETESM_INFRA_POCKETSTANDARD_UPDATES_POCKETFixPlanAptUpgradeStepFixPlanAttachStepFixPlanEnableStepFixPlanNoOpAlreadyFixedStepFixPlanNoOpLivepatchFixStepFixPlanNoOpStatusFixPlanNoOpStepFixPlanResultFixPlanStepFixPlanUSNResultFixPlanWarning&FixPlanWarningPackageCannotBeInstalled#FixPlanWarningSecurityIssueNotFixedNoOpAlreadyFixedDataNoOpLivepatchFixDataUSNAdditionalData)CVEFixPlanOptions)_plan)USNFixPlanOptions)_is_attached)NAME
USAGE_TMPL)CLOUD_TYPE_TO_TITLEPRO_CLOUD_URLSget_cloud_type)UAConfig)ContractExpiryStatusget_contract_expiry_status)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_statusrD   rF   rE   rG   should_print_pkg_header warn_package_cannot_be_installedfixed_by_livepatch)selfrD   rE   rF   rG   s        2/usr/lib/python3/dist-packages/uaclient/cli/fix.py__init__zFixContext.__init__N   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)rF   r   SECURITY_AFFECTED_PKGS	pluralizelenformatjoinsortedprinttextwrapfillr9   )rR   msgs     rS   print_fix_headerzFixContext.print_fix_headera   s    11;;D&&'f$,,-YYvd&8&89:    *&,',	 rU   Nsource_pkgsstatuspocketc                     | j                   rDt        t        ||| j                  t	        | j
                        |rt        |      nd              y y )N)pkg_listrj   rI   num_pkgspocket_source)rO   rd   _format_packages_messagerI   r`   rF   get_pocket_description)rR   ri   rj   rk   s       rS   print_pkg_headerzFixContext.print_pkg_headerr   sM     ''((!"nn !3!34 #9"@
 (rU   rY   unfixed_reasonc                 ^    |D ](  }| j                   j                  t        ||             * y )N)pkgrs   )rJ   appendr   )rR   rY   rs   ru   s       rS   add_unfixed_packageszFixContext.add_unfixed_packages   s/     	C$$3~F	rU   N)__name__
__module____qualname__strboolr   r6   rT   rh   r   rr   rw    rU   rS   rC   rC   M   s{    (( ( Cy	(
 (&* !%	#Y  	&c C rU   rC   c                     | j                  dt        j                        }|j                  t               t        |       y )Nfixhelp)action)
add_parserr   CLI_ROOT_FIXset_defaults
action_fix
fix_parser)
subparsers
parser_fixs     rS   set_fix_parserr      s6    &&u83H3H&IJ:.zrU   c                    t        j                  t        d      | _        d| _        t
        j                  | _        t
        j                  | j                  _
        | j                  dt
        j                         | j                  ddt
        j                         | j                  d	dt
        j                         | S )
z1Build or extend an arg parser for fix subcommand.z"fix <CVE-yyyy-nnnn+>|<USN-nnnn-d+>)namecommandr   security_issuer   z	--dry-run
store_true)r   r   z--no-related)r2   ra   r1   usageprogr   CLI_FIX_DESCdescription	CLI_FLAGS
_optionalsrD   add_argumentCLI_FIX_ISSUECLI_FIX_DRY_RUNCLI_FIX_NO_RELATED)parsers    rS   r   r      s    $$?FL FK!..F&00F
(x/E/EF
Lx/G/G   |(2M2M   MrU   cvec                     dj                  | j                  j                         | j                        dj                  | j                  j                               g}t	        dj                  |             y )N{issue}: {description}issuer   z! - https://ubuntu.com/security/{}
)ra   rD   upperr   rd   rb   )r   liness     rS   print_cve_headerr      s^     ''))//# 	( 	
 	,22399??3DE	E 
$))E
rU   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_planra   rD   r   r   additional_data
isinstancer,   associated_cvesrv   r   SECURITY_FOUND_CVESurlsSECURITY_CVE_PAGEassociated_launchpad_bugsSECURITY_FOUND_LAUNCHPAD_BUGSrd   rb   )r   
target_usnr   r   r   lp_bugs         rS   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
rU   r   rE   rG   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optionsrG   r   unexpected-error	named_msg)cve_planr-   	cves_datar   errorrg   r   AnonymousUbuntuProErrorr   NamedMessagecoder   rd   execute_fix_plan)r   rE   rG   r   r   rj   _s          rS   fix_cver      s    !'78cH ##A&,,E00++

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

 X'',,Q/0	G !3!3!8!8!;WcJIFAMrU   
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rx   )rD   ).0usns     rS   	<genexpr>zfix_usn.<locals>.<genexpr>  s     $L3SYY$Ls   )related_usnsz- {})contextF- fix operation	operationTz
  - {}: {})#usn_planr/   	usns_datar   r   r   rg   r   r   r   r   r   r   rd   SECURITY_FIXING_REQUESTED_USNra   r   r   rM   SYSTEM_NOT_AFFECTEDrelated_usns_planSECURITY_RELATED_USNSrb   SECURITY_FIXING_RELATED_USNSrD   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_VULNERABLErs   ru   SECURITY_RELATED_USN_ERROR)r   rE   r   rG   r   r   target_usn_statusr   r   related_usn_statusrelated_usn_planfailure_on_related_usnrj   rJ   unfixed_pkgs                  rS   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 	
 rU   rm   rj   rI   rn   ro   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{} {}:(rW   )rZ   r[   r\   z{}
{})rv   ra   re   rf   rb   rc   r9   r   )	rm   rj   rI   rn   ro   	msg_indexsrc_pkgssrc_pkg
msg_headers	            rS   rp   rp   D  s     IH !Q		8<= !
 $))I&&,diix8H.I	
  J ??:~fm'LMMrU   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)rd   rA   r   r   UbuntuProErrorrg   )rG   r   errs      rS   _run_ua_attachr   `  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.)rD   cloud_specific_urlN)	r5   r4   keysrd   r   SECURITY_USE_PRO_TMPLra   r3   get)
cloud_typer   s     rS   *_inform_ubuntu_pro_existence_if_applicabler   n  sa    "$MJ^((****11)--j9#1#5#5j#A 2 	
 +rU   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)rG   r   )	user_code)magic_tokenr   )rd   r   CLI_MAGIC_ATTACH_INITr   CLI_MAGIC_ATTACH_SIGN_INra   r  r   r   r   r   MagicAttachTokenErrorCLI_MAGIC_ATTACH_FAILEDr   r   CLI_MAGIC_ATTACH_PROCESSINGr   contract_token)rG   initiate_respwait_options	wait_resperevoke_optionss         rS   _perform_magic_attachr  z  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   rd   r   *SECURITY_UPDATE_NOT_INSTALLED_SUBSCRIPTIONr   prompt_choicesSECURITY_FIX_ATTACH_PROMPTr  PROMPT_ENTER_TOKENinputr   )rG   choicer   s      rS   _prompt_for_attachr    s    
 /0	(
=
=>  ++%F }}$S))}h))*dc5))rU   rJ   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.
    rW   )rn   rY   rZ   r   )
r`   re   rf   r   SECURITY_PKG_STILL_AFFECTEDr_   ra   rb   rc   r9   )rJ   num_pkgs_unfixeds     rS   _format_unfixed_packages_msgr     sb     <(==,,66	

&%6,/0  
  	 	rU   c                     t        |       }|d   t        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.
    r   FT)r8   r7   EXPIREDrd   r   (SECURITY_DRY_RUN_UA_EXPIRED_SUBSCRIPTION)rG   rE   contract_expiry_statuss      rS   _check_subscription_is_expiredr%    s=    
 8<a $8$@$@@(CCDrU   c                    ddl }ddlm} t                t	        t
        j                         t        j                  t
        j                  j                  t              ddg      }|dk(  rjt	        t
        j                         t        d      }t	        t        d	d
gg             |j                  |j!                  dd      |        t#        | |      S y)zdPrompt for attach a new subscription token to the user.

    :return: True if attach performed.
    r   N)cli)urlrr  r  r  r   detachTr'  )
assume_yesra   F)argparseuaclientr'  r   rd   r   %SECURITY_UPDATE_NOT_INSTALLED_EXPIREDr   r  SECURITY_FIX_RENEW_PROMPTra   r@   PROMPT_EXPIRED_ENTER_TOKENr  rA   action_detach	Namespacer   )rG   r,  r'  r  r   s        rS   _prompt_for_new_tokenr3    s    
 .0	(
8
89  **11m1DCjF }h112d%!2 345$u=s	
 c5))rU   servicec                    t        t        j                  j                  |             t	        j
                  t        j                  j                  |      ddg      }|dk(  rjt        t        dd|gg             t        | |d      \  }}|s=|;t        |t              r+|j                  t        |j                  j                         |S y	)
zMPrompt for enable a pro service.

    :return: True if enable performed.
    r4  r  r  r  r   enableT)rG   r   r+  F)rd   r   SECURITY_SERVICE_DISABLEDra   r   r  SECURITY_FIX_ENABLE_PROMPTrA   r   r   r<   messagerg   )rG   r4  r  retreasons        rS   _prompt_for_enabler=    s    
 
(
,
,
3
3G
3
DE  ++2272CCjF
 }%7!; <=>0'd
V
 "6#34~~)fnn(()
rU   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.
    )rG   r   Tr   r6  F)r:   user_facing_statusr=   ACTIVEapplicability_statusr;   
APPLICABLErd   r   'SECURITY_DRY_RUN_UA_SERVICE_NOT_ENABLEDra   r   r=  SECURITY_UA_SERVICE_NOT_ENABLED SECURITY_UA_SERVICE_NOT_ENTITLED)r4  rG   rE   ent_clsent
ent_statusr   rA  s           rS   )_handle_subscription_for_required_servicerI    s    "c8G
#,C
..0
A)000"%":":"<a#6#A#AAFFMM # N  !#sxx0<<CC # D   99@@HH A  rU   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   rM   r   %SECURITY_ISSUE_RESOLVED_ISSUE_CONTEXTra   SECURITY_ISSUE_RESOLVEDrd   r   handle_unicode_charactersr   'SECURITY_ISSUE_UNAFFECTED_ISSUE_CONTEXTSECURITY_ISSUE_UNAFFECTEDr   )SECURITY_ISSUE_NOT_RESOLVED_ISSUE_CONTEXTSECURITY_ISSUE_NOT_RESOLVED)rj   r   r   rg   s       rS   r   r   3  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2rU   rk   c                     | t         k(  rt        j                  S | t        k(  rt        j                  S | t
        k(  rt        j                  S | S rx   )r   r   'SECURITY_UBUNTU_STANDARD_UPDATES_POCKETr   SECURITY_UA_INFRA_POCKETr   SECURITY_UA_APPS_POCKET)rk   s    rS   rq   rq   X  sE    ((???	#	#000	?	"///rU   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ri   rj   rk   F)packageversionr   rY   rs   T)rr   datarelated_source_packagesrk   rO   r   FIX_CANNOT_INSTALL_PACKAGEra   binary_packagebinary_package_versionrd   rw   source_packagerP   r   r   rN   )rW  rX  warn_msgs      rS   )_execute_package_cannot_be_installed_steprf  c  s       II55yy ! 
 +0K'2299		((		00 : H 
$/$$ii&&' %  48K0&>>KrU   c                    | j                  |j                  j                  |j                  j                         | xj                  t        |j                  j                        z  c_        | j                  |j                  j                  t        |j                  j                               t        j                  | _
        y )N)ri   rj   r^  )rr   r_  source_packagesrj   rI   r`   rw   r   r   r   rN   rW  rX  s     rS   &_execute_security_issue_not_fixed_steprj  |  s       II--yy !  S!:!:;;$$YY&&%dii&6&67 %  '>>KrU   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)NrZ  r[  r^  )r
   updatez&&)r
   install--only-upgrade-y)zapt-getrm  rn  ro  DEBIAN_FRONTENDnoninteractive)cmdoverride_env_varsrg   T)rr   r_  rh  rk   rI   r`   binary_packagesrP   rd   r   SECURITY_UPDATE_INSTALLEDr   rM   rN   r   we_are_currently_rootrE   SECURITY_APT_NON_ROOTr   rw   rA   rc   r
   run_apt_update_commandrun_apt_command	Exceptiongetattrr|   rO   rL   rl  )rW  rX  r  rg   s       rS   _execute_apt_upgrade_stepr|    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-infrarZ  r[  Fr   r6  r^  )rG   rE   )r_  required_servicer   r   rr   rh  rO   r0   rG   is_attachedrE   rd   r    SECURITY_DRY_RUN_UA_NOT_ATTACHEDr  r   r   rN   rw   SECURITY_UA_SERVICE_REQUIREDra   r%  r#  r3  $SECURITY_UA_SERVICE_WITH_EXPIRED_SUBrM   rW  rX  rk   s      rS   _execute_attach_stepr    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rU   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 )Nr~  rZ  r[  Fr6  r^  )r_  r4  r   r   rr   rh  rO   rI  rG   rE   rw   r   %SECURITY_UA_SERVICE_NOT_ENABLED_SHORTra   r   r   rN   rM   r  s      rS   _execute_enable_stepr    s     99+ 	 
   II-- ! 
 +0K'4		
 	((**#IIPP		)) Q  	) 	
 "+!B!B***rU   c                     |j                   j                  t        j                  j                  k(  r/t        t        j                         t        j                  | _
        y y rx   )r_  rj   r"   NOT_AFFECTEDvaluerd   r   SECURITY_NO_AFFECTED_PKGSr   r   rN   ri  s     rS   _execute_noop_not_affected_stepr    sE     yy,99???h001!*!>!> @rU   c                     t        |j                  t              rPt        t        j
                  j                  | j                  |j                  j                               d| _	        y y )N)r   r]  T)
r   r_  r+   rd   r   CVE_FIXED_BY_LIVEPATCHra   rD   patch_versionrQ   ri  s     rS   %_execute_noop_fixed_by_livepatch_stepr  "  sY     $))12++22!''		// 3 	
 *.& 3rU   c                 H   t        |j                  t              r| j                  |j                  j                  d|j                  j
                         t        t        j                         | xj                  t        |j                  j                        z  c_	        y y )NrZ  r[  )r   r_  r*   rr   rh  rk   rd   r   ru  rI   r`   ri  s     rS    _execute_noop_already_fixed_stepr  /  sx     $))12$$		1199## 	% 	

 	h001TYY%>%>!?? 3rU   c                    g | j                   | j                  }t        | j                  || j                  xs g |      }|j                          t        |d       D ]B  }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t-        ||       t        |t.              rt1        ||       t        |t2              s7t5        ||       E t7                |j8                  r]t7        t;        t=        t?        |j8                  D cg c]  }|j@                   c}                         t        jB                  |_        |j                  t        j                   k(  rtE        jF                  |jH                        ret        jJ                  |_        tL        jN                  jQ                  d      }t7        |       tS        jT                  tV        jX                  d       |jZ                  s t]        |j                  | j                         |j                  |j8                  fS c c}w )N)rD   rE   rF   rG   c                     | j                   S rx   )order)xs    rS   <lambda>z"execute_fix_plan.<locals>.<lambda>L  s
     rU   )key)rL   r   r   )/planwarningsrC   rD   affected_packagesrh   rc   r   r(   rf  r)   rj  r   r|  rN   r   rM   r   r  r   r  r#   r  r!   r  r    r  rd   rJ   r   listrK   ru   r   r   should_rebootrL   r   r   r   ra   r>   addr?   ENABLE_REBOOT_REQUIREDrQ   r   )r   rE   rG   	full_planrW  rX  r   
reboot_msgs           rS   r   r   <  ss   				I
 nn006B	K   "y&78 @dBC5k4Hd?@2;E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,[$?5@8 
G( 0;/G/G + (OO		
 "+!B!B 	)"A"AA  0J0JK!*!I!I99@@% A 

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

 ))";#9#98>>J""K$<$<==7s   K?c                   t        j                  t        | j                        s t	        j
                  | j                        | j                  rt        t        j                         d| j                  j                         v r-t        | j                  | j                  |      }|j                  S t        | j                  | j                  | j                  |      }|j                  S )NrK  r   )rematchr   r   r   InvalidSecurityIssueIdFormatrE   rd   r   SECURITY_DRY_RUN_WARNINGlowerr   r   r   	exit_code)argsrG   kwargsrj   s       rS   r   r     s    88$d&9&9:55%%
 	
 ||h//0##))++,,dllC@ 	 t
 rU   rx   )r   N)r   )yr  re   typingr   r   r   r   r   r   r	   r-  r
   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   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,   +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   uaclient.cli.constantsr1   r2   uaclient.clouds.identityr3   r4   r5   uaclient.configr6   uaclient.contractr7   r8   uaclient.defaultsr9   uaclient.entitlementsr:   (uaclient.entitlements.entitlement_statusr;   r<   r=   uaclient.filesr>   uaclient.files.noticesr?   uaclient.messages.urlsr@   uaclient.statusrA   rC   r   r   r   r   r|   r}   r   r   intrp   r   r   r  r  r   r%  r3  r=  rI  r   rq   rf  rj  r|  r  r  r  r  r  r   r   r~   rU   rS   <module>r     sD   	    = < J A      * J I I I A 3 
 % N . 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 6H s t <)))*.)	)Z 68"3"3!$"3/2"3J3 ??
0?2??#F? ;A;A
;A|,=,=
,=^++
+B??#2?
.
.#>
.
@
@#>
@M>M>&*M>19M>
9d>**+M>`rU   