HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/uaclient/entitlements/__pycache__/fips.cpython-38.pyc
U

��JhHf�@s�ddlZddlZddlZddlmZddlmZmZmZddl	m
Z
mZmZm
Z
mZmZmZddlmZmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZm Z ddl!m"Z"m#Z#m$Z$e�%�Z&e�'e�(e)��Z*d
ddddgZ+ddgZ,e+e,e+e,e+d�Z-dddgZ.dddddgZ/dddddgZ0e+e,e.e+e,e/e+e0d�Z1Gdd�dej2�Z3Gdd�de3�Z4Gd d!�d!e3�Z5Gd"d#�d#e4�Z6dS)$�N)�groupby)�List�Optional�Tuple)�api�apt�event_logger�
exceptions�messages�system�util)�NoCloudTypeReason�get_cloud_type)�repo)�EntitlementWithMessage)�ApplicationStatus)�notices)�Notice)�ServicesOnceEnabledData�services_once_enabled_file)�MessagingOperations�MessagingOperationsDict�StaticAffordance�
strongswan�strongswan-hmac�openssh-client�openssh-server�shim-signed�openssh-client-hmac�openssh-server-hmac)�xenial�bionic�focal�openssl�libssl1.0.0�libssl1.0.0-hmac�	libssl1.1�libssl1.1-hmac�libgcrypt20�libgcrypt20-hmaccs�eZdZdZdZdZejZdZ	dZ
ejjZ
ddddd	d
ddd
dd
ddddddddddddddddddgZeed �d!d"��Zed#d$��Zeed%�d&d'�Zejd(�d)d*�Zed �d+d,�Zejd(�d-d.�ZdNejeeeed/d0��fd1d2�
Zed �d3d4�ZdOeed/d6�d7d8�Zeeed9��fd:d;�Z ee!e"d<fd �d=d>��Z#eeed ��fd?d@��Z$e!e%eej&fd ��fdAdB�Z'd/d �dCdD�Z(ejedE��fdFdG�Z)ejedE��fdHdI�Z*dJdK�Z+ejd/dE��fdLdM�Z,�Z-S)P�FIPSCommonEntitlementi�zubuntu-pro-fips.gpgz/proc/sys/crypto/fips_enabledTzfips-initramfszfips-initramfs-genericr(r)Zlibgmp10Zlibgnutls30Zlibhogweed6Z
libnettle8r$r%r&r'Zlibssl3�
linux-fipsrrrrr#�openssl-fips-module-3rrrzubuntu-fipszubuntu-aws-fipszubuntu-azure-fips�ubuntu-gcp-fips��returncCs6d}d}|jsNt��r8tjj|jd�}|��s>tjg}n|j	}t
jd|ifg}d}|jsz|jszt
jdtj
j|jd�ifg}|js�|jifgnd}||||d�}t|j�dk�r2|jd}t�d|�}|r�|�d�}	nd}	t��j}
|	|
k�r2|�d�p�g}tjj|	|j|	|
�pd	d
�}|�t
jd|if�||d<|S)N��title�msg)�
pre_enable�pre_install�post_enable�pre_disable�rzubuntu-([a-z]+)-fipsZgenericr3�unknown)Zvariant�serviceZbase_flavor�current_flavor)Zaccess_onlyr�is_containerr
Z PROMPT_FIPS_CONTAINER_PRE_ENABLE�formatr1�auto_upgrade_all_on_enableZFIPS_RUN_APT_UPGRADE�pre_enable_msgr�prompt_for_confirmation�purgeZPROMPT_FIPS_PRE_DISABLE�prompt_if_kernel_downgrade�len�packages�re�match�group�get_kernel_infoZflavor�getZ#KERNEL_FLAVOR_CHANGE_WARNING_PROMPT�name�append)�selfr3r5Zpre_enable_promptr6r4�	messagingZubuntu_fips_package_nameZ ubuntu_fips_package_flavor_matchZubuntu_fips_package_flavorr:r2�rM�</usr/lib/python3/dist-packages/uaclient/entitlements/fips.pyrL�s���
�����������
��

