ó
    x[hÀ9  ã                   óH  • S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJrJr  \ R"                  " \5      r\R(                  r\R*                  r\R,                  rSrS	S
/rSS/rS/rS	rSrSr/ SQrSrS/r S r!S r"SS jr# " S S5      r$S r%\4S jr&g)é    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                 ó   • X	 X U'   g ©N© )ÚmsgÚkeyÚvalues      Ú5/usr/lib/python3/dist-packages/cloudinit/user_data.pyÚ_replace_headerr   ;   s   € ØˆØˆ‚Hó    c                 ó>   • U S	 U R                  SS[        U5      S9  g )NzContent-DispositionÚ
attachment)Úfilename)Ú
add_headerÚstr)r   r   s     r   Ú_set_filenamer   @   s"   € ØÐ!Ð"Ø‡N�NÐ(¨,ÄÀXÃ€NÒOr   c                 óp   • [         R                  (       a  [        U 5      Ue[        R	                  U 5        g r   )r   ÚERROR_ON_USER_DATA_FAILUREÚRuntimeErrorÚLOGÚwarning)Úerror_messageÚsource_exceptions     r   Ú_handle_errorr"   E   s%   € Ü×*×*Ü˜=Ó)Ð/?Ð?ä�‰�MÕ"r   c                   óT   • \ rS rSrS rS rS rS rS rS r	S r
S	 rSS jrS rSrg
)ÚUserDataProcessoréL   c                 óF   • Xl         [        R                  " U5      U l        g r   )Úpathsr	   Úfetch_ssl_detailsÚssl_details)Úselfr'   s     r   Ú__init__ÚUserDataProcessor.__init__M   s   € ØŒ
Ü×1Ò1°%Ó8ˆÕr   c                 óÆ   • [        5       n[        U[        5      (       a&  U H  nU R                  [	        U5      U5        M      U$ U R                  [	        U5      U5        U$ r   )r   Ú
isinstanceÚlistÚ_process_msgÚconvert_string)r*   ÚblobÚaccumulating_msgÚbs       r   ÚprocessÚUserDataProcessor.processQ   s]   € Ü(›?ÐÜ�dœD×!Ñ!Û�Ø×!Ñ!¤.°Ó"3Ð5EÖFñ ð  Ðð ×Ñœn¨TÓ2Ð4DÔEØÐr   c           
      óä  • S nUR                  5        GHŽ  n[        U5      (       a  M  S nUR                  5       n[        R                  " U5      nSnU[
        ;   a   [        R                  " USS9nS nSnU(       d  [        nU[        S/-   ;   a  U" U5      nUc  UnU(       a‡  UR                  SS5      u  p¼[        X¼5      nUR                  U5        UR!                  5       (       a  [#        XÔR!                  5       5        S	 H!  nXä;   d  M
  [%        XÞ['        XN   5      5        M#     UnXV:w  a  [%        U[(        U5        U[*        ;   a  U R-                  Xr5        GMN  U[.        ;   a  U R1                  Xr5        GMl  [%        U[(        U5        U R3                  X$5        GM‘     g ! [        R                   a3  n	SR                  U[        U5      U	5      n
[        X©5         S n	A	GMÖ  S n	A	ff = f)
Nc                 ó.   • [         R                  " U 5      $ r   )r   Útype_from_starts_with)Úpayloads    r   Ú
find_ctypeÚ2UserDataProcessor._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_msgr;   ÚpartÚctypeÚ
ctype_origr:   Úwas_compressedÚer    ÚmaintypeÚsubtypeÚn_partÚhs                  r   r0   ÚUserDataProcessor._process_msgZ   sÊ  € ò	;ð —M‘M—OˆDÜ˜D×!Ñ!ÙàˆEØ×.Ñ.Ó0ˆJÜ×0Ò0°Ó6ˆGØ"ˆNð
 œ\Ó)ðÜ"×.Ò.¨w¸eÑD�Gð "&�JØ%)�Nö Ü'�
ð œ[Ð,@Ð+AÑAÓAÙ" 7Ó+�Ø‰}Ø"�ö Ø$)§K¡K°°QÓ$7Ñ!�Ü)¨(Ó<�Ø×"Ñ" 7Ô+ð ×$Ñ$×&Ñ&Ü! &×*;Ñ*;Ó*=Ô>Û*�AØ•yÜ'¨´3°t±w³<Ö@ñ +ð �àÓ"Ü ¤l°EÔ:àœÓ%Ø× Ñ  Ô5ÚàœÓ%Ø×%Ñ% gÔ:Úô ˜H¤l°EÔ:Ø×Ñ˜j×/òU $øô& ×.Ñ.ó ð0ß06±Ø&¬¨G«°aó1ð "ô " -Ô3Þûðús   ÁF(Æ(G/Æ<'G*Ç*G/c                 ó†  • UR                  SS 5      nS nUR                  5       [        ;   a<   [        R                  " UR                  SS95      nU(       a  UR                  S5      nUb  UnUc  UnUb&   UR                  S[        [        U5      5      5        g g ! [         a     N@f = f! [        [        4 a     g f = f)Nr@   T©Údecodeúlaunch-index)ÚgetrC   ÚEXAMINE_FOR_LAUNCH_INDEXr	   Ú	load_yamlÚget_payloadÚ	Exceptionr   r   ÚintÚ
ValueErrorÚ	TypeError)r*   r   Ú
header_idxÚpayload_idxr:   s        r   Ú_attach_launch_indexÚ&UserDataProcessor._attach_launch_indexª   sÆ   € Ø—W‘W˜^¨TÓ2ˆ
ØˆØ×ÑÓ!Ô%=Ó=ðô Ÿ.š.¨¯©À¨Ð)EÓF�ÞØ")§+¡+¨nÓ"=�Kð Ñ!Ø$ˆKàÑØ$ˆKØÑ"ðØ—‘˜~¬s´3°{Ó3CÓ/DÕEð #øô ó Ùðûô ¤	Ð*ó Ùðús#   ®;B Á7$B- Â
B*Â)B*Â-C Â?C c                 ó¦   • [         R                  " USS5      n[        R                  R	                  U R
                  R                  S5      SU5      $ )NÚmd5é@   ÚdataÚurlcache)r	   Ú	hash_blobÚosÚpathÚjoinr'   Úget_ipath_cur)r*   ÚentryÚentry_fns      r   Ú_get_include_once_filenameÚ,UserDataProcessor._get_include_once_filenameÂ   s?   € Ü—>’> %¨°Ó3ˆÜ�w‰w�|‰|Ø�J‰J×$Ñ$ VÓ,¨j¸(ó
ð 	
r   c                 óv   • UR                  5       (       d  [        U[        U-  5        U R                  U5        g r   )rN   r   ÚPART_FN_TPLro   )r*   r   Úattached_ids      r   Ú_process_before_attachÚ(UserDataProcessor._process_before_attachÈ   s.   € Ø×Ñ×!Ñ!Ü˜#œ{¨kÑ:Ô;Ø×!Ñ! #Õ&r   c                 ó¬  • SnUR                  5        GHÉ  nUR                  5       nUR                  S5      (       a  U[        S5      S  R	                  5       nSnO4UR                  S5      (       a  U[        S5      S  R	                  5       nSnUR                  S5      (       a  M•  UR                  5       nU(       d  M®  S nS nU(       a  U R                  U5      nU(       a;  [        R                  R                  U5      (       a  [        R                  " U5      nO› [        USSU R                  S9nU(       a4  UR                  5       (       a  [        R                  " XxR                   S	S
9  UR                  5       (       a  UR                   nO'SR#                  XhR$                  5      n	['        U	5         Uc  GM­  [/        U5      nU R1                  XÒ5        GMÌ     g ! [(         a9  n
[+        U
5      nXk;  a  USR#                  U5      -  n['        Xº5         S n
A
NfS n
A
f[,         a&  nSR#                  Xl5      n	['        Xœ5         S nAN”S nAff = f)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Ú
startswithrI   ÚlstripÚstripr}   rw   rx   Úisfiler	   Úload_text_filer   r)   ÚokÚ
write_fileÚcontentsrH   Úcoder"   r
   r   ÚIOErrorr1   r0   )r*   ÚcontentrV   Úinclude_once_onÚlineÚlc_lineÚinclude_urlÚinclude_once_fnÚrespr    ÚurleÚmessageÚioeÚnew_msgs                 r   rQ   ÚUserDataProcessor._do_includeÍ   sÿ  € ð  ˆØ×&Ñ&×(ˆDØ—j‘j“lˆGØ×!Ñ! /×2Ñ2ØœC Ó0Ð2Ð3×:Ñ:Ó<�ð #'‘Ø×#Ñ# J×/Ñ/ØœC 
›OÐ-Ð.×5Ñ5Ó7�ð #(�Ø�‰˜s×#Ñ#ÙØŸ*™*›,ˆKÞÙà"ˆOØˆGÞØ"&×"AÑ"AÀ+Ó"N�Þ¤2§7¡7§>¡>°/×#BÑ#BÜ×-Ò-¨oÓ>‘ð 6Ü+Ø#Ø !Ø "Ø$(×$4Ñ$4ñ	�Dö '¨4¯7©7¯9©9ÜŸšØ+¯]©]Àòð —w‘w—y‘yØ"&§-¡-™ð9ß9?¹Ø +¯Y©Yó:ð &ô & mÕ4ð Ô"Ü(¨Ó1�Ø×!Ñ! '×6ò} )øô^  ó 1Ü! $›i�Gð #Ó1Ø ?×#9Ñ#9¸+Ó#FÑF˜Ü! '×0Ñ0ûÜó 6Ø$E×$LÑ$LØ#ó%�Mô " -×5Ñ5ûð	6ús+   Ä A2G"Æ&G"Ç"
IÇ,/H È IÈ-IÉIc                 óÂ  • [         R                  " U/ [        [        4S9nU GH¸  n[	        U[
        5      (       a  SU0n[	        U[        5      (       d  M4  UR                  SS5      nUR                  S5      nU(       d7  [        n[	        U[        5      (       a  [        n[        R                  " XW5      nUR                  SS5      u  p‰US:X  a/  [	        U[        5      (       a  UR                  5       n[        XYS9n
O[!        X‰5      n
U
R#                  U5        S	U;   a  [%        X¤S	   5        S
U;   a  U
R'                  S[        US
   5      5        [        UR)                  5       5       HX  nUR+                  5       SS	SS
S[,        R+                  5       [.        R+                  5       4;   a  MD  U
R'                  X´U   5        MZ     U R1                  X*5        GM»     g )N)ÚdefaultÚallowedr—   Ú Útyper>   r?   Útext)Ú_subtyper   rd   r@   zcontent-disposition)r	   rg   r/   Úsetr.   r   Údictre   ÚARCHIVE_UNDEF_TYPEÚbytesÚARCHIVE_UNDEF_BINARY_TYPEr   r9   rL   rc   r   r   rM   r   r   ÚkeysrŒ   ÚATTACHMENT_FIELDrO   rT   )r*   ÚarchiverV   ÚentriesÚentr—   Úmtyper¤   r\   r]   r   Úheaders               r   rS   Ú"UserDataProcessor._explode_archive  s�  € Ü—.’. °"¼tÄS¸kÑJˆÜˆCô ˜#œs×#Ñ#Ø  #Ð&�Ü˜c¤D×*Ñ*áà—g‘g˜i¨Ó,ˆGØ—G‘G˜F“OˆEÞÜ,�Ü˜g¤u×-Ñ-Ü7�GÜ ×6Ò6°wÓH�à %§¡¨C°Ó 3ÑˆHØ˜6Ó!Ü˜g¤u×-Ñ-Ø%Ÿn™nÓ.�GÜ˜wÑ9‘ä˜xÓ1�Ø—‘ Ô(à˜SÓ Ü˜c z¡?Ô3Ø Ó$Ø—‘˜~¬s°3°~Ñ3FÓ/GÔHä˜sŸx™x›zÖ*�Ø—<‘<“>ØØØØ"Ø)Ü$×*Ñ*Ó,Ü ×&Ñ&Ó(ð&ó ñ Ø—‘˜v¨6¡{Ö3ñ +ð ×Ñ˜j×.òa r   Nc                 ó
  • [         U;  a	  SU[         '   Ub  [        U[         [        U5      5        Sn [        UR	                  [         5      5      nU$ ! [
        [        4 a    [        U[         [        U5      5         U$ f = f)zg
Return the number of attachments to this MIMEMultipart by looking
at its 'Number-Attachments' header.
Ú0r   )r°   r   r   rj   re   rk   rl   )r*   Ú	outer_msgÚ	new_countÚfetched_counts       r   Ú_multi_part_countÚ#UserDataProcessor._multi_part_countF  s…   € ô
  9Ó,Ø*-ˆIÔ&Ñ'àÑ Ü˜IÔ'7¼¸Y»ÔHàˆð	MÜ 	§¡Ô.>Ó ?Ó@ˆMð Ðøô œIÐ&ó 	MÜ˜IÔ'7¼¸]Ó9KÕLØÐð	Mús   ´A Á*BÂBc                 ó˜   • U R                  U5      nU R                  X#S-   5        UR                  U5        U R                  XS-   5        g)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¹   rW   Ú
part_counts       r   rT   ÚUserDataProcessor._attach_partX  sF   € ð ×+Ñ+¨IÓ6ˆ
Ø×#Ñ# D°q©.Ô9Ø×Ñ˜ÔØ×Ñ˜y°q©.Õ9r   )r'   r)   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   r5   r0   ro   r}   r‚   rQ   rS   r¼   rT   Ú__static_attributes__r   r   r   r$   r$   L   s9   † ò9ò òN0ò`ò0
ò'ò
C7òJ2/ôhõ$	:r   r$   c                 ó`   • U R                  5       =(       d    SnUR                  5       S:X  a  gg)Nr¦   Ú	multipartTF)Úget_content_maintyperŒ   )rW   Úpart_maintypes     r   rB   rB   d  s,   € à×-Ñ-Ó/×5°2€MØ×ÑÓ Ó+ØØr   c                 ó&  • U (       d  Sn S n[        U [        5      (       a  U R                  S5      nOU n[        R                  " USS9nSUSS R                  5       ;   a'  [        R                  " UR                  S5      5      nU$ U" X15      nU$ )	zFconvert a string (more likely bytes) or a message into
a mime message.r   c                 óf   • UR                  SS5      u  p#[        X#5      nUR                  U 5        U$ )Nr>   r?   )rL   r   rM   )rt   Úcontent_typer\   r]   r   s        r   Úcreate_binmsgÚ%convert_string.<locals>.create_binmsgs  s2   € Ø(×.Ñ.¨s°AÓ6ÑˆÜ�xÓ)ˆØ�‰˜ÔØˆ
r   zutf-8Frb   s   mime-version:r   i   )r.   r   Úencoder	   rF   rŒ   Úmessage_from_stringrc   )Úraw_datarÍ   rÎ   Úbdatar   s        r   r1   r1   m  s�   € ö Øˆòô �(œC× Ñ Ø—‘ Ó(‰àˆÜ×Ò˜U¨5Ñ1€EØ˜5  4˜=×.Ñ.Ó0Ó0Ü×&Ò& u§|¡|°GÓ'<Ó=ˆð €Jñ ˜EÓ0ˆà€Jr   r   )'Úloggingrw   Úemail.mime.baser   Úemail.mime.multipartr   Úemail.mime.nonmultipartr   Úemail.mime.textr   Ú	cloudinitr   r   r	   Úcloudinit.url_helperr
   r   Ú	getLoggerrÂ   r   ÚNOT_MULTIPART_TYPEr€   Ú
OCTET_TYPErO   rK   rP   rR   rJ   r¬   r®   rE   r°   rf   r   r   r"   r$   rB   r1   r   r   r   Ú<module>rÞ      sÔ   ðó Û 	Ý $Ý .Ý 4Ý $ç .Ñ .ß ;à×Ò˜Ó!€ð ×0Ñ0Ð Ø×"Ñ"€Ø× Ñ €
ð €ð Ð3Ð4€Ø%Ð'@ÐA€Ø,Ð-€Ø€
Ø(Ð Ø6Ð ò	€ð (Ð ð 0Ð0Ð òò
Pô
#÷U:ñ U:òpð +=õ r   