HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/uaclient/__pycache__/security_status.cpython-310.pyc
o

nHJe�d�@s�ddlmZddlmZmZddlmZddlmZddlm	Z	ddl
mZmZm
Z
mZmZddlZddlmZmZdd	lmZdd
lmZddlmZmZmZmZddlmZdd
lm Z m!Z!ddl"m#Z#m$Z$m%Z%ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ddl,m-Z-dZ.Gdd�de�Z/edd�dd��Z0dedeej1ffdd�Z2dej1dej3de4fdd�Z5de4d e
e4efde4fd!d"�Z6d#eej1dee4eeej7e4fffd$d%�Z8d&ede
e4effd'd(�Z9dee
e4effd)d*�Z:d+ee4eeej7e4ffd e
e4efdee
e4effd,d-�Z;d&ede
e4effd.d/�Z<	0	1dPd2ee4eej1fd3e4d4e=ddfd5d6�Z>d7d8�Z?d9d:�Z@d;e4d<e4d=e$d>e#d?eAd@eAdAe=fdBdC�ZBdDdE�ZCd&efdFdG�ZDdHdI�ZEdJdK�ZFdLdM�ZGdNdO�ZHdS)Q�)�defaultdict)�datetime�timezone)�Enum)�	lru_cache)�choice)�Any�DefaultDict�Dict�List�TupleN)�	livepatch�messages)�_reboot_required)�_is_attached)�PreserveAptCfg�get_apt_cache_datetime�get_apt_pkg_cache�get_esm_apt_pkg_cache)�UAConfig)�ESMAppsEntitlement�ESMInfraEntitlement)�ApplicabilityStatus�ApplicationStatus�ContractStatus)�get_distro_info�get_kernel_info�get_release_info�is_current_series_lts�is_supported)�print_package_list)�	esm-infra�esm-appsc@s eZdZdZdZdZdZdZdS)�UpdateStatusz2Represents the availability of a security package.�upgrade_available�pending_attach�pending_enable�upgrade_unavailableN)�__name__�
__module__�__qualname__�__doc__�	AVAILABLE�
UNATTACHED�NOT_ENABLED�UNAVAILABLE�r0r0�:/usr/lib/python3/dist-packages/uaclient/security_status.pyr#(sr#)�maxsizecCsRt�j}dd�|�fddd�|�fddd�|�fd	dd
�|�fddd�|�fd	iS)N�Ubuntuz{}-security�standard-security�
UbuntuESMAppsz{}-apps-securityr"�	UbuntuESMz{}-infra-securityr!z{}-apps-updatesz{}-infra-updates)r�series�format)r7r0r0r1�%get_origin_information_to_service_map0s�r9�return�strcCsvtt�}tt��)}dd�|jD�}||d<t�|�}|D]}|t||��|�qWd�|S1s4wY|S)NcSsg|]}|jr|�qSr0)�current_ver��.0�packager0r0r1�
<listcomp>Bs
��z4get_installed_packages_by_origin.<locals>.<listcomp>�all)	r�listrr�packages�apt_pkg�DepCache� get_origin_for_installed_package�append)�result�cache�installed_packages�	dep_cacher?r0r0r1� get_installed_packages_by_origin<s"
�
�
�
�
�
rLr?rKcCs�|jsdS|jj}t|�dkr |�|�}|r|j|krdS|j}|D]!\}}t��|j|jfd�}|tvr9|S|jdkrC|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.
    ���unknownr3�third-party)
r<�	file_list�len�get_candidate_verr9�get�origin�archive�ESM_SERVICES�	component)r?rK�available_origins�	candidaterU�_�servicer0r0r1rFQs$
�

