Your IP : 216.73.216.14


Current Path : /usr/lib/python3/dist-packages/uaclient/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/uaclient/__pycache__/security_status.cpython-38.pyc

U

8�-d�`�@s�ddlZddlZddlmZddlmZddlmZddlm	Z	ddl
mZmZm
Z
mZmZmZddlZddlmZmZddlmZmZmZdd	lmZdd
lmZmZddlmZm Z ddl!m"Z"dd
l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dZ,Gdd�de�Z-Gdd�de�Z.edd�dd��Z/edeej0j1fd�dd�Z2ej0j1e3d�dd�Z4e3e
e3efe3d�dd�Z5eej0j1ee3eeej0j6e3ffd �d!d"�Z7ee
e3efd#�d$d%�Z8ee
e3efd�d&d'�Z9d(d)�Z:ee3eeej0j6e3ffe
e3efee
e3efd*�d+d,�Z;ee
e3efd#�d-d.�Z<dIee3eej0j1fe3e=dd1�d2d3�Z>d4d5�Z?d6d7�Z@e3e3e eeAeAe=d8�d9d:�ZBgfeej0j1eej0j1d;�d<d=�ZCed>�d?d@�ZDdAdB�ZEdCdD�ZFdEdF�ZGdGdH�ZHdS)J�N)�defaultdict)�Enum)�	lru_cache)�choice)�Any�DefaultDict�Dict�List�Tuple�Union)�	livepatch�messages)�PreserveAptCfg�
get_apt_cache�
get_esm_cache)�UAConfig)�ESMAppsEntitlement�ESMInfraEntitlement)�ApplicabilityStatus�ApplicationStatus)�status)�REBOOT_PKGS_FILE_PATH�get_distro_info�get_kernel_info�get_platform_info�is_current_series_lts�is_supported�	load_file�
should_reboot)�	esm-infra�esm-appsc@s eZdZdZdZdZdZdZdS)�UpdateStatusz2Represents the availability of a security package.Zupgrade_availableZpending_attachZpending_enableZupgrade_unavailableN)�__name__�
__module__�__qualname__�__doc__�	AVAILABLE�
UNATTACHED�NOT_ENABLED�UNAVAILABLE�r*r*�:/usr/lib/python3/dist-packages/uaclient/security_status.pyr!"s
r!c@seZdZdZdZdZdS)�RebootStatus�yesZnozyes-kernel-livepatches-appliedN)r"r#r$�REBOOT_REQUIRED�REBOOT_NOT_REQUIRED�!REBOOT_REQUIRED_LIVEPATCH_APPLIEDr*r*r*r+r,*sr,)�maxsizecCsTt�d}dd�|�fddd�|�fddd	�|�fd
dd�|�fddd�|�fd
iS)
N�series�Ubuntuz{}-security�standard-securityZ
UbuntuESMAppsz{}-apps-securityr Z	UbuntuESMz{}-infra-securityrz{}-apps-updatesz{}-infra-updates)r�format)r2r*r*r+�%get_origin_information_to_service_map0s
�r6�str)�returnc	CsRtt�}tt��8}dd�|D�}||d<|D]}|t|��|�q,W5QRX|S)NcSsg|]}|jr|�qSr*)�is_installed��.0�packager*r*r+�
<listcomp>Bsz4get_installed_packages_by_origin.<locals>.<listcomp>�all)r�listrr�get_origin_for_package�append)�result�cache�installed_packagesr<r*r*r+� get_installed_packages_by_origin<s
�rE)r<r8cCs~|jj}t|�dkr6|jdks*|j|jkr.dS|jj}|D]>}t��|j|jfd�}|tkrd|S|jdkr:|j	Sq:dS)a
    Returns the origin for a package installed in the system.

    Technically speaking, packages don't have origins - their versions do.
    We check the available versions (installed, candidate) to determine the
    most reasonable origin for the package.
    �N�unknown�r3�third-party)
�	installed�origins�len�	candidater6�get�origin�archive�ESM_SERVICESZ	component)r<Zavailable_originsrO�servicer*r*r+r@Ms
�
r@)�service_name�ua_infor8cCsP|dks|dr$||dkr$tjjS|ds4tjjS||dkrHtjjStjjS)z�Defines the update status for a package based on the service name.

    For ESM-[Infra|Apps] packages, first checks if Pro is attached. If this is
    the case, also check for availability of the service.
    )r4�standard-updates�attached�enabled_services�entitled_services)r!r&�valuer'r(r))rSrTr*r*r+�get_update_statusls�
�rZ)�packagesr8c
	Cs tt�}tt���}|D�]�}|jr|jD]~}||jkr*d}|jD]8}t��	|j
|jf�}|rB||�||j
f�d}q|qB|jd}|s*d|jkr*|d�||j
f�q*|j|kr||j}	|	jD]J}||jkr�|jD]4}t��	|j
|jf�}|r�||�||j
f�q�q�q�qW5QRX|S)z�Filters a list of packages looking for available updates.

    All versions greater than the installed one are reported, based on where
    it is provided, including ESM pockets, excluding backports.
    FTrZ	backportsrU)rr?rrr9ZversionsrJrKr6rNrOrPrAZsite�name)
r[rBZ	esm_cacher<�versionZcounted_as_securityrOrRZexpected_originZesm_packager*r*r+�filter_security_updates}sL




��
���





��r^)�cfgr8cCs�dggd�}t|dd�}|dr~d|d<|dD]L}|dtkr0|dd	kr^|d
�|d�|ddkr0|d
�|d�q0|S)z7Returns the Pro information based on the config object.F)rVrWrXT)r_Zshow_allrV�servicesr\Zentitledr-rXr�enabledrW)rrQrA)r_rTZstatus_dictrRr*r*r+�get_ua_info�s�rbcCsrt��}t�j}|dk	rn|dk	rn||jkrn|jdk	rn|jjdkrn|jjdk	rnt|jj�dkrndd�|jjD�SgS)N�appliedrcSs"g|]}|jpd|jpdd��qS)rHF�r\Zpatchedrd)r;Zfixr*r*r+r=�s�z,get_livepatch_fixed_cves.<locals>.<listcomp>)rrr�proc_version_signature_version�kernel�state�fixesrL)�	lp_status�our_kernel_versionr*r*r+�get_livepatch_fixed_cves�s(����
�
��	�rkcCs�t�stjSztt�}Wntk
r2tjYSX|��}t|�}d}d}|D]}t	�
||�rP|d7}qP||krxtjSt��s�tjSt
�j}t��}|dk	r�|dk	r�||jkr�|jdk	r�|jjdkr�tjStjS)Nz^(linux-image|linux-base).*rrFrc)rr,r/rr�FileNotFoundErrorr.�splitrL�re�matchrZis_livepatch_installedrrerrfrgr0)Zpkg_list_strZpkg_listZnum_pkgsZkernel_regexZnum_kernel_pkgs�pkgrjrir*r*r+�get_reboot_status�s>
����
�rq)�security_upgradable_versionsrTr8cCsRg}|��D]@\}}t||�}|D](\}}|�|jj|j||||jd��q"q|S)N)r<r]rSrrOZ
download_size)�itemsrZrAr<r\r]�size)rrrT�updatesrRZversion_listrr]rOr*r*r+�create_updates_lists
��rvcCst|�}d|i}t�}|d}t|�|d<t|�}g|d<t||�}t|d�|d<t|d�|d<t|d	�|d
<t|d�|d<t|d
�|d<t|d�|d<t|d�|d<t|d�|d<t|d�|d<t|d�|d<t|d�|d<t�j|d<d||dt�id�S)agReturns the status of security updates on a system.

    The returned dict has a 'packages' key with a list of all installed
    packages which can receive security updates, with or without ESM,
    reflecting the availability of the update based on the Pro status.

    There is also a summary with the Ubuntu Pro information and the package
    counts.
    Zuar>Znum_installed_packagesrU�mainZnum_main_packages�
restrictedZnum_restricted_packages�universeZnum_universe_packages�
multiverseZnum_multiverse_packagesrIZnum_third_party_packagesrGZnum_unknown_packagesrZnum_esm_infra_packagesr Znum_esm_apps_packagesZnum_esm_infra_updatesZnum_esm_apps_updatesr4Znum_standard_security_updatesZreboot_requiredz0.1Z
fixed_cves)Z_schema_version�summaryr[r)rbrErLr^rvrqrYrk)r_rTr{�packages_by_originrDrrrur*r*r+�security_status_dict+sB

�����r}r>F)�
package_lists�
show_items�always_showr8c
Csht|d�}ttjj|d��dtt|��d}|dkrvt|d�t|d�t|d�}ttjj||d	d
d��|dkr�t|d
�t|d�t|d�}|s�|r�ttjj|||dkr�d	nddd��|dk�rt|d�}|s�|�rtj}|dk�rtj}t|j||d��|dk�r\t|d�}	|	�s8|�r\ttj	j||	|	dk�rRd	ndd��td�dS)Nr>)�count� rF)r>rrwrxr�s�Main/Restricted)�offsetr��plural�
repository)r>r ryrzr rH�Universe/Multiverse)r>rIrI)r�r�)r>rGrG)r�r�r�)
rL�printr
ZSS_SUMMARY_TOTALr5r7ZSS_SUMMARY_ARCHIVEZSS_SUMMARY_THIRD_PARTY_SNZSS_SUMMARY_THIRD_PARTY_PLZSS_SUMMARY_UNAVAILABLE)
r~rr�Ztotal_packagesr�Zpackages_mrZpackages_umZpackages_thirdparty�msgZpackages_unknownr*r*r+�_print_package_summaryash

�
����	

�
����	



��r�cCsJt�d}t|�j}d�t|j�t|j��}ttj	j|d��td�dS)Nr2z{}/{}��daterH)
rr�eolr5r7Zmonth�yearr�r
ZSS_INTERIM_SUPPORT)r2�eol_dater�r*r*r+�_print_interim_release_support�s


r�cCsDt�d}t|�r6t|�j}ttjjt|j	�d��n
ttj
�dS)Nr2r�)rrrr�r�r
ZSS_LTS_SUPPORTr5r7r�ZSS_NO_SECURITY_COVERAGE)r2r�r*r*r+�_print_lts_support�s


r��rRr��service_status�service_applicability�installed_updates�available_updates�is_attachedc
Cs�t�d}t|�j}|tjkrdtjj||t|j	�d�}	|rZ|	tj
j||dkrPdndd�7}	t|	�nntjj||t|j	�d�}	|r�|	tj
j||dkr�dndd�7}	n|	d7}	t|	�|r�|tjkr�ttjj|d	��td�dS)
Nr2)r�rRr�rFrHr�)rur�)rRr�r��.�rR)rrZeol_esmrZENABLEDr
ZSS_SERVICE_ENABLEDr5r7r�ZSS_SERVICE_ENABLED_COUNTSr�ZSS_SERVICE_ADVERTISEZSS_SERVICE_ADVERTISE_COUNTSrZ
APPLICABLEZSS_SERVICE_COMMAND)
rRr�r�r�r�r�r�r2Zeol_date_esm�messager*r*r+�_print_service_support�s@	


��
��
��r�)�package_list�reference_listc	Cs�d}dd�|D�}dd�|D�}|D]:}||krR|djtjj|tjjd�d7}q$||d7}q$td�tj|d	d
d
d���td�|r�|n|}ttj	jt
|�d��dS)
NrHcSsg|]
}|j�qSr*�r\r:r*r*r+r=�sz'_print_package_list.<locals>.<listcomp>cSsg|]
}|j�qSr*r�r:r*r*r+r=�sz{bold}{package_name}{end_bold})Zbold�package_nameZend_boldr��
�PF)�widthZbreak_long_wordsZbreak_on_hyphens)r<)r5r
ZTxtColorZBOLDZENDCr��join�textwrapZwrapZSS_POLICY_HINTr)r�r�Zpackage_stringZ
package_namesZreference_namesr�Zhint_package_listr*r*r+�_print_package_list�s8���	���
r�)r_c	Cs�t|���d}t|���d}t|���d}t|���d}t�d}t�}t|�d}t�}t|d|d|d�d}	t|d|d|d	�d	}
t	|�t
tj�t
d
�|s�t
|�r�t�t
tj�dS|tjkr�t�d
}|s�d}t
tjj|d��t
d
�tdd
||t|d�t|	�|d�|d�sR|d�sR|d	�rttd	d||t|d	�t|
�|d�|�s�t
tj�dS)Nrr2rVrwrxrryrzr rHz NOT)�not_attachedr�r�r�)r�application_status�applicability_statusrrrrbrEr^r�r�r
ZSS_HELP_CALLrr��SS_NO_INTERIM_PRO_SUPPORTr�DISABLEDr�ZSS_IS_ATTACHEDr5r�rLZ
SS_LEARN_MORE)r_�esm_infra_status�esm_infra_applicability�esm_apps_status�esm_apps_applicabilityr2�is_ltsr�r|Z"security_upgradable_versions_infraZ!security_upgradable_versions_appsr�r*r*r+�security_statuss�
�
��������



����
�
r�cCsRt�}|d}t|ddd�|rDttj�td�td�t|�n
ttj�dS)NrIT�rr�rH�	Packages:)rEr�r�r
ZSS_THIRD_PARTYr�ZSS_NO_THIRD_PARTY)r|Zthird_party_packagesr*r*r+�list_third_party_packagesMs�

r�cCsRt�}|d}t|ddd�|rDttj�td�td�t|�n
ttj�dS)NrGTr�rHr�)rEr�r�r
ZSS_UNAVAILABLEr�ZSS_NO_UNAVAILABLE)r|Zunknown_packagesr*r*r+�list_unavailable_packages_s�

r�c
	Cs6t�}|d}|d|d}||}t�}t|�d}|D]\}}|�|j�q<t�d}	t�}
t|���d}t|��	�d}t
|ddd�|
s�t|	�r�t�t
tj�dS|tjkr�t�t
d�tdd	||t|�t|�d
d�t
tjjdd��t
d�t|	��s2t
tjjdd��t
d
�t|t|��dS)Nrrwrxr2rTr�rHr�Fr�r�r�)rE�setr^�addr<rrrr�r�r�rr�r�r
r�rr�r�r�rL�SS_SERVICE_HELPr5�SS_BOLD_PACKAGESr�r?)
r_r|Zinfra_packagesZmr_packagesZall_infra_packagesZ
infra_updatesrr�update�_r2r�r�r�r*r*r+�list_esm_infra_packagesrsX�

��

�	
r�c	Cst�}|d}|d|d}||}t�}t|�d}|D]\}}|�|j�q<t�}	t|���d}
t|���d}t	|ddd�|	s�t
tj�dSt
dd|
|t|�t|�dd	�t
tjjdd
��t
d�|r�t
tjjdd
��t
d�t|t|��dS)
Nr ryrzrTr�r�Fr�r�rHr�)rEr�r^r�r<rrr�r�r�r�r
r�r�rLr�r5r�r�r?)r_r|Z
apps_packagesZum_packagesZall_apps_packagesZapps_updatesrrr�r�r�r�r�r*r*r+�list_esm_apps_packages�sJ���
�	r�)r>F)Irnr��collectionsr�enumr�	functoolsrZrandomr�typingrrrr	r
rZaptZuaclientrr
Zuaclient.aptrrrZuaclient.configrZuaclient.entitlementsrrZ(uaclient.entitlements.entitlement_statusrrZuaclient.statusrZuaclient.systemrrrrrrrrrQr!r,r6r<ZPackagerEr7r@rZZVersionr^rbrkrqrvr}�boolr�r�r��intr�r�r�r�r�r�r�r*r*r*r+�<module>s� (
�
�>/�
�8��?
�0�

�$J6