Ë
    x[h­"  ã            
       óŠ  — U d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ  ej                  e«      Zddd	d
dgdœZdddddgdœdddddgdœdddddgdœdddddgdœdddddgdœdœZdD ]
  Zed   ee<   Œ dD ]
  Zed   ee<   Œ g d¢Zdeed d!gd"œZeed#<   d$„ Zd%„ Zd&„ Zd'„ Zd(„ Zd)„ Zd*ed+e
d,ed-ed.df
d/„Z y)0zCA Certs: Add ca certificates.é    N)Ú	lifecycleÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEz!/usr/local/share/ca-certificates/z#cloud-init-ca-cert-{cert_index}.crtz/etc/ca-certificates.confzupdate-ca-certificates)Úca_cert_pathÚca_cert_local_pathÚca_cert_filenameÚca_cert_configÚca_cert_update_cmdz/etc/ssl/certs/z#cloud-init-ca-cert-{cert_index}.pemz+/etc/ca-certificates/conf.d/cloud-init.confzupdate-ca-bundlez/etc/pki/ca-trust/z/usr/share/pki/ca-trust-source/z+anchors/cloud-init-ca-cert-{cert_index}.crtzupdate-ca-trustz/etc/pki/trust/z/usr/share/pki/trust/z/etc/pki/tls/certs/zrehash_ca_certificates.sh)ÚaoscÚfedoraÚrhelÚopensuseÚphoton)úopensuse-microosúopensuse-tumbleweedúopensuse-leapÚsle_hpcú	sle-microÚslesr   )Ú	almalinuxÚ
cloudlinuxr   )r   r   r   ÚalpineÚdebianr   r   r   r   r   r   r   r   r   Úubuntur   Úcc_ca_certsÚca_certsúca-certs)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetac                 óŒ   — t         j                  | t        «      }t        j                  j                  |d   |d   «      |d<   |S )z²Return a distro-specific ca_certs config dictionary

    @param distro_name: String providing the distro class name.
    @returns: Dict of distro configurations for ca_cert.
    r   r   Úca_cert_full_path)ÚDISTRO_OVERRIDESÚgetÚDEFAULT_CONFIGÚosÚpathÚjoin)Údistro_nameÚcfgs     ú>/usr/lib/python3/dist-packages/cloudinit/config/cc_ca_certs.pyÚ_distro_ca_certs_configsr2   j   sF   € ô ×
Ñ
˜{¬NÓ
;€CÜ!Ÿw™wŸ|™|ØÐ Ñ! 3Ð'9Ñ#:ó €CÐÑð €Jó    c                 ó8   — t        j                   | d   d¬«       y)zŽ
    Updates the CA certificate cache on the current machine.

    @param distro_cfg: A hash providing _distro_ca_certs_configs function.
    r   F)ÚcaptureN)r   ©Ú
distro_cfgs    r1   Úupdate_ca_certsr8   w   s   € ô 	‡I�IˆjÐ-Ñ.¸Ö>r3   c                 ó¢   — |syt        |d«      D ]=  \  }}t        |«      }| d   j                  |¬«      }t        j                  ||d¬«       Œ? y)a-  
    Adds certificates to the system. To actually apply the new certificates
    you must also call the appropriate distro-specific utility such as
    L{update_ca_certs}.

    @param distro_cfg: A hash providing _distro_ca_certs_configs function.
    @param certs: A list of certificate strings.
    Né   r(   )Ú
cert_indexi¤  )Úmode)Ú	enumerateÚstrÚformatr   Ú
write_file)r7   Úcertsr;   ÚcÚcert_file_contentsÚcert_file_names         r1   Úadd_ca_certsrE   €   sb   € ñ Øä" 5¨!Ó,ò H‰ˆ
�Aä  ›VÐØ#Ð$7Ñ8×?Ñ?Ø!ð @ó 
ˆô 	�‰˜Ð(:ÀÖGñHr3   c                 ó€   — | dv rt        |«       y| dv r*t        |«       | dv rd}t        j                  d|¬«       yyy)a.  
    Disables all default trusted CA certificates. For Alpine, Debian and
    Ubuntu to actually apply the changes you must also call
    L{update_ca_certs}.

    @param distro_name: String providing the distro class name.
    @param distro_cfg: A hash providing _distro_ca_certs_configs function.
    )r   r   )r   r   r   r   )r   r   z8ca-certificates ca-certificates/trust_new_crts select no)zdebconf-set-selectionsú-)ÚdataN)Úremove_default_ca_certsÚdisable_system_ca_certsr   )r/   r7   Údebconf_sels      r1   Údisable_default_ca_certsrL   •   sR   € ð Ð(Ñ(Ü 
Õ+Ø	Ð>Ñ	>Ü 
Ô+àÐ.Ñ.àOð ô �I‰IÐ5¸KÖHð	 /ð 
?r3   c                 ó  — | d   }|rt         j                  j                  |«      syd}d}t        j                  |«      j                  r·t        j                  |«      }g }|j                  «       D ]b  }||k(  rd}|j                  |«       Œ|dk(  s|d   dv r|j                  |«       Œ:|s|j                  |«       d}|j                  d	|z   «       Œd t        j                  |d
j                  |«      d
z   d¬«       yy)z¸
    For every entry in the CA_CERT_CONFIG file prefix the entry with a "!"
    in order to disable it.

    @param distro_cfg: A hash providing _distro_ca_certs_configs function.
    r   Nz;# Modified by cloud-init to deselect certs due to user-dataFTÚ r   )ú#ú!rP   ú
