Ë
    x[hÀ9  ã                   óD  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZ  e j"                  e«      Zej(                  Zej*                  Zej,                  ZdZd	d
gZddgZdgZd	ZdZdZg d¢ZdZdgZ d„ Z!d„ Z"dd„Z# G d„ d«      Z$d„ Z%efd„Z&y)é    N)ÚMIMEBase)ÚMIMEMultipart)ÚMIMENonMultipart)ÚMIMEText)ÚfeaturesÚhandlersÚutil)ÚUrlErrorÚread_file_or_urlzContent-Typez
text/plainztext/x-not-multipartztext/x-include-urlztext/x-include-once-urlztext/cloud-config-archiveztext/cloud-configzapplication/octet-stream)zapplication/gzipzapplication/gzip-compressedzapplication/gzippedzapplication/x-compresszapplication/x-compressedzapplication/x-gunzipzapplication/x-gzipzapplication/x-gzip-compressedzNumber-Attachmentsc                 ó   — | |= || |<   y ©N© )ÚmsgÚkeyÚvalues      ú5/usr/lib/python3/dist-packages/cloudinit/user_data.pyÚ_replace_headerr   ;   s   € ØˆCˆØ€Cˆ‚Hó    c                 óD   — | d= | j                  ddt        |«      ¬«       y )NzContent-DispositionÚ
attachment)Úfilename)Ú
add_headerÚstr)r   r   s     r   Ú_set_filenamer   @   s"   € ØÐ!Ð"Ø‡N�NÐ(¨,ÄÀXÃ€NÕOr   c                 óf   — t         j                  rt        | «      |‚t        j	                  | «       y r   )r   ÚERROR_ON_USER_DATA_FAILUREÚRuntimeErrorÚLOGÚwarning)Úerror_messageÚsource_exceptions     r   Ú_handle_errorr"   E   s%   € Ü×*Ò*Ü˜=Ó)Ð/?Ð?ä�‰�MÕ"r   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„Zd„ Zy	)ÚUserDataProcessorc                 óF   — || _         t        j                  |«      | _        y r   )Úpathsr	   Úfetch_ssl_detailsÚssl_details)Úselfr&   s     r   Ú__init__zUserDataProcessor.__init__M   s   € ØˆŒ
Ü×1Ñ1°%Ó8ˆÕr   c                 ó¸   — t        «       }t        |t        «      r$|D ]  }| j                  t	        |«      |«       Œ |S | j                  t	        |«      |«       |S r   )r   Ú
isinstanceÚlistÚ_process_msgÚconvert_string)r)   ÚblobÚaccumulating_msgÚbs       r   ÚprocesszUserDataProcessor.processQ   sa   € Ü(›?ÐÜ�dœDÔ!Øò G�Ø×!Ñ!¤.°Ó"3Ð5EÕFðGð  Ðð ×Ñœn¨TÓ2Ð4DÔEØÐr   c           
      ó¨  — d„ }|j                  «       D �]r  }t        |«      rŒd }|j                  «       }t        j                  |«      }d}|t
        v r	 t        j                  |d¬«      }d }d}|st        }|t        dgz   v r ||«      }|€|}|rƒ|j                  dd«      \  }}t        ||«      }|j                  |«       |j!                  «       rt#        ||j!                  «       «       d	D ]   }||v sŒt%        ||t'        ||   «      «       Œ" |}||k7  rt%        |t(        |«       |t*        v r| j-                  ||«       �Œ4|t.        v r| j1                  ||«       �ŒPt%        |t(        |«       | j3                  ||«       �Œu y # t        j                  $ r3}	dj                  |t        |«      |	«      }
t        |
|	«       Y d }	~	�Œ¸d }	~	ww xY w)
Nc                 ó,   — t        j                  | «      S r   )r   Útype_from_starts_with)Úpayloads    r   Ú
find_ctypez2UserDataProcessor._process_msg.<locals>.find_ctype[   s   € Ü×1Ñ1°'Ó:Ð:r   F)ÚquietTz<Failed decompressing payload from {} of length {} due to: {}ztext/x-shellscriptú/é   )úLaunch-Index)ÚwalkÚis_skippableÚget_content_typer	   Úfully_decoded_payloadÚDECOMP_TYPESÚdecomp_gzipÚDecompressionErrorÚformatÚlenr"   Ú
UNDEF_TYPEÚTYPE_NEEDEDÚsplitr   Úset_payloadÚget_filenamer   r   r   ÚCONTENT_TYPEÚINCLUDE_TYPESÚ_do_includeÚARCHIVE_TYPESÚ_explode_archiveÚ_attach_part)r)   Úbase_msgÚ
append_msgr8   ÚpartÚctypeÚ
ctype_origr7   Úwas_compressedÚer    ÚmaintypeÚsubtypeÚn_partÚhs                  r   r.   zUserDataProcessor._process_msgZ   sè  € ò	;ð —M‘M“Oó J	0ˆDÜ˜DÔ!ØàˆEØ×.Ñ.Ó0ˆJÜ×0Ñ0°Ó6ˆGØ"ˆNð
 œ\Ñ)ðÜ"×.Ñ.¨w¸eÔD�Gð "&�JØ%)�Nñ Ü'�
ð œ[Ð,@Ð+AÑAÑAÙ" 7Ó+�Øˆ}Ø"�ñ Ø$)§K¡K°°QÓ$7Ñ!�˜'Ü)¨(°GÓ<�Ø×"Ñ" 7Ô+ð ×$Ñ$Ô&Ü! &¨$×*;Ñ*;Ó*=Ô>Ø*ò A�AØ˜D’yÜ'¨°´3°t¸A±w³<Õ@ðAð �à˜
Ò"Ü ¤l°EÔ:àœÑ%Ø× Ñ  ¨*Ô5ÙàœÑ%Ø×%Ñ% g¨zÔ:Ùô ˜H¤l°EÔ:Ø×Ñ˜j¨$Ö/ñUJ	0øô& ×.Ñ.ò ð0ß06±Ø&¬¨G«°aó1ð "ô " -°Ô3Ýûðús   ÁFÆGÆ(GÇGc                 ór  — |j                  dd «      }d }|j                  «       t        v r9	 t        j                  |j                  d¬«      «      }|r|j                  d«      }|�|}|€|}|�&	 |j                  dt        t        |«      «      «       y y # t        $ r Y Œ<w xY w# t        t        f$ r Y y w xY w)Nr<   T©Údecodeúlaunch-index)Úgetr?   ÚEXAMINE_FOR_LAUNCH_INDEXr	   Ú	load_yamlÚget_payloadÚ	Exceptionr   r   ÚintÚ
ValueErrorÚ	TypeError)r)   r   Ú
header_idxÚpayload_idxr7   s        r   Ú_attach_launch_indexz&UserDataProcessor._attach_launch_indexª   sÆ   € Ø—W‘W˜^¨TÓ2ˆ
ØˆØ×ÑÓ!Ô%=Ñ=ðô Ÿ.™.¨¯©À¨Ó)EÓF�ÙØ")§+¡+¨nÓ"=�Kð Ð!Ø$ˆKàÐØ$ˆKØÐ"ðØ—‘˜~¬s´3°{Ó3CÓ/DÕEð #øô ò Ùðûô ¤	Ð*ò Ùðús#   ¬8B Á/$B$ Â	B!Â B!Â$B6Â5B6c                 ó¤   — t        j                  |dd«      }t        j                  j	                  | j
                  j                  d«      d|«      S )NÚmd5é@   ÚdataÚurlcache)r	   Ú	hash_blobÚosÚpathÚjoinr&   Úget_ipath_cur)r)   ÚentryÚentry_fns      r   Ú_get_include_once_filenamez,UserDataProcessor._get_include_once_filenameÂ   s?   € Ü—>‘> %¨°Ó3ˆÜ�w‰w�|‰|Ø�J‰J×$Ñ$ VÓ,¨j¸(ó
ð 	
r   c                 ól   — |j                  «       st        |t        |z  «       | j                  |«       y r   )rJ   r   ÚPART_FN_TPLrj   )r)   r   Úattached_ids      r   Ú_process_before_attachz(UserDataProcessor._process_before_attachÈ   s+   € Ø×ÑÔ!Ü˜#œ{¨kÑ:Ô;Ø×!Ñ! #Õ&r   c                 óH  — d}|j                  «       D �]˜  }|j                  «       }|j                  d«      r|t        d«      d  j	                  «       }d}n/|j                  d«      r|t        d«      d  j	                  «       }d}|j                  d«      rŒ…|j                  «       }|sŒ˜d }d }|r| j                  |«      }|r5t        j                  j                  |«      rt        j                  |«      }n’	 t        |dd| j                  ¬«      }|r2|j                  «       r"t        j                  ||j                   d	¬
«       |j                  «       r|j                   }n'dj#                  ||j$                  «      }	t'        |	«       |€�Œ|t/        |«      }| j1                  ||«       �Œ› y # t(        $ r9}
t+        |
«      }||vr|dj#                  |«      z  }t'        ||
«       Y d }
~
Œbd }
~
wt,        $ r(}dj#                  ||«      }	t'        |	|«       Y d }~Œ‘d }~ww xY w)NFz#include-onceTz#includeú#é   é
   )ÚtimeoutÚretriesr(   i€  )Úmodez6Fetching from {} resulted in a invalid http code of {}z for url: {0}zFetching from {} resulted in {})Ú
