
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼me—  ã               @   s®   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ eje	ƒZ
dadZdZdedœdd„Zdedœd	d
„Zdd„ Ze jddd„ƒZdedœdd„Zdedœdd„ZdS )é    N)Úutilz/run/cloud-init/tmpz/var/tmp/cloud-initF)Ú	needs_exec             C   s:   | d k	r| S |rt S trtS tjƒ dkr,tS tjjddƒS )Nr   ZTMPDIRz/tmp)Ú_EXE_ROOT_TMPDIRÚ_TMPDIRÚosÚgetuidÚ_ROOT_TMPDIRÚenvironÚget)Úodirr   © r   ú /usr/lib/python3.6/temp_utils.pyÚget_tmp_ancestor   s    r   c             C   s^   t | |ƒ}tjj|ƒs,tj|ƒ tj|dƒ |rHtj|dƒrHtj	d|ƒ | dkrZ| rZ|a
|S )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ÿ  ZnoexeczDRequested temporal dir with exe permission `%s` is mounted as noexecN)r   r   ÚpathÚisdirÚmakedirsÚchmodr   Zhas_mount_optÚLOGZwarningr   )r   r   Útdirr   r   r   Ú_tempfile_dir_arg   s    

r   c                 sT   t | jdd ƒ| jddƒƒ| d< tjf | Ž‰ dd„ }|ˆ _‡ fdd„}tˆ d|ƒ ˆ S )	NÚdirr   Fc             S   sF   yt j| ƒ W n2 tk
r@ } z|jtjkr0|‚W Y d d }~X nX d S )N)r   ÚunlinkÚOSErrorÚerrnoÚENOENT)r   Úer   r   r   Ú_unlink_if_existsI   s
    z0ExtendedTemporaryFile.<locals>._unlink_if_existsc                  s   ˆ j ˆ jƒ d S )N)r   Únamer   )Úfhr   r   Ú
unlink_nowW   s    z)ExtendedTemporaryFile.<locals>.unlink_nowr   )r   ÚpopÚtempfileZNamedTemporaryFiler   Úsetattr)Úkwargsr   r   r   )r   r   ÚExtendedTemporaryFile@   s    r$   c             k   s*   t f |Ž}z
|V  W d tj|| d� X d S )N)Úignore_errors)ÚmkdtempÚshutilZrmtree)Zrmtree_ignore_errorsr#   r   r   r   r   Útempdir^   s    

r(   c             K   s   t | |ƒ} tjf d| i|—ŽS )Nr   )r   r!   r&   )r   r   r#   r   r   r   r&   j   s    
r&   c             K   s   t | |ƒ} tjf d| i|—ŽS )Nr   )r   r!   Úmkstemp)r   r   r#   r   r   r   r)   o   s    
r)   )NF)NF)F)NF)NF)Ú
contextlibr   Zloggingr   r'   r!   Z	cloudinitr   Z	getLoggerÚ__name__r   r   r   r   Úboolr   r   r$   Úcontextmanagerr(   r&   r)   r   r   r   r   Ú<module>   s"   
"