���zFIPSCommonEntitlement.messagingcCs*t��j}t��rt�|g�St�|g�S)a�
        Dictionary of conditional packages to be installed when
        enabling FIPS services. For example, if we are enabling
        FIPS services in a machine that has openssh-client installed,
        we will perform two actions:

        1. Upgrade the package to the FIPS version
        2. Install the corresponding hmac version of that package
           when available.
        )r�get_release_info�seriesr;�#FIPS_CONTAINER_CONDITIONAL_PACKAGESrH�FIPS_CONDITIONAL_PACKAGES)rKrPrMrMrN�conditional_packages�s
z*FIPSCommonEntitlement.conditional_packages)�
assume_yesr/cCs�t��j}|dkr t�d�dSt�d|�}t�d�}|dk	r�|dk	r�|�	d�}t�
d||�t�||�dkr�t�
tjj||d	��tjtj|d
�Snt�d||�dS)
ztCheck if installing a FIPS kernel will downgrade the kernel
        and prompt for confirmation if it will.
        Nz Cannot gather kernel informationFz!(?P<kernel_version>\d+\.\d+\.\d+)r+Zkernel_versionz*Kernel information: cur='%s' and fips='%s'r)Zcurrent_versionZnew_version)r2rTz2Cannot gather kernel information for '%s' and '%s'T)rrGZproc_version_signature_version�LOG�warningrD�searchrZget_pkg_candidate_versionrF�debugZversion_compare�event�infor
ZKERNEL_DOWNGRADE_WARNINGr<rr?Z
PROMPT_YES_NO)rKrTZour_full_kernel_strZour_mZfips_kernel_version_strZour_kernel_version_strrMrMrNrA�sP�
�

��������z0FIPSCommonEntitlement.prompt_if_kernel_downgrade��progresscCs�g}t��}tt|j�dd�d�}|D]\}}||kr&||7}q&|D]V}z tj|gddidddgd	�WqDtjk
r�|�d
t	j
j|j|d��YqDXqDdS)NcSs|�dd�S)Nz-hmac�)�replace)�pkg_namerMrMrN�<lambda>#�zNFIPSCommonEntitlement.hardcoded_install_conditional_packages.<locals>.<lambda>)�key�DEBIAN_FRONTEND�noninteractive�--allow-downgrades�$-o Dpkg::Options::="--force-confdef"�$-o Dpkg::Options::="--force-confold"�rCZoverride_env_varsZapt_optionsrZ)r9�pkg)
r�get_installed_packages_namesr�sortedrS�run_apt_install_commandr	�UbuntuProError�emitr
ZFIPS_PACKAGE_NOT_AVAILABLEr<r1)rKr\Zdesired_packages�installed_packagesZ
pkg_groupsr_Zpkg_listrirMrMrN�&hardcoded_install_conditional_packagess6�
��
	��z<FIPSCommonEntitlement.hardcoded_install_conditional_packagescCs*tj|jjdd�}t��jdk}|p(|S)Nzfeatures.fips_auto_upgrade_all�ZconfigZ
path_to_value>r!r r")r�is_config_value_true�cfgrrOrP)rKZinstall_all_updates_overrideZhardcoded_releaserMrMrNr==s�z0FIPSCommonEntitlement.auto_upgrade_all_on_enablecCs�dd�t�|j�D�}t��jdkr.|�d�|��t|�dkr�zD|�	dt
jjd�
|�d��|�|�tj|d	d
iddd
gd�Wn$tjk
r�|�	dt
j�YnXdS)NcSsg|]
}|j�qSrM)rI)�.0�packagerMrMrN�
<listcomp>Ls�zMFIPSCommonEntitlement.install_all_available_fips_upgrades.<locals>.<listcomp>Zjammyr,rrZ� )rCrcrdrerfrgrh)rZ;get_installed_packages_with_uninstalled_candidate_in_origin�originrrOrPrJ�sortrBrnr
ZINSTALLING_PACKAGESr<�join�unhold_packagesrlr	rmZFIPS_PACKAGES_UPGRADE_FAILURE)rKr\Z
to_upgraderMrMrN�#install_all_available_fips_upgradesIs6��
��
��
	z9FIPSCommonEntitlement.install_all_available_fips_upgradesN)r\�package_list�cleanup_on_failurer/csh|j}|rt�j||d�n|�tjj|jd��|��rF|�	|�n