splitlinesÚlowerÚ
startswithrE   ÚlstripÚstriprw   rq   rr   Úisfiler	   Úload_text_filer   r(   ÚokÚ
write_fileÚcontentsrD   Úcoder"   r
   r   ÚIOErrorr/   r.   )r)   ÚcontentrR   Úinclude_once_onÚlineÚlc_lineÚinclude_urlÚinclude_once_fnÚrespr    ÚurleÚmessageÚioeÚnew_msgs                 r   rM   zUserDataProcessor._do_includeÍ   s  € ð  ˆØ×&Ñ&Ó(ó >	7ˆDØ—j‘j“lˆGØ×!Ñ! /Ô2ØœC Ó0Ð2Ð3×:Ñ:Ó<�ð #'‘Ø×#Ñ# JÔ/ØœC 
›OÐ-Ð.×5Ñ5Ó7�ð #(�Ø�‰˜sÔ#ØØŸ*™*›,ˆKÙØà"ˆOØˆGÙØ"&×"AÑ"AÀ+Ó"N�Ù¤2§7¡7§>¡>°/Ô#BÜ×-Ñ-¨oÓ>‘ð 6Ü+Ø#Ø !Ø "Ø$(×$4Ñ$4ô	�Dñ '¨4¯7©7¬9ÜŸ™Ø+¨T¯]©]Àõð —w‘w”yØ"&§-¡-™ð9ß9?¹Ø +¨T¯Y©Yó:ð &ô & mÔ4ð Ò"Ü(¨Ó1�Ø×!Ñ! '¨:Ö6ñ}>	7øô^  ò 1Ü! $›i�Gð #¨'Ñ1Ø ?×#9Ñ#9¸+Ó#FÑF˜Ü! '¨4×0Ñ0ûÜò 6Ø$E×$LÑ$LØ# Só%�Mô " -°×5Ñ5ûð	6ús%   Ã:BF0Æ0	H!Æ9/G-Ç-H!Ç9HÈH!c                 óŒ  — t        j                  |g t        t        f¬«      }|D �]œ  }t	        |t
        «      rd|i}t	        |t        «      sŒ)|j                  dd«      }|j                  d«      }|s2t        }t	        |t        «      rt        }t        j                  ||«      }|j                  dd«      \  }}	|dk(  r.t	        |t        «      r|j                  «       }t        ||	¬«      }
nt!        ||	«      }
|
j#                  |«       d	|v rt%        |
|d	   «       d
|v r|
j'                  dt        |d
   «      «       t        |j)                  «       «      D ]U  }|j+                  «       dd	dd
dt,        j+                  «       t.        j+                  «       fv rŒA|
j'                  |||   «       ŒW | j1                  ||
«       �ŒŸ y )N)ÚdefaultÚallowedr�   Ú Útyper:   r;   Útext)Ú_subtyper   r_   r<   zcontent-disposition)r	   rb   r-   Úsetr,   r   Údictr`   ÚARCHIVE_UNDEF_TYPEÚbytesÚARCHIVE_UNDEF_BINARY_TYPEr   r6   rH   r^   r   r   rI   r   r   Úkeysr„   ÚATTACHMENT_FIELDrK   rP   )r)   ÚarchiverR   ÚentriesÚentr�   Úmtyper›   rX   rY   r   Úheaders               r   rO   z"UserDataProcessor._explode_archive  s›  € Ü—.‘. °"¼tÄS¸kÔJˆØó 0	/ˆCô ˜#œsÔ#Ø  #Ð&�Ü˜c¤DÔ*àà—g‘g˜i¨Ó,ˆGØ—G‘G˜F“OˆEÙÜ,�Ü˜g¤uÔ-Ü7�GÜ ×6Ñ6°wÀÓH�à %§¡¨C°Ó 3ÑˆH�gØ˜6Ò!Ü˜g¤uÔ-Ø%Ÿn™nÓ.�GÜ˜w°Ô9‘ä˜x¨Ó1�Ø—‘ Ô(à˜SÑ Ü˜c 3 z¡?Ô3Ø Ñ$Ø—‘˜~¬s°3°~Ñ3FÓ/GÔHä˜sŸx™x›zÓ*ò 4�Ø—<‘<“>ØØØØ"Ø)Ü$×*Ñ*Ó,Ü ×&Ñ&Ó(ð&ñ ð Ø—‘˜v s¨6¡{Õ3ð4ð ×Ñ˜j¨#Ö.ña0	/r   Nc                 ó  — t         |vr	d|t         <   |�t        |t         t        |«      «       d}	 t        |j	                  t         «      «      }|S # t
        t        f$ r t        |t         t        |«      «       Y |S w xY w)z
        Return the number of attachments to this MIMEMultipart by looking
        at its 'Number-Attachments' header.
        Ú0r   )r§   r   r   re   r`   rf   rg   )r)   Ú	outer_msgÚ	new_countÚfetched_counts       r   Ú_multi_part_countz#UserDataProcessor._multi_part_countF  s…   € ô
  9Ñ,Ø*-ˆIÔ&Ñ'àÐ Ü˜IÔ'7¼¸Y»ÔHàˆð	MÜ 	§¡Ô.>Ó ?Ó@ˆMð Ðøô œIÐ&ò 	MÜ˜IÔ'7¼¸]Ó9KÕLØÐð	Mús   ±A Á)A>Á=A>c                 óœ   — | j                  |«      }| j                  ||dz   «       |j                  |«       | j                  ||dz   «       y)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)r²   r{   Úattach)r)   r¯   rS   Ú
