ó
    x[hÅ  ã                   óâ   • S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  \R                  " \	5      r
SrSrSS\4S jjrSS\4S jjrS r\ R"                  SS	 j5       rSS\4S
 jjrSS\4S jjrg)é    N)Úutilz/run/cloud-init/tmpz/var/tmp/cloud-initÚ	needs_exec                 ó¤   • U b  U $ U(       a  [         $ [        R                  " 5       S:X  a  [        $ [        R                  R                  SS5      $ )Nr   ÚTMPDIRz/tmp)Ú_EXE_ROOT_TMPDIRÚosÚgetuidÚ_ROOT_TMPDIRÚenvironÚget)Úodirr   s     Ú6/usr/lib/python3/dist-packages/cloudinit/temp_utils.pyÚget_tmp_ancestorr      s?   € ØÑØˆÞÜÐÜ	‡y‚yƒ{�aÓÜÐÜ�:‰:�>‰>˜( FÓ+Ð+ó    c                 ó0  • [        X5      n[        R                  R                  U5      (       d-  [        R                  " U5        [        R
                  " US5        U(       a2  [        R                  " US5      (       a  [        R                  SU5        U$ )a  Return the proper 'dir' argument for tempfile functions.

When root, cloud-init will use /run/cloud-init/tmp to avoid
any cleaning that a distro boot might do on /tmp (such as
systemd-tmpfiles-clean).

If the caller of this function (mkdtemp or mkstemp) was provided
with a 'dir' argument, then that is respected.

@param odir: original 'dir' arg to 'mkdtemp' or other.
@param needs_exe: Boolean specifying whether or not exe permissions are
    needed for tempdir. This is needed because /run is mounted noexec.
iÿ  ÚnoexeczDRequested temporal dir with exe permission `%s` is mounted as noexec)
r   r   ÚpathÚisdirÚmakedirsÚchmodr   Úhas_mount_optÚLOGÚwarning)r   r   Útdirs      r   Ú_tempfile_dir_argr      sl   € ô ˜DÓ,€DÜ�7‰7�=‰=˜×ÑÜ
�Š�DÔÜ
�Š��vÔæÜ×Ò˜d H×-Ñ-Ü�K‰Kð%àôð
 €Kr   c                  óˆ   ^• [        5       U S'   [        R                  " S0 U D6mS nUTl        U4S jn[	        TSU5        T$ )NÚdirc                 ó    •  [         R                  " U 5        g ! [         a*  nUR                  [        R                  :w  a  Ue S nAg S nAff = f©N)r   ÚunlinkÚOSErrorÚerrnoÚENOENT)r   Úes     r   Ú_unlink_if_existsÚ0ExtendedTemporaryFile.<locals>._unlink_if_exists?   s<   € ð	Ü�IŠI�d�OøÜó 	Ø�w‰wœ%Ÿ,™,Ó&Ø�ô 'ûð	ús   ‚ ™
A£ AÁAc                  ó<   >• T R                  T R                  5        g r   )r    Úname)Úfhs   €r   Ú
unlink_nowÚ)ExtendedTemporaryFile.<locals>.unlink_nowM   s   ø€ Ø
�	‰	�"—'‘'Õr   r*   © )r   ÚtempfileÚNamedTemporaryFiler    Úsetattr)Úkwargsr%   r*   r)   s      @r   ÚExtendedTemporaryFiler1   8   sH   ø€ Ü%Ó'€Fˆ5�MÜ	×	$Ò	$Ñ	. vÑ	.€Bò
ð "€B„Iõô ˆB�˜jÔ)Ø€Ir   c              +   ó†   #   • [        S0 UD6n Uv •  [        R                  " X S9  g ! [        R                  " X S9  f = f7f)N)Úignore_errorsr,   )ÚmkdtempÚshutilÚrmtree)Úrmtree_ignore_errorsr0   r   s      r   Útempdirr8   T   s7   é € ô
 Ñ�VÑ€Dð@ØŠ
ä�Š�dÓ?øŒ�Š�dÓ?üs   ‚A�( “A¨>¾Ac                 óH   • [        X5      n [        R                  " SSU 0UD6$ ©Nr   r,   )r   r-   r4   ©r   r   r0   s      r   r4   r4   `   ó%   € Ü
˜CÓ
+€CÜ×ÒÑ. Ð. vÑ.Ð.r   c                 óH   • [        X5      n [        R                  " SSU 0UD6$ r:   )r   r-   Úmkstempr;   s      r   r>   r>   e   r<   r   )NF)F)Ú
contextlibr"   Úloggingr   r5   r-   Ú	cloudinitr   Ú	getLoggerÚ__name__r   r
   r   Úboolr   r   r1   Úcontextmanagerr8   r4   r>   r,   r   r   Ú<module>rF      sˆ   ðó Û Û Û 	Û Û å à×Ò˜Ó!€Ø$€Ø(Ð ñ,¨4õ ,ñ¨Dõ ò:ð8 ×Ñó@ó ð@ñ/ õ /ñ
/ ö /r   