|�
|�|��rdt�
tj�dS)z�Install contract recommended packages for the entitlement.

        :param package_list: Optional package list to use instead of
            self.packages.
        :param cleanup_on_failure: Cleanup apt files if apt install fails.
        )r}r0N)rC�super�install_packagesr\r
ZINSTALLING_SERVICE_PACKAGESr<r1r=r|rp�_check_for_rebootr�addr�FIPS_SYSTEM_REBOOT_REQUIRED)rKr\r}r~Zmandatory_packages��	__class__rMrNr�ms ��
�z&FIPSCommonEntitlement.install_packagescCst��S)z=Check if system needs to be rebooted because of this service.)r�
should_reboot�rKrMrMrNr��sz'FIPSCommonEntitlement._check_for_rebootF)�	operation�silentr/cCsF|��}t�|�|rB|s.t�tjj|d��|dkrBt�t	j
�dS)z�Check if user should be alerted that a reboot must be performed.

        @param operation: The operation being executed.
        @param silent: Boolean set True to silence print/log of messages
        )r�zdisable operationN)r�rYZneeds_rebootrZr
ZENABLE_REBOOT_REQUIRED_TMPLr<rr�r�FIPS_DISABLE_REBOOT_REQUIRED)rKr�r�Zreboot_requiredrMrMrN�_check_for_reboot_msg�s
���z+FIPSCommonEntitlement._check_for_reboot_msg�rP�cloud_idr/cs>|dkr:tj|jjdd�rdS|dkr*dStdt�jk�SdS)aVReturn False when FIPS is allowed on this cloud and series.

        On Xenial GCP there will be no cloud-optimized kernel so
        block default ubuntu-fips enable. This can be overridden in
        config with features.allow_xenial_fips_on_cloud.

        GCP doesn't yet have a cloud-optimized kernel or metapackage so
        block enable of fips if the contract does not specify ubuntu-gcp-fips.
        This also can be overridden in config with
        features.allow_default_fips_metapackage_on_gcp.

        :return: False when this cloud, series or config override allows FIPS.
        �gcez.features.allow_default_fips_metapackage_on_gcprqT)r!r"r-)rrrrs�boolrrC�rKrPr�r�rMrN�_allow_fips_on_cloud_instance�s�z3FIPSCommonEntitlement._allow_fips_on_cloud_instance.cs^dddd�}t�\�}�dkr"d�t��j�tjj���|���d�}|���fdd�d	ffS)
