Your IP : 216.73.216.210


Current Path : /usr/lib/python3/dist-packages/cloudinit/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/__pycache__/user_data.cpython-38.pyc

U

�Ad�9�@sddlZddlmZddlmZddlmZddlmZddl	m
Z
mZddl	mZ
ddl	mZdd	lmZmZe
�e�ZejZejZejZd
ZddgZd
dgZdgZdZdZdZddddddddgZdZ dgZ!dd�Z"dd�Z#d'dd �Z$Gd!d"�d"�Z%d#d$�Z&efd%d&�Z'dS)(�N)�MIMEBase)�
MIMEMultipart)�MIMENonMultipart)�MIMEText)�features�handlers)�log)�util)�UrlError�read_file_or_urlzContent-Typez
text/plainztext/x-not-multipartztext/x-include-urlztext/x-include-once-urlztext/cloud-config-archiveztext/cloud-configzapplication/octet-streamzapplication/gzipzapplication/gzip-compressedzapplication/gzippedzapplication/x-compresszapplication/x-compressedzapplication/x-gunzipzapplication/x-gzipzapplication/x-gzip-compressedzNumber-AttachmentscCs||=|||<dS�N�)�msg�key�valuer
r
�5/usr/lib/python3/dist-packages/cloudinit/user_data.py�_replace_header<srcCs|d=|jddt|�d�dS)NzContent-DispositionZ
attachment)�filename)�
add_header�str)rrr
r
r�
_set_filenameAsrcCs tjrt|�|�n
t�|�dSr)rZERROR_ON_USER_DATA_FAILURE�	Exception�LOGZwarning)�
error_messageZsource_exceptionr
r
r�
_handle_errorFsrc@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
ddd�Zdd�ZdS)�UserDataProcessorcCs||_t�|�|_dSr)�pathsr	Zfetch_ssl_details�ssl_details)�selfrr
r
r�__init__NszUserDataProcessor.__init__cCs@t�}t|t�r,|D]}|�t|�|�qn|�t|�|�|Sr)r�
isinstance�list�_process_msg�convert_string)rZblobZaccumulating_msg�br
r
r�processRs
zUserDataProcessor.processcCs�dd�}|��D�]�}t|�r qd}|��}t�|�}d}|tkr�ztj|dd�}d}d}WnHtjk
r�}	z(d�|t	|�|	�}
t
|
|	�WY�qW5d}	~	XYnX|s�t}|tdgkr�||�}|dkr�|}|�r@|�
dd	�\}}t||�}
|
�|�|���rt|
|���d
D]$}||k�rt|
|t||���q|
}||k�rVt|t|�|tk�rn|�||�q|tk�r�|�||�qt|t|�|�||�qdS)NcSs
t�|�Sr)r�type_from_starts_with)�payloadr
r
r�
find_ctype\sz2UserDataProcessor._process_msg.<locals>.find_ctypeF)�quietTz<Failed decompressing payload from {} of length {} due to: {}ztext/x-shellscript�/�)�Launch-Index)�walk�is_skippable�get_content_typer	Zfully_decoded_payload�DECOMP_TYPES�decomp_gzipZDecompressionError�format�lenr�
UNDEF_TYPE�TYPE_NEEDED�splitr�set_payload�get_filenamerrr�CONTENT_TYPE�
INCLUDE_TYPES�_do_include�
ARCHIVE_TYPES�_explode_archive�_attach_part)rZbase_msg�
append_msgr(�partZctypeZ
ctype_origr'Zwas_compressed�er�maintype�subtypeZn_part�hr
r
rr"[s`
��







zUserDataProcessor._process_msgc	Cs�|�dd�}d}|��tkrVz$t�|jdd��}|r>|�d�}Wntk
rTYnX|dk	rb|}|dkrn|}|dk	r�z|�dtt	|���Wnt
tfk
r�YnXdS)Nr,T��decode�launch-index)�getr/�EXAMINE_FOR_LAUNCH_INDEXr	�	load_yamlZget_payloadrrr�int�
ValueError�	TypeError)rrZ
header_idxZpayload_idxr'r
r
r�_attach_launch_index�s$z&UserDataProcessor._attach_launch_indexcCs&t�|dd�}tj�|j�d�d|�S)NZmd5�@�dataZurlcache)r	Z	hash_blob�os�path�joinrZ
get_ipath_cur)r�entryZentry_fnr
r
r�_get_include_once_filename�s
�z,UserDataProcessor._get_include_once_filenamecCs$|��st|t|�|�|�dSr)r8r�PART_FN_TPLrN)rrZattached_idr
r
r�_process_before_attach�sz(UserDataProcessor._process_before_attachcCs�d}|��D�]�}|��}|�d�r>|td�d���}d}n"|�d�r`|td�d���}d}|�d�rlq|��}|szqd}d}|r�|�|�}|r�tj�	|�r�t
�|�}n�zZt|dd|j
d�}|r�|��r�t
j||jd	d
�|��r�|j}nd�||j�}	t|	�Wn�tk
�rT}
z.t|
�}||k�r:|d�|�7}t||
�W5d}
~
XYn:tk
�r�}zd
�||�}	t|	|�W5d}~XYnX|dk	rt|�}
|�|
|�qdS)NFz
#include-onceTz#include�#��
)ZtimeoutZretriesri�)�modez6Fetching from {} resulted in a invalid http code of {}z
 for url: {0}zFetching from {} resulted in {})�
splitlines�lower�
startswithr3�lstrip�striprUrQrR�isfiler	Z	load_filerr�okZ
write_file�contentsr2�coderr
r�IOErrorr#r")r�contentr?Zinclude_once_on�lineZlc_lineZinclude_urlZinclude_once_fnZresprZurle�messageZioeZnew_msgr
r
rr;�sn



����
�zUserDataProcessor._do_includecCsLtj|gttfd�}|D�],}t|t�r0d|i}t|t�s<q|�dd�}|�d�}|stt}t|t	�rht
}t�||�}|�
dd�\}}	|dkr�t|t	�r�|��}t||	d�}
nt||	�}
|
�|�d	|kr�t|
|d	�d
|kr�|
�dt|d
��t|���D]:}|��dd	dd
dt��t��fk�r(q�|
�|||�q�|�||
�qdS)
N)�defaultZallowedrf��typer*r+�text)Z_subtyperrGr,zcontent-disposition)r	rJr!�setr r�dictrH�ARCHIVE_UNDEF_TYPE�bytes�ARCHIVE_UNDEF_BINARY_TYPErr&r6rFrrr7rr�keysr]�ATTACHMENT_FIELDr9r>)r�archiver?�entriesZentrfZmtyperirBrCr�headerr
r
rr=sJ







�	z"UserDataProcessor._explode_archiveNc	Cslt|krd|t<|dk	r(t|tt|��d}zt|�t��}Wn(ttfk
rft|tt|��YnX|S)z
        Return the number of attachments to this MIMEMultipart by looking
        at its 'Number-Attachments' header.
        �0Nr)rsrrrKrHrLrM)r�	outer_msgZ	new_countZ
fetched_countr
r
r�_multi_part_countGsz#UserDataProcessor._multi_part_countcCs8|�|�}|�||d�|�|�|�||d�dS)z�
        Attach a message to an outer message. outermsg must be a MIMEMultipart.
        Modifies a header in the outer message to keep track of number of
        attachments.
        r+N)ryrWZattach)rrxr@Z
part_countr
r
rr>Ys

zUserDataProcessor._attach_part)N)
�__name__�
__module__�__qualname__rr%r"rNrUrWr;r=ryr>r
r
r
rrMs	PE4
rcCs |��p
d}|��dkrdSdS)NrjZ	multipartTF)Zget_content_maintyper])r@Z
part_maintyper
r
rr.esr.cCsl|sd}dd�}t|t�r&|�d�}n|}tj|dd�}d|dd	���kr^t�|�d��}n
|||�}|S)
zJconvert a string (more likely bytes) or a message into
    a mime message.�cSs(|�dd�\}}t||�}|�|�|S)Nr*r+)r6rr7)rP�content_typerBrCrr
r
r�
create_binmsgts

z%convert_string.<locals>.create_binmsgzutf-8FrEs
mime-version:ri)r r�encoder	r1r]Zmessage_from_stringrF)�raw_datar~rZbdatarr
r
rr#ns

r#)N)(rQZemail.mime.baserZemail.mime.multipartrZemail.mime.nonmultipartrZemail.mime.textrZ	cloudinitrrrZloggingr	Zcloudinit.url_helperr
rZ	getLoggerrzrZNOT_MULTIPART_TYPErVZ
OCTET_TYPEr9r5r:r<r4rorqr0rsrIrrrrr.r#r
r
r
r�<module>sL
