a '¡Dg­"ã @sdUdZddlZddlZddlmZmZmZddlmZddl m Z ddl m Z ddl mZe e¡Zddd d d gd œZd d dddgd œdddddgd œdddddgd œddddd gd œdd dddgd œdœZdD]Zedee<qÐdD]Zedee<qægd¢Zdeed d!gd"œZe ed#<d$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zee eedd0œd1d2„Z dS)3zCA 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.confzupdate-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.confzupdate-ca-bundlez/etc/pki/ca-trust/z/usr/share/pki/ca-trust-source/z+anchors/cloud-init-ca-cert-{cert_index}.crtzupdate-ca-trustz/etc/pki/trust/z/usr/share/pki/trust/z/etc/pki/tls/certs/zrehash_ca_certificates.sh)ÚaoscÚfedoraÚrhelÚopensuseÚphoton)úopensuse-microosúopensuse-tumbleweedú opensuse-leapÚsle_hpcú sle-microÚslesr)Ú almalinuxÚ cloudlinuxr)rrrÚalpineÚdebianrrrrrrrrrÚubunturZ cc_ca_certsÚca_certsúca-certs)ÚidÚdistrosZ frequencyZactivate_by_schema_keysÚmetacCs*t |t¡}tj |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Úcfg©r,ú@/usr/lib/python3.9/site-packages/cloudinit/config/cc_ca_certs.pyÚ_distro_ca_certs_configsjs   ÿr.cCstj|ddd�dS)zŽ Updates the CA certificate cache on the current machine. @param distro_cfg: A hash providing _distro_ca_certs_configs function. r F)ZcaptureN)r©Ú distro_cfgr,r,r-Úupdate_ca_certswsr1cCsH|sdSt|dƒD]0\}}t|ƒ}|dj|d�}tj||dd�qdS)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)r0Zcertsr3ÚcZcert_file_contentsZcert_file_namer,r,r-Ú add_ca_certs€s ÿr:cCs@|dvrt|ƒn*|dvrªs,ÿ      ÿr>cCs:|ddurdSt d¡t |d¡t |d¡dS)z’ Removes all default trusted CA certificates from the system. @param distro_cfg: A hash providing _distro_ca_certs_configs function. r NzDeleting system CA certificatesr )ÚLOGÚdebugrZdelete_dir_contentsr/r,r,r-r=Ñs   r=)Únamer+ÚcloudÚargsÚreturncCsöd|vrtjdddd�nd|vr2t d|¡dSd|vrLd|vrLt d ¡| d| d¡¡}t|jjƒ}d |vr‚tjd dd d�| d | d d¡¡r®t d¡t |jj|ƒd|vràt   |d¡}|ràt dt |ƒ¡t ||ƒt d¡t|ƒdS)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 rzKey 'ca-certs'z22.1zUse 'ca_certs' instead.)Z deprecatedZdeprecated_versionZ extra_messagerzr=r6ÚlistrSr,r,r,r-Ús|     û ûûûûûã&ü  '