�rF�service_name�ua_infocCsP|dvs|dr||dvrtjjS|dstjjS||dvr$tjjStjjS)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/)r]r^r0r0r1�get_update_statusvs�rdrCcCs>tt�}tt���}|D]�}|jr�|jD]C}||jkrVd}|jD]\}}t��|j	|j
f�}|r=||�||jf�d}nq|jdd}	|sVd|	j
vrV|d�||	jf�q|j
|vr�||j
}
|
jD]'}||jkr�|jD]\}}t��|j	|j
f�}|r�||�||jf�nqnqdqWd�|S1s�wY|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.
    FTr�	backportsr_N)rrBrrr<�version_listrQr9rTrUrVrG�site�name)rCrH�	esm_cacher?�version�counted_as_securityrUr[r\�expected_origin�esm_packager0r0r1�filter_updates�sZ



����
��




�����
�.�.rn�cfgcCs�t|�j}|ggd�}|rQt|�}t|�}|��tjkr#|d�d�|��dt	j
kr3|d�d�|��tjkrA|d�d�|��dt	j
krQ|d�d�|S)z7Returns the Pro information based on the config object.)r`rarbrbr"rrar!)r�is_attachedrr�contract_statusr�ENTITLEDrG�application_statusr�ENABLED)rorpr^�infra_entitlement�apps_entitlementr0r0r1�get_ua_info�s*
�
�
�rwcCsrt��}t�j}|dur7|dur7||jkr7|jdur7|jjdkr7|jjdur7t|jj�dkr7dd�|jjD�SgS)N�appliedrcSs"g|]
}|jpd|jpdd��qS)rMF�rh�patchedry)r>�fixr0r0r1r@�s��z,get_livepatch_fixed_cves.<locals>.<listcomp>)r
�statusr�proc_version_signature_version�kernel�state�fixesrR)�	lp_status�our_kernel_versionr0r0r1�get_livepatch_fixed_cves�s

�r��upgradable_versionscCsRg}|��D] \}}t||�}|D]\}}|�|jj|j||||jd��qq|S)N)r?rjr]r|rU�
download_size)�itemsrdrG�
parent_pkgrh�ver_str�size)r�r^�updatesr\rfr|rjrUr0r0r1�create_updates_list�s
���r�cCst|�}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.
    �uarA�num_installed_packagesr_�main�num_main_packages�
restricted�num_restricted_packages�universe�num_universe_packages�
multiverse�num_multiverse_packagesrP�num_third_party_packagesrO�num_unknown_packagesr!�num_esm_infra_packagesr"�num_esm_apps_packages�num_esm_infra_updates�num_esm_apps_updatesr4�num_standard_security_updates�reboot_requiredz0.1�
fixed_cves)�_schema_version�summaryrCr
)rwrLrRrnr�rr�r�)ror^r��packages_by_originrJr�r�r0r0r1�security_status_dicts:

���r�rAF�
package_lists�
show_items�always_showc	CsBt|d�}ttjj|d��dtt|��d}|dvr=t|d�t|d�t|d�}ttj�|�j||d	d
��|dvret|d�t|d
�t|d�}|sW|rettj�|�j||dd
��|dvr�t|d�}|ss|r�ttj�|�j||d��|dvr�t|d�}|s�|r�ttj	�|�j||d��td�dS)NrA)�count� rN)rAr!r�r�r!�Main/Restricted)�offsetr��
repository)rAr"r�r�r"�Universe/Multiverse)rArPrP)r�r�)rArOrOrM)
rR�printr�SS_SUMMARY_TOTALr8r;�SS_SUMMARY_ARCHIVE�	pluralize�SS_SUMMARY_THIRD_PARTY�SS_SUMMARY_UNAVAILABLE)	r�r�r��total_packagesr��packages_mr�packages_um�packages_thirdparty�packages_unknownr0r0r1�_print_package_summaryDsn

�
����

�
����������	r�cCsHt�j}t|�j}d�t|j�t|j��}tt	j
j|d��td�dS)Nz{}/{}��daterM)rr7r�eolr8r;�month�yearr�r�SS_INTERIM_SUPPORT)r7�eol_dater�r0r0r1�_print_interim_release_support�s

r�cCsDt�j}t|�rt|�j}ttjjt	|j
�d��dSttj�dS)Nr�)rr7rrr�r�r�SS_LTS_SUPPORTr8r;r��SS_NO_SECURITY_COVERAGE)r7r�r0r0r1�_print_lts_support�s

r�r\r��service_status�service_applicability�installed_updates�available_updatesrpc
Cs�t�j}t|�j}|tjkrtjj||t	|j
�d�}	ntjj||t	|j
�d�}	|r7|	dtj�
|�j|d�7}	|rG|	dtj�
|�j|d�7}	t|	�|rd|tjkrd|tjkrdtd�ttjj|d��td�dS)N)r�r\r�)r\r�r�r�)r�rM�r\)rr7r�eol_esmrrtr�SS_SERVICE_ENABLEDr8r;r��SS_SERVICE_ADVERTISE�SS_SERVICE_ENABLED_COUNTSr��SS_SERVICE_ADVERTISE_COUNTSr��DISABLEDr�
APPLICABLE�SS_SERVICE_COMMAND)
r\r�r�r�r�r�rpr7�eol_date_esm�messager0r0r1�_print_service_support�sF	

��
�
�
�
��

r�cCsft�}|durttj�td�dSt�tj�}||}|jdkr1ttj	j
|jd��td�dSdS)NrMr)�days)rr�r�SS_UPDATE_UNKNOWNr�nowr�utcr��SS_UPDATE_DAYSr8)�last_apt_updater��time_since_updater0r0r1�_print_apt_update_call�s

�r�c	Cs�t|���d}t|���d}t|���d}t|���d}t�j}t�}t|�d}t�}t	|d|d|d�d}	t	|d|d|d�d}
t
|�ttj
�td	�t�|spt|�rit�ttj�dS|tjkrxt�|r�ttj�nttj�td	�tdd
||t|d�t|	�|d�|ds�|ds�|dr�tdd||t|d�t|
�|d�|s�ttj�dSdS)
Nrr`r�r�r!r�r�r"rMr��r\r�r�r�r�r�rpr�)rrs�applicability_statusrrr7rrwrLrnr�r�r�SS_HELP_CALLr�rr��SS_NO_INTERIM_PRO_SUPPORTrr�r��SS_IS_ATTACHED�SS_IS_NOT_ATTACHEDr�rR�
SS_LEARN_MORE)ro�esm_infra_status�esm_infra_applicability�esm_apps_status�esm_apps_applicabilityr7�is_ltsrpr��"security_upgradable_versions_infra�!security_upgradable_versions_appsr0r0r1�security_status�s�
���������




����
�
�r�cC�zt�}|d}dd�|D�}t|ddd�|r6ttj�td�ttj�t|�ttjjt	|�d��dSttj
�dS)NrPcS�g|]}|j�qSr0�rhr=r0r0r1r@#�z-list_third_party_packages.<locals>.<listcomp>T�r�r�rM�r?)rLr�r�r�SS_THIRD_PARTY�SS_PACKAGES_HEADERr �SS_SHOW_HINTr8r�SS_NO_THIRD_PARTY)r��third_party_packages�
package_namesr0r0r1�list_third_party_packages s�

r�cCr�)NrOcSr�r0r�r=r0r0r1r@7r�z-list_unavailable_packages.<locals>.<listcomp>Tr�rMr�)rLr�r�r�SS_UNAVAILABLEr�r r�r8r�SS_NO_UNAVAILABLE)r��unknown_packagesr�r0r0r1�list_unavailable_packages4s�

r�c	s�t�}|d}|d|d}||}t�}t|�d}|D]
\}}|�|j�qt�j}	t�}
t|��	�d}t|��
�d}tdd�|D���tdd�|D���t��fdd�|D��}
t|dd	d
�|
sut
|	�rnt�ttj�dS|tjkr�t�td�tdd||t|�t|�d
d�ttjjdd��td�t
|	�s�r�ttjjdd��t���r�ttjjdd��t���pˆ}|
r�|r�tjjdd�}ntjjdd�}t|�t|
�|r�ttjjt|�d��dSdSdS)Nr!r�r�rcSr�r0r�r=r0r0r1r@`r�z+list_esm_infra_packages.<locals>.<listcomp>cSr�r0r�r=r0r0r1r@cr�c�&g|]}|j�vr|j�vr|j�qSr0r�r=��available_package_names�installed_package_namesr0r1r@f�

�Tr�rMr�Fr�r�r�) rL�setrn�addr�rr7rrrsr��sortedr�rr�r�rr�rr�r�r�rR�SS_SERVICE_HELPr8�SS_UPDATES_AVAILABLEr �SS_UPDATES_INSTALLED�SS_FURTHER_OTHER_PACKAGES�SS_OTHER_PACKAGESr�r)ror��infra_packages�mr_packages�all_infra_packages�
infra_updates�security_upgradable_versions�updater[r7r�r�r��remaining_package_names�	hint_list�msgr0r�r1�list_esm_infra_packagesIs��
�����	�

�	��rc	s�t�}|d}|d|d}||}t�}t|�d}|D]
\}}|�|j�qt�}	t|���d}
t|���d}t	dd�|D���t	dd�|D���t	��fdd�|D��}t
|dd	d
�|	sjttj
�dStdd|
|t|�t|�dd
�ttjjdd��td�|rԈr�ttjjdd��t���r�ttjjdd��t���p��}
|r�|
r�tjjdd�}ntjjdd�}t|�t|�|
r�ttjjt|
�d��dSdSdS)Nr"r�r�rcSr�r0r�r=r0r0r1r@�r�z*list_esm_apps_packages.<locals>.<listcomp>cSr�r0r�r=r0r0r1r@�r�cr�r0r�r=r�r0r1r@�r�Tr�r�Fr�r�rMr�)rLrrnrr�rrrsr�rr�r�rr�r�rRrr8rr rrrr�r)ror��
apps_packages�um_packages�all_apps_packages�apps_updatesrr
r[r�r�r�rrrr0r�r1�list_esm_apps_packages�s|������	�
�	��r)rAF)I�collectionsrrr�enumr�	functoolsr�randomr�typingrr	r
rrrD�uaclientr
r�5uaclient.api.u.pro.security.status.reboot_required.v1r�(uaclient.api.u.pro.status.is_attached.v1r�uaclient.aptrrrr�uaclient.configr�uaclient.entitlementsrr�(uaclient.entitlements.entitlement_statusrrr�uaclient.systemrrrrr�
uaclient.utilr rWr#r9�PackagerLrEr;rFrd�Versionrnrwr�r�r��boolr�r�r��intr�r�r�r�r�rrr0r0r0r1�<module>s�
���
�%�
�@!�
�
�4����
�?	������
�2LX