Úwb)Úomode)r,   r-   ÚexistsÚstatÚst_sizer   Úload_text_fileÚ
splitlinesÚappendr@   r.   )r7   Úca_cert_cfg_fnÚheader_commentÚadded_headerÚorigÚ	out_linesÚlines          r1   rJ   rJ   ª   sþ   € ð  Ð 0Ñ1€Ná¤§¡§¡°Ô!?Øð 	Fð ð €Lä	‡w�wˆ~Ó×&Ò&Ü×"Ñ" >Ó2ˆØˆ	Ø—O‘OÓ%ò 
	-ˆDØ�~Ò%Ø#�Ø× Ñ  Õ&Ø˜’˜t A™w¨*Ñ4Ø× Ñ  Õ&á#Ø×$Ñ$ ^Ô4Ø#'�LØ× Ñ   t¡Õ,ð
	-ô 	�‰Ø˜DŸI™I iÓ0°4Ñ7¸tö	
ð 'r3   c                 óš   — | d   €yt         j                  d«       t        j                  | d   «       t        j                  | d   «       y)z’
    Removes all default trusted CA certificates from the system.

    @param distro_cfg: A hash providing _distro_ca_certs_configs function.
    r
   NzDeleting system CA certificatesr   )ÚLOGÚdebugr   Údelete_dir_contentsr6   s    r1   rI   rI   Ñ   sF   € ð �.Ñ!Ð)Øä‡I�IÐ/Ô0Ü×Ñ˜Z¨Ñ7Ô8Ü×Ñ˜ZÐ(<Ñ=Õ>r3   Únamer0   ÚcloudÚargsÚreturnc                 óâ  — d|v rt        j                  ddd¬«       nd|vrt        j                  d| «       yd|v rd|v rt        j	                  d	«       |j                  d|j                  d«      «      }t        |j                  j                  «      }d
|v rt        j                  ddd¬«       |j                  d|j                  d
d«      «      r5t        j                  d«       t        |j                  j                  |«       d|v rCt        j                  |d«      }|r+t        j                  dt        |«      «       t        ||«       t        j                  d«       t        |«       y)au  
    Call to handle ca_cert sections in cloud-config file.

    @param name: The module name "ca_cert" from cloud.cfg
    @param cfg: A nested dict containing the entire cloud config contents.
    @param cloud: The L{CloudInit} object in use.
    @param log: Pre-initialized Python logger object to use for logging.
    @param args: Any module arguments from cloud.cfg
    r!   zKey 'ca-certs'z22.1zUse 'ca_certs' instead.)Ú
deprecatedÚdeprecated_versionÚextra_messager    z<Skipping module named %s, no 'ca_certs' key in configurationNzMFound both ca-certs (deprecated) and ca_certs config keys. Ignoring ca-certs.zremove-defaultszKey 'remove-defaults'zUse 'remove_defaults' instead.Úremove_defaultsFz'Disabling/removing default certificatesÚtrustedzAdding %d certificateszUpdating certificates)r   Ú	deprecatera   rb   Úwarningr*   r2   Údistrord   rL   r   Úget_cfg_option_listÚlenrE   r8   )rd   r0   re   rf   Úca_cert_cfgr7   Útrusted_certss          r1   Úhandleru   ß   sJ  € ð �SÑÜ×ÑØ'Ø%Ø3ö	
ð
 
˜3Ñ	Ü�	‰	ØJØô	
ð 	à�SÑ˜Z¨3Ñ.Ü�‰ð"ô	
ð —'‘'˜* c§g¡g¨jÓ&9Ó:€KÜ)¨%¯,©,×*;Ñ*;Ó<€Jð ˜KÑ'Ü×ÑØ.Ø%Ø:õ	
ð
 ‡�Ø˜;Ÿ?™?Ð+<¸eÓDôô 	�	‰	Ð;Ô<Ü  §¡×!2Ñ!2°JÔ?ð �KÑÜ×0Ñ0°¸iÓHˆÙÜ�I‰IÐ.´°MÓ0BÔCÜ˜ ]Ô3ô ‡I�IÐ%Ô&Ü�JÕr3   )!Ú__doc__Úloggingr,   Ú	cloudinitr   r   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.settingsr	   Ú	getLoggerÚ__name__ra   r+   r)   rp   r#   r&   Ú__annotations__r2   r8   rE   rL   rJ   rI   r>   Úlistru   © r3   r1   ú<module>r‚      sŒ  ðò
 %ã Û 	ç +Ñ +Ý !Ý #Ý .Ý +à€g×Ñ˜Ó!€ð Ø=Ø=Ø1Ø3Ð4ñ€ð *Ø/ØAØGØ1Ð2ñð -Ø?ØIØØ0Ð1ñð -Ø?ØIØØ0Ð1ñð *Ø5ØIØØ7Ð8ñð .Ø/ØAØØ:Ð;ññ;$Ð ðLò <€Fð  0°
Ñ;Ð�VÒð<ðò 8€Fð  0°Ñ7Ð�VÒð	8ò€ð( ØØØ *¨JÐ7ñ	€€jó ò
ò?òHò*Iò*$
òN?ð6 �ð 6 ˜6ð 6 ¨%ð 6 °tð 6 Àô 6 r3   