�
�Hcf.s �
�� � d dl Z d dlZd dlmZmZmZmZmZmZm Z d dl
mZmZm
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZ 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/m0Z0m1Z1m2Z2m3Z3m4Z4 d d
l5m6Z6 d dl5m7Z8 d dl9m:Z: d dl9m7Z; d d
l<m=Z=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW G d� d� ZXd� ZYd� ZZde+fd�Z[de-fd�Z\d e]d!e^d"eGfd#�Z_d e]d!e^d$e^d"eGfd%�Z` dKd&ee] d'e]d(ead)ead*ee] d+e]fd,�Zbd"eGd-e]d+e^fd.�ZcdLd/�Zdd"eGfd0�Zed"eGd+e^fd1�Zfd2ee] d+e]fd3�Zgd"eGd!e^d+e^fd4�Zhd"eGd+e^fd5�Zid"eGd6e]d+e^fd7�Zjd6e]d"eGd!e^d+e^fd8�Zk dMd'ed9e]d:e]fd;�Zld<e]fd=�Zmd>eXd?e0fd@�Znd>eXd?e1fdA�Zod>eXd?e/fdB�Zpd>eXd?e$fdC�Zqd>eXd?e%fdD�Zrd>eXd?e&fdE�Zsd>eXd?e*fdF�Ztd>eXd?e(fdG�Zud>eXd?e'fdH�Zvde+d!e^d"eGd+eeee f fdI�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�"FixPlanWarningFailUpdatingESMCache�&FixPlanWarningPackageCannotBeInstalled�#FixPlanWarningSecurityIssueNotFixed�NoOpAlreadyFixedData�NoOpLivepatchFixData�USNAdditionalData)�CVEFixPlanOptions)�_plan)�USNFixPlanOptions)�ContractExpiryStatus�_is_attached)�NAME�
USAGE_TMPL)�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 Zd Zdededee defd�Zd� Z ddee d ed
e e fd�Z
dee d
efd�Zy)�
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__zFixContext.__init__Q s_ � � ������!�e���#�9�9�����
�*���������'+��$�05��-�"'��� c �Z � | j r�t j j t | j � � j t | j � dj
t | j � � �� }t t j |t dd�� � 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_headerzFixContext.print_fix_headerd s� � �����1�1�;�;��D�&�&�'���f��$�,�,�-��Y�Y�v�d�&8�&8�9�:� � �
�
��
�
��*�&,�',� �
� rU N�source_pkgs�status�pocketc � � | j rDt t ||| j t | j
� |rt
|� nd �� � 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_headerzFixContext.print_pkg_headeru sJ � � �'�'��(�(�!�"�n�n� ��!3�!3�4�:@�.�v�6�d�
�
� (rU rY �unfixed_reasonc �^ � |D ]( }| j j t ||�� � �* y )N)�pkgrs )rJ �appendr )rR rY rs ru s rS �add_unfixed_packageszFixContext.add_unfixed_packages� s/ � �� �C����$�$��3�~�F�
� rU �N)�__name__�
__module__�__qualname__�str�boolr r8 rT rh r rr rw � rU rS rC rC P s{ � �(��(� �(� �C�y� (�
�(�&�* !%� ��#�Y�� �� ��
� �&��c�� �C� rU rC c � � | j dt j �� }|j t �� t |� y )N�fix��help)�action)�
add_parserr �CLI_ROOT_FIX�set_defaults�
action_fix�
fix_parser)�
subparsers�
parser_fixs rS r� r� � s6 � ��&�&�u�8�3H�3H�&�I�J����:��.��z�rU c � � t j t d�� | _ d| _ t
j | _ t
j | j _
| j dt
j �� | j ddt
j �� | j d dt
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)r4 ra r3 �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� � ��$�$�
�?��F�L� �F�K�!�.�.�F��&�0�0�F����
���(�x�/E�/E��F�
����L�x�/G�/G� � � ����|�(�2M�2M� � � �MrU �cvec �� � dj | j j � | j �� dj | j j � � g}t dj |� � y )N�{issue}: {description}��issuer� z! - https://ubuntu.com/security/{}�
)ra rD �upperr� rd rb )r� �liness rS �print_cve_headerr� � s^ � � �'�'��)�)�/�/�#���� (�
� ,�2�2�3�9�9�?�?�3D�E�
�E�
�$�)�)�E�
�rU �fix_planc � � | j }dj |j j � |j �� g}|j
}t
|t � r�|j ry|j t j � |j D ]J }|j dj t j j j |�� � � �L nP|j rD|j t j � |j D ] }|j d|z � � t! dj# |� � 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� �'�'��"�"�(�(�*�
�8N�8N� (�
�
�E� !�0�0�O��/�#4�5��*�*��L�L��5�5�6�&�6�6�
������N�N� �
�
�7�7�>�>�3�>�G���
� �
6�
6��L�L��?�?�@�)�C�C�
-�����U�V�^�,�
-�
�$�)�)�E�
�rU r� rE rG c �� � t t | g�� |�� }|j j d j }|rN|j
rBt
j t j |j xs 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�8�c��H�
���#�#�A�&�,�,�E������0�0��+�+��
�
�0�0�%�)�)��
�
�
�X�'�'�,�,�Q�/�0� �G� ��!3�!3�!8�!8��!;�W�c�J�I�F�A��MrU �
no_relatedc � � t t | g�� |�� }|j j d j j
}|rN|j rBt j t j |j xs d|j � �� �t |j j d � t dt j j | �� z � t! |j j d j ||� \ }}|t" |