Nzan AWSzan Azureza GCP)ZawsZazurer�r])rPZcloudcs�����S�N)r�rM�r�rKrPrMrNr`�raz:FIPSCommonEntitlement.static_affordances.<locals>.<lambda>T)	rrrOrPr
ZFIPS_BLOCK_ON_CLOUDr<r1rH)rKZcloud_titles�_Zblocked_messagerMr�rN�static_affordances�s

���z(FIPSCommonEntitlement.static_affordancescst��rgSt�jSr�)rr;rrCr�r�rMrNrC�szFIPSCommonEntitlement.packagescst���\}}t��r2t��s2t�tj�||fSt	j
�|j�r�t�t
|j��s\t�tj�t�|j���dkr�t�tj�||fSt�tj�tjtjj|jd�fS|tjkr�||fSt��}g}|jD]}||kr�|�|�q�|�rtjtjjd�|�|jd�fStjtj fS)N�1)�	file_namerw)rCr9)!r�application_statusrr;r�r�removerr��os�path�exists�FIPS_PROC_FILE�setrCZ	load_file�stripZFIPS_MANUAL_DISABLE_URLr�r�DISABLEDr
ZFIPS_PROC_FILE_ERRORr<ZENABLEDrrjrJZWARNINGZFIPS_PACKAGES_NOT_INSTALLEDrzrI�FIPS_REBOOT_REQUIRED)rKZsuper_statusZ	super_msgroZmissingrur�rMrNr��sR������

���z(FIPSCommonEntitlement.application_statuscCsPtt���}t|j��t|j��}|�|�}|rLt�t|�t	j
j|jd��dS)z�Remove fips meta package to disable the service.

        FIPS meta-package will unset grub config options which will deactivate
        FIPS on any related packages.
        r0N)
r�rrjrC�
differencerS�intersection�remove_packages�listr
ZDISABLE_FAILED_TMPLr<r1)rKroZfips_metapackager�rMrMrNr� s
�
�z%FIPSCommonEntitlement.remove_packages�r\r/cs8t��|�r4t�tj�t�tj�t�tj�dSdS�NTF)r�_perform_enablerr�rZWRONG_FIPS_METAPACKAGE_ON_CLOUDr�r��rKr\r�rMrNr�1s�z%FIPSCommonEntitlement._perform_enablecs(t��|�r$|��r t�tj�dSdSr�)r�_perform_disabler�rr�rr�r�r�rMrNr�<s�z&FIPSCommonEntitlement._perform_disablecCsxddg}t�|tjjd�|�d��}g}|��D]}||kr0|�|�q0|rtddg|}t�|tjjd�|�d��}dS)Nzapt-markZ	showholdsrw)ZcommandZunhold)rZrun_apt_commandr
ZEXECUTING_COMMAND_FAILEDr<rz�
splitlinesrJ)rKZ
package_names�cmdZholdsZunholdsZholdZ
unhold_cmdrMrMrNr{Fs"���z%FIPSCommonEntitlement.unhold_packagescs|�|j�t��|�dS)z�Setup apt config based on the resourceToken and directives.

        FIPS-specifically handle apt-mark unhold

        :raise UbuntuProError: on failure to setup any aspect of this apt
           configuration
        N)r{�fips_pro_package_holdsr�setup_apt_configr�r�rMrNr�Ysz&FIPSCommonEntitlement.setup_apt_config)NT)F).�__name__�
__module__�__qualname__Zrepo_pin_priority�
repo_key_filer�r
�PROMPT_FIPS_PRE_ENABLEr>Zsupports_access_onlyZapt_noninteractiveZurlsZFIPS_HOME_PAGEZhelp_doc_urlr��propertyrrLrSr�rAr�ProgressWrapperrpr=r|rr�strr�r�r�r�rrr�rCrZNamedMessager�r�r�r�r{r��
__classcell__rMrMr�rNr*Vs�� T
/�#
�'�
�&����;
r*cs~eZdZdZejZejZej	Z
dZejZ
eeedfd�dd��Zeeedfd��fdd��Zejed	��fd
d�Z�ZS)�FIPSEntitlement�fipsZ
UbuntuFIPS.r.cCs:ddlm}ddlm}t|tj�tttj�t|tj	�fS)Nr)�LivepatchEntitlement��RealtimeKernelEntitlement)
Zuaclient.entitlements.livepatchr��uaclient.entitlements.realtimer�rr
ZLIVEPATCH_INVALIDATES_FIPS�FIPSUpdatesEntitlementZFIPS_UPDATES_INVALIDATES_FIPSZREALTIME_FIPS_INCOMPATIBLE)rKr�r�rMrMrN�incompatible_servicesms����z%FIPSEntitlement.incompatible_servicescs�t�j}t|jd�}tj}t|��d|k��t�	�}|r@|j
nd�|tjj
|j|jd��fdd�dftjj
|j|jd��fdd�dffS)N)rsrF)r��fips_updatescs�Sr�rMrM)�is_fips_updates_enabledrMrNr`�raz4FIPSEntitlement.static_affordances.<locals>.<lambda>cs�Sr�rMrM)�fips_updates_once_enabledrMrNr`�ra)rr�r�rsrr�r�r�r�readr�r
Z$FIPS_ERROR_WHEN_FIPS_UPDATES_ENABLEDr<r1Z)FIPS_ERROR_WHEN_FIPS_UPDATES_ONCE_ENABLED)rKr�r�Zdisabled_statusZservices_once_enabled_objr�)r�r�rNr�~s6����
��
��z"FIPSEntitlement.static_affordancesr�csRt�\}}|dkr2|tjkr2t�d�t�tj�t	��
|�rNt�t
j�dSdS)Nz>Could not determine cloud, defaulting to generic FIPS package.TF)rr
ZCLOUD_ID_ERRORrUrVrYrZr
Z.FIPS_COULD_NOT_DETERMINE_CLOUD_DEFAULT_PACKAGErr�rr�rZFIPS_INSTALL_OUT_OF_DATE)rKr\Z
cloud_type�errorr�rMrNr��s
��zFIPSEntitlement._perform_enable)r�r�r�rIr
Z
FIPS_TITLEr1ZFIPS_DESCRIPTION�descriptionZFIPS_HELP_TEXT�	help_textrxr�r>r�rrr�rr�rr�r�r�r�rMrMr�rNr�es!r�cs`eZdZdZejZdZejZ	ej
ZejZ
eeedfd�dd��Zejed��fdd	�Z�ZS)
r�zfips-updatesZUbuntuFIPSUpdates.r.cCs$ddlm}tttj�t|tj�fS)Nrr�)r�r�rr�r
�FIPS_INVALIDATES_FIPS_UPDATESZ"REALTIME_FIPS_UPDATES_INCOMPATIBLE)rKr�rMrMrNr��s���z,FIPSUpdatesEntitlement.incompatible_servicesr�cs&t�j|d�r"t�tdd��dSdS)Nr[T)r�F)rr�r�writerr�r�rMrNr��s�z&FIPSUpdatesEntitlement._perform_enable)r�r�r�rIr
ZFIPS_UPDATES_TITLEr1rxZFIPS_UPDATES_DESCRIPTIONr�ZFIPS_UPDATES_HELP_TEXTr�ZPROMPT_FIPS_UPDATES_PRE_ENABLEr>r�rrr�rr�r�r�r�rMrMr�rNr��s
r�csdeZdZdZejZejZej	Z
dZejZ
dZeeedfd��fdd��Zeeed�d	d
�Z�ZS)�FIPSPreviewEntitlementzfips-previewZUbuntuFIPSPreviewzubuntu-pro-fips-preview.gpg.r.cst�jtttj�fSr�)rr�rr�r
r�r�r�rMrNr��s��z,FIPSPreviewEntitlement.incompatible_servicesr�cCsdS)NTrMr�rMrMrNr��sz4FIPSPreviewEntitlement._allow_fips_on_cloud_instance)r�r�r�rIr
ZFIPS_PREVIEW_TITLEr1ZFIPS_PREVIEW_DESCRIPTIONr�ZFIPS_PREVIEW_HELP_TEXTr�rxZPROMPT_FIPS_PREVIEW_PRE_ENABLEr>r�r�rrr�r�r�r�r�rMrMr�rNr��s�r�)7Zloggingr�rD�	itertoolsr�typingrrrZuaclientrrrr	r
rrZuaclient.clouds.identityr
rZuaclient.entitlementsrZuaclient.entitlements.baserZ(uaclient.entitlements.entitlement_statusrZuaclient.filesrZuaclient.files.noticesrZuaclient.files.state_filesrrZuaclient.typesrrrZget_event_loggerrYZ	getLoggerZreplace_top_level_logger_namer�rUZCONDITIONAL_PACKAGES_EVERYWHEREZ!CONDITIONAL_PACKAGES_OPENSSH_HMACrRZ&UBUNTU_FIPS_METAPACKAGE_DEPENDS_XENIALZ&UBUNTU_FIPS_METAPACKAGE_DEPENDS_BIONICZ%UBUNTU_FIPS_METAPACKAGE_DEPENDS_FOCALrQZRepoEntitlementr*r�r�r�rMrMrMrN�<module>s�$��������������L