f9DddlZddlZddlmZddlmZddlmZddlm Z ddl m Z m Z m Z ddlmZmZej"eZe j(Ze j*Ze j,ZdZd d gZd d gZd gZd ZdZdZgdZdZdgZ dZ!dZ"ddZ#GddZ$dZ%efdZ&y)N)MIMEBase) MIMEMultipart)MIMENonMultipart)MIMEText)featureshandlersutil)UrlErrorread_file_or_urlz Content-Typez text/plainztext/x-not-multipartztext/x-include-urlztext/x-include-once-urlztext/cloud-config-archiveztext/cloud-configzapplication/octet-stream)zapplication/gzipzapplication/gzip-compressedzapplication/gzippedzapplication/x-compresszapplication/x-compressedzapplication/x-gunzipzapplication/x-gzipzapplication/x-gzip-compressedzNumber-Attachmentsc||=|||<yN)msgkeyvalues 5/usr/lib/python3/dist-packages/cloudinit/user_data.py_replace_headerr;s CCHcD|d=|jddt|y)NzContent-Disposition attachment)filename) add_headerstr)rrs r _set_filenamer@s" !"NN(,XNOrcftjr t||tj |yr )rERROR_ON_USER_DATA_FAILURE RuntimeErrorLOGwarning) error_messagesource_exceptions r _handle_errorr"Es%**=)/?? M"rcJeZdZdZdZdZdZdZdZdZ dZ d d Z d Z y ) UserDataProcessorcF||_tj||_yr )pathsr fetch_ssl_details ssl_details)selfr&s r__init__zUserDataProcessor.__init__Ms 11%8rct}t|tr$|D]}|jt |||S|jt |||Sr )r isinstancelist _process_msgconvert_string)r)blobaccumulating_msgbs rprocesszUserDataProcessor.processQsa(? dD ! G!!."35EF G    nT24D Erc d}|jD]r}t|rd}|j}tj|}d}|t vr tj |d}d}d}|st}|tdgzvr||}||}|r|jdd\} } t| | } | j||j!rt#| |j!d D] }||vst%| |t'||"| }||k7rt%|t(||t*vr|j-||4|t.vr|j1||Pt%|t(||j3||uy#tj$r3} dj|t|| } t| | Yd} ~ d} ~ wwxYw) Nc,tj|Sr )rtype_from_starts_with)payloads r find_ctypez2UserDataProcessor._process_msg..find_ctype[s11': :rF)quietTz*AADy'3tAw<@A "lE: %  *5 %%%gz: HlE :   j$ /UJ 0&..006&G a1" "-3sF  G(G  Gcr|jdd}d}|jtvr9 tj|j d}|r|jd}||}||}|& |jdtt|yy#t $rY>%3ww|| JJ $ $V ,j(  rcl|jst|t|z|j|yr )rJr PART_FN_TPLrj)r)r attached_ids r_process_before_attachz(UserDataProcessor._process_before_attachs+! #{k: ; !!#&rcHd}|jD]}|j}|jdr|tddj }d}n/|jdr|tddj }d}|jdr|j }|sd}d}|r|j |}|r5tjj|rtj|}n t|dd|j}|r2|jr"tj||j d |jr |j }n'd j#||j$} t'| ||t/|} |j1| |y#t($r9} t+| } || vr| d j#|z } t'| | Yd} ~ bd} ~ wt,$r(} d j#|| } t'| | Yd} ~ d} ~ wwxYw)NFz #include-onceTz#include# )timeoutretriesr(i)modez6Fetching from {} resulted in a invalid http code of {}z for url: {0}zFetching from {} resulted in {}) splitlineslower startswithrElstripstriprwrqrrisfiler load_text_filer r(ok write_filecontentsrDcoder"r rIOErrorr/r.)r)contentrRinclude_once_onlinelc_line include_urlinclude_once_fnrespr urlemessageioenew_msgs rrMzUserDataProcessor._do_includes &&(> 7DjjlG!!/2C023::<#'##J/C O-.557#(s#**,K"OG"&"A"A+"N277>>/#B--o> 6+# ! "$($4$4 D '4779+T]]wwy"&--99? +TYY:& &m4"(1!!':6}> 7^ 1!$iG#'1?#9#9+#FF!'4006$E$L$L#S%M"-55 6s%:BF00 H!9/G-- H!9HH!c tj|gttf}|D]}t |t rd|i}t |t s)|jdd}|jd}|s2t}t |trt}tj||}|jdd\}} |dk(r.t |tr|j}t|| } nt!|| } | j#|d |vrt%| |d d |vr| j'd t |d t|j)D]U} | j+dd dd d t,j+t.j+fvrA| j'| || W|j1|| y) N)defaultallowedrtyper:r;text)_subtyperr_r<zcontent-disposition)r rbr-setr,rdictr`ARCHIVE_UNDEF_TYPEbytesARCHIVE_UNDEF_BINARY_TYPErr6rHr^rrrIrrkeysrATTACHMENT_FIELDrKrP) r)archiverRentriesentrmtyperrXrYrheaders rrOz"UserDataProcessor._explode_archives.."tSkJ0 /C#s# #&cD*ggi,GGGFOE,gu-7G 66wH % C 3 Hg6!gu-%nn.Gw9x1(S c3z?3$~s3~3F/GHsxxz* 4<<>")$**, &&(&vs6{3 4   j# .a0 /rNct|vr d|t<|t|tt|d} t|j t}|S#t t f$rt|tt|Y|SwxYw)z Return the number of attachments to this MIMEMultipart by looking at its 'Number-Attachments' header. 0r)rrrrer`rfrg)r) outer_msg new_count fetched_counts r_multi_part_countz#UserDataProcessor._multi_part_countFs 9 ,*-I& '  I'7Y H  M .> ?@MI& M I'7]9K L MsA)A>=A>c|j|}|j||dz|j||j||dzy)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)rr{attach)r)rrS part_counts rrPzUserDataProcessor._attach_partXsJ ++I6  ##D*q.9 y*q.9rr ) __name__ __module__ __qualname__r*r3r.rjrwr{rMrOrrPrrrr$r$Ls99 N0`0 ' C7J2/h$ :rr$cT|jxsd}|jdk(ryy)Nr multipartTF)get_content_maintyper)rS part_maintypes rr>r>ds,--/52M + rc|sd}d}t|tr|jd}n|}tj|d}d|ddj vr&tj |jd}|S|||}|S) zJconvert a string (more likely bytes) or a message into a mime message.rcj|jdd\}}t||}|j||S)Nr:r;)rHrrI)rn content_typerXrYrs r create_binmsgz%convert_string..create_binmsgss6(..sA6'x)  rzutf-8Fr]s mime-version:ri)r,rencoder rBrmessage_from_stringr^)raw_datarrbdatars rr/r/ms  (C (   U5 1E54=..00&&u||G'<= JE<0 Jrr )'loggingrqemail.mime.baseremail.mime.multipartremail.mime.nonmultipartremail.mime.textr cloudinitrrr cloudinit.url_helperr r getLoggerrrNOT_MULTIPART_TYPEry OCTET_TYPErKrGrLrNrFrrrArrarrr"r$r>r/rrrrs $.4$..;g!00""   34 %'@A ,-  (6  (00 P #U:U:p+=r