part_counts       r   rP   zUserDataProcessor._attach_partX  sJ   € ð ×+Ñ+¨IÓ6ˆ
Ø×#Ñ# D¨*°q©.Ô9Ø×Ñ˜ÔØ×Ñ˜y¨*°q©.Õ9r   r   )Ú__name__Ú
__module__Ú__qualname__r*   r3   r.   rj   rw   r{   rM   rO   r²   rP   r   r   r   r$   r$   L   s9   „ ò9ò òN0ò`ò0
ò'ò
C7òJ2/óhó$	:r   r$   c                 óT   — | j                  «       xs d}|j                  «       dk(  ryy)Nr�   Ú	multipartTF)Úget_content_maintyper„   )rS   Úpart_maintypes     r   r>   r>   d  s,   € à×-Ñ-Ó/Ò5°2€MØ×ÑÓ Ò+ØØr   c                 ó  — | sd} d„ }t        | t        «      r| j                  d«      }n| }t        j                  |d¬«      }d|dd j                  «       v r&t        j                  |j                  d«      «      }|S  |||«      }|S )	zJconvert a string (more likely bytes) or a message into
    a mime message.r   c                 ój   — |j                  dd«      \  }}t        ||«      }|j                  | «       |S )Nr:   r;   )rH   r   rI   )rn   Úcontent_typerX   rY   r   s        r   Úcreate_binmsgz%convert_string.<locals>.create_binmsgs  s6   € Ø(×.Ñ.¨s°AÓ6Ñˆ�'Ü�x Ó)ˆØ�‰˜ÔØˆ
r   zutf-8Fr]   s   mime-version:r   i   )r,   r   Úencoder	   rB   r„   Úmessage_from_stringr^   )Úraw_datar¿   rÀ   Úbdatar   s        r   r/   r/   m  sŒ   € ñ Øˆòô �(œCÔ Ø—‘ Ó(‰àˆÜ×Ñ˜U¨5Ô1€EØ˜5  4˜=×.Ñ.Ó0Ñ0Ü×&Ñ& u§|¡|°GÓ'<Ó=ˆð €Jñ ˜E <Ó0ˆà€Jr   r   )'Úloggingrq   Úemail.mime.baser   Úemail.mime.multipartr   Úemail.mime.nonmultipartr   Úemail.mime.textr   Ú	cloudinitr   r   r	   Úcloudinit.url_helperr
   r   Ú	getLoggerr¶   r   ÚNOT_MULTIPART_TYPEry   Ú
OCTET_TYPErK   rG   rL   rN   rF   r£   r¥   rA   r§   ra   r   r   r"   r$   r>   r/   r   r   r   ú<module>rÏ      sÖ   ðó Û 	Ý $Ý .Ý 4Ý $ç .Ñ .ß ;à€g×Ñ˜Ó!€ð ×0Ñ0Ð Ø×"Ñ"€Ø× Ñ €
ð €ð Ð3Ð4€Ø%Ð'@ÐA€Ø,Ð-€Ø€
Ø(Ð Ø6Ð ò	€ð (Ð ð 0Ð0Ð òò
Pó
#÷U:ñ U:òpð +=ô r   