ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
4i             '   @   s>  d Z dZdZdZdZddlmZ 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ZddlZddlZddlZyddlZW n ek
r   dZY nX yddlZW n ek
r   dZY nX eefZyeef7 ZW n ek
r   Y nX dd	d
ddddddddddddgZdZdZdZdZed ZdZ dZ!dZ"dZ#dZ$d Z%dZ&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/d*Z0d+Z1d,Z2d-Z3dZ4d.Z5d/Z6e5Z7e%e&e'e(e+e,e-e)e*e.e/e0fZ8e%e&e-e0fZ9e.e/e0fZ:dZ;d0d1d6d7hZ<e=e=e=e>e>e>d8Z?e	j@d9krd:ZAnejB ZAd;d< ZCd=d> ZDd?d@ ZEdAe7fdBdCZFdDdE ZGdedfdFdGZHdHdI ZIdJdK ZJG dLd deKZLG dMd deLZMG dNd deLZNG dOd deLZOG dPd deLZPG dQd deLZQG dRdS dSeQZRG dTdU dUeQZSG dVdW dWeQZTG dXdY dYeQZUG dZd[ d[eQZVG d\d] d]ZWG d^d_ d_ZXG d`da daeYZZG dbdc dceYZ[G ddde dee
j\Z]G dfdg dgeLZ^G dhdi die^Z_G djdk dke^Z`G dldm dme^ZaG dndo doe^ZbG dpdq dqe^ZcG drds dse^Zde^eeMfZeddtduZfdvdw Zgdxdy Zhdzd{ Ziegeheid|ZjeY Zkejld}ZmG d~d	 d	eYZnG dd deYZodd
 ZpeojZdd Zqerdkr:eq  dS )z0.9.0u"   Lars Gustäbel (lars@gustaebel.de)z5$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $z?$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $u4   Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.    )openNTarFileTarInfo
is_tarfileTarError	ReadErrorCompressionErrorStreamErrorExtractErrorHeaderErrorENCODINGUSTAR_FORMAT
GNU_FORMAT
PAX_FORMATDEFAULT_FORMATr   Tz/etc/python/tarfile.cfg    i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      pathlinkpathsizemtimeuidgidunamegname)ZatimeZctimer(   r)   r*   r'   ntzutf-8c             C   s8   | d krt d| j||} | d | |t|  t  S )Nzmetadata cannot contain None)
ValueErrorencodelenNUL)slengthencodingerrors r6   /usr/lib64/python3.6/tarfile.pystn   s    r8   c             C   s*   | j d}|dkr| d | } | j||S )Nr   r#   )finddecode)r2   r4   r5   pr6   r6   r7   nts   s    
r=   c             C   s   | d dkrfd}x0t t| d D ]}|dK }|| |d  7 }q"W | d dkrdt| d  |  }n@y"t| dd} t| j pd	d}W n tk
r   td
Y nX |S )Nr         r#         asciistrict0zinvalid header)r>   r?   )ranger0   r=   intstripr.   InvalidHeaderError)r2   nir6   r6   r7   nti   s    rK   r@   c             C   s   t | } d|   ko"d|d  k n  rDtd|d | f dt }n|tkrd|d   |   kopd|d  k n  r| dkrtdg}ntdg}d| |  } x6t|d D ]}|jd| d@  | dL } qW ntd	|S )
Nr   r@   r#   z%0*orB   rA   r>   r?   zoverflow in number field)rF   bytesr1   r   	bytearrayrE   insertr.   )rI   digitsformatr2   rJ   r6   r6   r7   itn   s     2
rQ   c             C   s0   dt tjd|  }dt tjd|  }||fS )NrA   Z
148B8x356BZ
148b8x356b)sumstructZunpack_from)bufZunsigned_chksumZsigned_chksumr6   r6   r7   calc_chksums   s    	rU   c       	      C   s   |pd}|dkrd S |d kr.t j| || d S t||\}}x8t|D ],}| j|}t||k rh|d|j| qFW |dkr| j|}t||k r|d|j| d S )N   i   r   zunexpected end of datai @  )shutilcopyfileobjdivmodrE   readr0   write)	srcdstr3   	exceptionbufsizeblocks	remainderbrT   r6   r6   r7   rX      s$    


rX   c             C   s    dd l }|jdtd tj| S )Nr   z$deprecated in favor of stat.filemoder$   )warningswarnDeprecationWarningstatfilemode)moderc   r6   r6   r7   rg     s    rg   c             C   s8   t tjdd }|d k	r(| j|dj|} t| dd d S )Nr4   backslashreplace )end)getattrsysstdoutr/   r;   print)r2   r4   r6   r6   r7   _safe_print  s    rp   c               @   s   e Zd ZdS )r   N)__name__
__module____qualname__r6   r6   r6   r7   r     s   c               @   s   e Zd ZdS )r
   N)rq   rr   rs   r6   r6   r6   r7   r
   !  s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r6   r6   r6   r7   r   $  s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r6   r6   r6   r7   r   '  s   c               @   s   e Zd ZdS )r	   N)rq   rr   rs   r6   r6   r6   r7   r	   *  s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r6   r6   r6   r7   r   -  s   c               @   s   e Zd ZdS )EmptyHeaderErrorN)rq   rr   rs   r6   r6   r6   r7   rt   0  s   rt   c               @   s   e Zd ZdS )TruncatedHeaderErrorN)rq   rr   rs   r6   r6   r6   r7   ru   3  s   ru   c               @   s   e Zd ZdS )EOFHeaderErrorN)rq   rr   rs   r6   r6   r6   r7   rv   6  s   rv   c               @   s   e Zd ZdS )rH   N)rq   rr   rs   r6   r6   r6   r7   rH   9  s   rH   c               @   s   e Zd ZdS )SubsequentHeaderErrorN)rq   rr   rs   r6   r6   r6   r7   rw   <  s   rw   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_LowLevelFilec             C   sF   t jt jt jB t jB d| }tt dr2|t jO }t j||d| _d S )N)rwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr{   r   fd)selfnamerh   r6   r6   r7   __init__I  s    

z_LowLevelFile.__init__c             C   s   t j| j d S )N)r|   closer   )r   r6   r6   r7   r   R  s    z_LowLevelFile.closec             C   s   t j| j|S )N)r|   rZ   r   )r   r'   r6   r6   r7   rZ   U  s    z_LowLevelFile.readc             C   s   t j| j| d S )N)r|   r[   r   )r   r2   r6   r6   r7   r[   X  s    z_LowLevelFile.writeN)rq   rr   rs   r   r   rZ   r[   r6   r6   r6   r7   rx   C  s   	rx   c               @   sp   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dddZdddZdd Zdd ZdS )_Streamc       	      C   s  d| _ |d krt||}d| _ |dkr6t|}|j }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _yL|dkrydd l}W n tk
r   tdY nX || _|jd| _|d	kr| j  |j| _n| j  n|d
kr:ydd l}W n tk
r
   tdY nX |d	kr.d| _|j | _t| _n
|j | _n||dkrydd l}W n tk
rn   tdY nX |d	krd| _|j | _|j| _n
|j | _n|dkrtd| W n&   | j s| jj  d| _ Y nX d S )NTF*     r   gzzzlib module is not availablery   bz2zbz2 module is not availablexzzlzma module is not availabletarzunknown compression type %r) _extfileobjrx   _StreamProxygetcomptyper   rh   comptypefileobjr_   rT   posclosedzlibImportErrorr   crc32crc_init_read_gzerrorr^   _init_write_gzr   dbufZBZ2DecompressorcmpOSErrorZBZ2CompressorlzmaZLZMADecompressor	LZMAErrorZLZMACompressorr   )	r   r   rh   r   r   r_   r   r   r   r6   r6   r7   r   f  sl    












z_Stream.__init__c             C   s   t | dr| j r| j  d S )Nr   )r   r   r   )r   r6   r6   r7   __del__  s    z_Stream.__del__c             C   s   | j jd| j j| j j | j jd| _tjdtt	j	 }| j
d| d  | jjdrf| jd d
 | _| j
| jjdd	t  d S )N	   r   z<Ls   s   z.gz   z
iso-8859-1replace)r   ZcompressobjZDEFLATED	MAX_WBITSZDEF_MEM_LEVELr   rS   packrF   time_Stream__writer   endswithr/   r1   )r   Z	timestampr6   r6   r7   r     s    z_Stream._init_write_gzc             C   sR   | j dkr| jj|| j| _|  jt|7  _| j dkrD| jj|}| j| d S )Nr   r   )	r   r   r   r   r   r0   r   compressr   )r   r2   r6   r6   r7   r[     s    

z_Stream.writec             C   sR   |  j |7  _ x>t| j | jkrL| jj| j d | j  | j | jd  | _ qW d S )N)rT   r0   r_   r   r[   )r   r2   r6   r6   r7   Z__write  s    z_Stream.__writec             C   s   | j r
d S d| _ z| jdkr:| jdkr:|  j| jj 7  _| jdkr| jr| jj| j d| _| jdkr| jjtj	d| j
 | jjtj	d| jd@  W d | js| jj  X d S )NTrz   r   r   r   z<Ll    )r   rh   r   rT   r   flushr   r[   rS   r   r   r   r   r   )r   r6   r6   r7   r     s    
z_Stream.closec             C   s   | j j| j j | _d| _| jddkr0td| jddkrFtdt| jd}| jd |d	@ rt| jdd
t| jd  }| j	| |d@ rx| jd}| s|t
krP qW |d@ rx| jd}| s|t
krP qW |d@ r| jd d S )Nr   r$   s   znot a gzip filer#      zunsupported compression method      rA   r@   rV   )r   Zdecompressobjr   r   r   _Stream__readr   r   ordrZ   r1   )r   flagZxlenr2   r6   r6   r7   r     s.    
 


z_Stream._init_read_gzc             C   s   | j S )N)r   )r   r6   r6   r7   tell  s    z_Stream.tellr   c             C   s\   || j  dkrNt|| j  | j\}}xt|D ]}| j| j q.W | j| ntd| j S )Nr   z seeking backwards is not allowed)r   rY   r_   rE   rZ   r	   )r   r   r`   ra   rJ   r6   r6   r7   seek  s    z_Stream.seekNc             C   sZ   |d kr:g }x | j | j}|s P |j| qW dj|}n
| j |}|  jt|7  _|S )Nr   )_readr_   appendjoinr   r0   )r   r'   trT   r6   r6   r7   rZ     s    
z_Stream.readc             C   s   | j dkr| j|S t| j}| jg}xd||k r| j| j}|sBP y| jj|}W n | jk
rp   tdY nX |j	| |t|7 }q(W dj
|}||d  | _|d | S )Nr   zinvalid compressed datar   )r   r   r0   r   r_   r   Z
decompressr^   r   r   r   )r   r'   cr   rT   r6   r6   r7   r   *  s"    





z_Stream._readc             C   sn   t | j}| jg}x6||k rH| jj| j}|s0P |j| |t |7 }qW dj|}||d  | _|d | S )Nr   )r0   rT   r   rZ   r_   r   r   )r   r'   r   r   rT   r6   r6   r7   Z__read@  s    



z_Stream.__read)r   )N)rq   rr   rs   r   r   r   r[   r   r   r   r   r   rZ   r   r   r6   r6   r6   r7   r   [  s   F
	

r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c             C   s   || _ | j jt| _d S )N)r   rZ   	BLOCKSIZErT   )r   r   r6   r6   r7   r   V  s    z_StreamProxy.__init__c             C   s   | j j| _| jS )N)r   rZ   rT   )r   r'   r6   r6   r7   rZ   Z  s    
z_StreamProxy.readc             C   sP   | j jdrdS | j dd dkr8| j dd dkr8d	S | j jdrHdS dS d S )Ns   r   r   r   s   BZhr   
   s   1AY&SYr      ]     7zXZr   r   )r   r   )rT   
startswith)r   r6   r6   r7   r   ^  s    $z_StreamProxy.getcomptypec             C   s   | j j  d S )N)r   r   )r   r6   r6   r7   r   h  s    z_StreamProxy.closeN)rq   rr   rs   r   rZ   r   r   r6   r6   r6   r7   r   Q  s   
r   c               @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Ze	j
fddZdddZdd Zdd ZdS )_FileInFileNc             C   s   || _ || _|| _d| _t|dd | _d| _|d kr>d|fg}d| _g | _d}| j}xT|D ]L\}}||kr~| jj	d||d f | jj	d||| |f ||7 }|| }qZW || jk r| jj	d|| jd f d S )Nr   r   FT)
r   offsetr'   positionrl   r   r   	map_indexmapr   )r   r   r   r'   Z	blockinfoZlastposZrealposr6   r6   r7   r   u  s(    

z_FileInFile.__init__c             C   s   d S )Nr6   )r   r6   r6   r7   r     s    z_FileInFile.flushc             C   s   dS )NTr6   )r   r6   r6   r7   readable  s    z_FileInFile.readablec             C   s   dS )NFr6   )r   r6   r6   r7   writable  s    z_FileInFile.writablec             C   s
   | j j S )N)r   seekable)r   r6   r6   r7   r     s    z_FileInFile.seekablec             C   s   | j S )N)r   )r   r6   r6   r7   r     s    z_FileInFile.tellc             C   s   |t jkr tt|d| j| _nj|t jkr\|dk rFt| j| d| _qt| j| | j| _n.|t jkrtt| j| | jd| _ntd| jS )Nr   zInvalid argument)	ioSEEK_SETminmaxr'   r   SEEK_CURSEEK_ENDr.   )r   r   whencer6   r6   r7   r     s    


z_FileInFile.seekc       	      C   s  |d kr| j | j }nt|| j | j }d}x|dkrxZ| j| j \}}}}|| j  kob|k n  rlP q:|  jd7  _| jt| jkr:d| _q:W t||| j }|r| jj|| j|   | jj|}t||krt	d||7 }n|t
| 7 }||8 }|  j|7  _q.W |S )Nr   r   r#   zunexpected end of data)r'   r   r   r   r   r0   r   r   rZ   r   r1   )	r   r'   rT   datastartstopr   r3   rb   r6   r6   r7   rZ     s.    

z_FileInFile.readc             C   s&   | j t|}||d t|< t|S )N)rZ   r0   )r   rb   rT   r6   r6   r7   readinto  s    z_FileInFile.readintoc             C   s
   d| _ d S )NT)r   )r   r6   r6   r7   r     s    z_FileInFile.close)N)N)rq   rr   rs   r   r   r   r   r   r   r   r   r   rZ   r   r   r6   r6   r6   r7   r   o  s   

r   c                   s   e Zd Z fddZ  ZS )ExFileObjectc                s&   t |j|j|j|j}t j| d S )N)r   r   offset_datar'   sparsesuperr   )r   tarfiletarinfor   )	__class__r6   r7   r     s    
zExFileObject.__init__)rq   rr   rs   r   __classcell__r6   r6   )r   r7   r     s   r   c               @   s   e Zd ZdS )FilterErrorN)rq   rr   rs   r6   r6   r6   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )AbsolutePathErrorc                s    || _ t jd|jd d S )Nzmember z has an absolute path)r   r   r   r   )r   r   )r   r6   r7   r     s    zAbsolutePathError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )OutsideDestinationErrorc                s.   || _ || _t j|jd|dd  d S )Nz would be extracted to z, z which is outside the destination)r   _pathr   r   r   )r   r   r%   )r   r6   r7   r     s    z OutsideDestinationError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )SpecialFileErrorc                s   || _ t j|jd d S )Nz is a special file)r   r   r   r   )r   r   )r   r6   r7   r     s    zSpecialFileError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )AbsoluteLinkErrorc                s   || _ t j|jd d S )Nz! is a symlink to an absolute path)r   r   r   r   )r   r   )r   r6   r7   r     s    zAbsoluteLinkError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )LinkOutsideDestinationErrorc                s.   || _ || _t j|jd|dd  d S )Nz would link to z, z which is outside the destination)r   r   r   r   r   )r   r   r%   )r   r6   r7   r     s    z$LinkOutsideDestinationError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c                   s   e Zd Z fddZ  ZS )LinkFallbackErrorc                s2   || _ || _t jd|jdd|d  d S )Nzlink z would be extracted as a zcopy of z, which was rejected)r   r   r   r   r   )r   r   r%   )r   r6   r7   r     s    zLinkFallbackError.__init__)rq   rr   rs   r   r   r6   r6   )r   r7   r     s   r   c             C   s$  i }| j }tjj|tjjd}|jdtjfrH| jjdtj  }|d< tjj|r\t	| tjjtjj
||tjjd}tjj||g|krt| || j}|d k	r|d@ }| r| j s| j r|d@ s|dM }|dO }n| j s| j rd }nt| || jkr||d< |r | jd k	r,d |d	< | jd k	r@d |d
< | jd k	rTd |d< | jd k	rhd |d< | j s|| j r tjj| jrt| tjj| j}|| jkr||d< | j rtjj
|tjj|| j}ntjj
|| j}tjj|tjjd}tjj||g|kr t| ||S )N)rC   /r   i  @   I   i  rh   r)   r*   r+   r,   linknamei)r   r|   r%   realpathALLOW_MISSINGr   seplstripisabsr   r   
commonpathr   rh   isregislnkisdirissymr   r)   r*   r+   r,   r   r   normpathdirnamer   )member	dest_pathZfor_data	new_attrsr   Ztarget_pathrh   Z
normalizedr6   r6   r7   _get_filtered_attrs  sd    






r   c             C   s   | S )Nr6   )r   r   r6   r6   r7   fully_trusted_filterT  s    r   c             C   s(   t | |d}|r$| jf |ddiS | S )NFdeep)r   r   )r   r   r   r6   r6   r7   
tar_filterW  s    r   c             C   s(   t | |d}|r$| jf |ddiS | S )NTr   F)r   r   )r   r   r   r6   r6   r7   data_filter]  s    r   )Zfully_trustedr   r   s   ([0-9]{1,20}) c               @   s  e Zd ZdlZdmddZdd Zdd ZeeeZdd Z	dd Z
ee	e
Zd d! Zeeeeeeeed"ed#
d$d%Zd&d' Zeed(fd)d*Zd+d, Zd-d. Zd/d0 Zed1d2 Zd3d4 Zed5d6 Zed7d8 Zed9d: Zed;d< Zed=d> Zed?d@ ZdAdB Z dCdD Z!dEdF Z"dGdH Z#dIdJ Z$dKdL Z%dMdN Z&dOdP Z'dQdR Z(dSdT Z)dUdV Z*dWdX Z+dYdZ Z,d[d\ Z-d]d^ Z.d_d` Z/dadb Z0dcdd Z1dedf Z2dgdh Z3didj Z4dkS )nr   r   rh   r)   r*   r'   r(   chksumtyper   r+   r,   devmajordevminorr   r   pax_headersr   r   _sparse_structs_link_targetr   c             C   sj   || _ d| _d| _d| _d| _d| _d| _t| _d| _	d| _
d| _d| _d| _d| _d| _d | _i | _d S )Ni  r   r   )r   rh   r)   r*   r'   r(   r   REGTYPEr   r   r+   r,   r   r   r   r   r   r   )r   r   r6   r6   r7   r     s"    zTarInfo.__init__c             C   s   | j S )N)r   )r   r6   r6   r7   _getpath  s    zTarInfo._getpathc             C   s
   || _ d S )N)r   )r   r   r6   r6   r7   _setpath  s    zTarInfo._setpathc             C   s   | j S )N)r   )r   r6   r6   r7   _getlinkpath  s    zTarInfo._getlinkpathc             C   s
   || _ d S )N)r   )r   r   r6   r6   r7   _setlinkpath  s    zTarInfo._setlinkpathc             C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   rq   r   id)r   r6   r6   r7   __repr__  s    zTarInfo.__repr__T)
r   r(   rh   r   r)   r*   r+   r,   r   _KEEPc   
         C   s   |	rt j| }n
t j | }||
k	r(||_||
k	r6||_||
k	rD||_||
k	rR||_||
k	r`||_||
k	rn||_||
k	r|||_||
k	r||_	|S )N)
copydeepcopyr   r(   rh   r   r)   r*   r+   r,   )r   r   r(   rh   r   r)   r*   r+   r,   r   r	  resultr6   r6   r7   r     s(    
zTarInfo.replacec             C   s   | j d krd }n
| j d@ }| j|| j| j| j| j| j| j| j| j	| j
| j| jd}|d tkr~|d jd r~|d  d7  < |S )Ni  )r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   r   )rh   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   DIRTYPEr   )r   rh   infor6   r6   r7   get_info  s&    


zTarInfo.get_infosurrogateescapec             C   s~   | j  }x(|j D ]\}}|d krtd| qW |tkrH| j|||S |tkr^| j|||S |tkrr| j||S tdd S )Nz%s may not be Nonezinvalid format)	r  itemsr.   r   create_ustar_headerr   create_gnu_headerr   create_pax_header)r   rP   r4   r5   r  r   valuer6   r6   r7   tobuf  s    zTarInfo.tobufc             C   sn   t |d< t|d j||tkr(tdt|d j||tkr^| j|d ||\|d< |d< | j|t||S )Nmagicr   zlinkname is too longr   prefix)	POSIX_MAGICr0   r/   LENGTH_LINKr.   LENGTH_NAME_posix_split_name_create_headerr   )r   r  r4   r5   r6   r6   r7   r    s    zTarInfo.create_ustar_headerc             C   s   t |d< d}t|d j||tkr<|| j|d t||7 }t|d j||tkrl|| j|d t||7 }|| j|t	|| S )Nr  r   r   r   )
	GNU_MAGICr0   r/   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r  r4   r5   rT   r6   r6   r7   r     s    zTarInfo.create_gnu_headerc       
      C   s4  t |d< | jj }xddtfddtfddfD ]h\}}}||kr@q,y|| jd	d
 W n" tk
rv   || ||< w,Y nX t|| |kr,|| ||< q,W xldD ]d\}}||krd||< q|| }d|  kod|d  k n    st|t	rt
|||< d||< qW |r| j|t|}	nd}	|	| j|td	d S )Nr  r   r%   r   r&   r+       r,   rB   rC   r)   r@   r*   r'      r(   r   r#   r   r   )r+   r+   r"  )r,   r,   r"  r)   r@   r*   r@   r'   r#  r(   r#  )r$  r%  r&  r'  )r  r   r
  r  r  r/   UnicodeEncodeErrorr0   
isinstancefloatstr_create_pax_generic_headerXHDTYPEr  r   )
r   r  r4   r   r   Zhnamer3   rO   valrT   r6   r6   r7   r    s4    
.zTarInfo.create_pax_headerc             C   s   | j |tdS )Nzutf-8)r,  XGLTYPE)clsr   r6   r6   r7   create_pax_global_header?  s    z TarInfo.create_pax_global_headerc             C   s   |j d}xltdt|D ]R}dj|d | }dj||d  }t|j||tkrt|j||tkrP qW td||fS )Nr   r#   zname is too long)splitrE   r0   r   r/   LENGTH_PREFIXr  r.   )r   r   r4   r5   Z
componentsrJ   r  r6   r6   r7   r  E  s    
zTarInfo._posix_split_namec             C   s  | j dttfk}|r@t| j ddd|}t| j ddd|}ntdd||}tdd||}| j dt}|d krxtdt| j ddd	||t| j d
dd@ d|t| j ddd|t| j ddd|t| j ddd|t| j ddd|d|t| j ddd	||| j dtt| j ddd||t| j ddd||t| j ddd|t| j ddd|t| j ddd||g}tj	dt
 dj|}	t|	t
 d  d }
|	d d td|
 d |	d d   }	|	S )!Nr   r   r   r@   r   r   zTarInfo.type must not be Noner   r   rh   i  r)   r*   r'   r#  r(   s           r   r  r+   r"  r,   r  r   z%dsr   il  z%06o rB   ie  ii)getCHRTYPEBLKTYPErQ   r8   r  r.   r  rS   r   r   r   rU   rL   )r  rP   r4   r5   Zhas_device_fieldsr   r   ZfiletypepartsrT   r   r6   r6   r7   r  U  s8    
&zTarInfo._create_headerc             C   s.   t t| t\}}|dkr*| t| t 7 } | S )Nr   )rY   r0   r   r1   )Zpayloadr`   ra   r6   r6   r7   _create_payload  s    zTarInfo._create_payloadc             C   sR   |j ||t }i }d|d< ||d< t||d< t|d< | j|t||| j| S )Nz././@LongLinkr   r   r'   r  )r/   r1   r0   r  r  r   r8  )r0  r   r   r4   r5   r  r6   r6   r7   r    s    zTarInfo._create_gnu_long_headerc             C   s:  d}x@|j  D ]4\}}y|jdd W q tk
r@   d}P Y qX qW d}|rV|d7 }x|j  D ]\}}|jd}|r|j|d}n
|jd}t|t| d }d	 }	}
x"|tt|
 }	|	|
krP |	}
qW |tt|
d
d | d | d 7 }q`W i }d|d< ||d< t||d< t|d< | j|td
d| j	| S )NFzutf-8rC   Tr   s   21 hdrcharset=BINARY
r  r   r   rB          =   
z././@PaxHeaderr   r   r'   r  r   )
r  r/   r(  r0   r+  rL   r  r  r   r8  )r0  r   r   r4   Zbinarykeywordr  ZrecordslrI   r<   r  r6   r6   r7   r,    s<    

*z"TarInfo._create_pax_generic_headerc             C   st  t |dkrtdt |tkr(td|jttkr>tdt|dd }|t|krbt	d|  }t
|dd |||_t|dd	 |_t|d	d
 |_t|d
d |_t|dd |_t|dd |_||_|dd |_t
|dd |||_t
|dd |||_t
|dd |||_t|dd |_t|dd |_t
|dd ||}|jtkr|jjdrt|_|jtkr6d}g }xrtdD ]f}	y0t|||d  }
t||d |d  }W n tk
r   P Y nX |j|
|f |d7 }qW t|d }t|dd }|||f|_ |j! rN|jj"d|_|rp|jt#krp|d |j |_|S )Nr   zempty headerztruncated headerzend of file header      zbad checksumr   l   t   |         i  i	  i)  iI  iQ  iY  i  r   i  r   r#     i  i  i  )$r0   rt   r   ru   countr1   rv   rK   rU   rH   r=   r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   AREGTYPEr   r  GNUTYPE_SPARSErE   r.   r   boolr   r   rstrip	GNU_TYPES)r0  rT   r4   r5   r   objr  r   structsrJ   r   numbytes
isextendedorigsizer6   r6   r7   frombuf  sZ    
zTarInfo.frombufc             C   s8   |j jt}| j||j|j}|j j t |_|j|S )N)	r   rZ   r   rQ  r4   r5   r   r   _proc_member)r0  r   rT   rL  r6   r6   r7   fromtarfile  s    zTarInfo.fromtarfilec             C   sT   | j ttfkr| j|S | j tkr,| j|S | j tttfkrF| j	|S | j
|S d S )N)r   r!  r   _proc_gnulongrH  _proc_sparser-  r/  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r6   r6   r7   rR  !  s    



zTarInfo._proc_memberc             C   sR   |j j | _| j}| j s$| jtkr4|| j| j7 }||_| j	|j
|j|j | S )N)r   r   r   r   r   SUPPORTED_TYPES_blockr'   r   _apply_pax_infor   r4   r5   )r   r   r   r6   r6   r7   rX  .  s    zTarInfo._proc_builtinc             C   s   |j j| j| j}y| j|}W n tk
r>   tdY nX | j|_| jt	krft
||j|j|_n| jtkrt
||j|j|_|S )Nz missing or bad subsequent header)r   rZ   rZ  r'   rS  r   rw   r   r   r!  r=   r4   r5   r   r   r   )r   r   rT   nextr6   r6   r7   rT  ?  s    

zTarInfo._proc_gnulongc       
      C   s   | j \}}}| ` x|r|jjt}d}xvtdD ]j}y0t|||d  }t||d |d  }	W n tk
rz   P Y nX |r|	r|j||	f |d7 }q0W t|d }qW || _	|jj
 | _| j| j| j |_|| _| S )Nr      r#  rE  i  )r   r   rZ   r   rE   rK   r.   r   rI  r   r   r   rZ  r'   r   )
r   r   rM  rO  rP  rT   r   rJ   r   rN  r6   r6   r7   rU  U  s(    zTarInfo._proc_sparsec             C   s  |j j| j| j}| jtkr&|j}n
|jj }d}d }g }x0t||koV|| dkrnt	j
||}|srtdyt|jd}W n tk
r   tdY nX |dk rtd|| t|krtd|jd| d }	||jdd |	 }
|
jd\}}}| s"|dks"||	 dkr*td|j|||f |dkrd|d krd|dkr`|j}nd	}||7 }q@W |d kr~d	}x`|D ]X\}}}| j|d	d	|j}|tkr| j|||j|j}n| j|d	d	|j}|||< qW y| j|}W n tk
r   td
Y nX d|kr&| j|| nFd|kr>| j|| n.|jddkrl|jddkrl| j||| | jttfkr|j ||j|j | j!|_!d|kr|j"}|j# s|jt$kr||j|j7 }||_!|S )Nr   zinvalid headerr#      r:  r   s
   hdrcharsets   BINARYzutf-8z missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrD   r'   )%r   rZ   rZ  r'   r   r/  r   r
  r0   _header_length_prefix_rematchrH   rF   groupr.   r   rk   	partitionr   r4   _decode_pax_fieldr5   PAX_NAME_FIELDSrS  r   rw   _proc_gnusparse_01_proc_gnusparse_00r4  _proc_gnusparse_10r-  rV  r[  r   r   r   rY  )r   r   rT   r   r   r4   raw_headersra  r3   Zheader_value_end_offsetZkeyword_and_valueZraw_keywordZequalsZ	raw_valuer<  r  r\  r   r6   r6   r7   rW  q  sx    

 







 
zTarInfo._proc_paxc             C   s   g }g }x|D ]\}}}|dkrVy|j t|j  W q tk
rR   tdY qX q|dkry|j t|j  W q tk
r   tdY qX qW tt|||_d S )Ns   GNU.sparse.offsetzinvalid headers   GNU.sparse.numbytes)r   rF   r;   r.   rH   listzipr   )r   r\  ri  ZoffsetsrN  _r<  r  r6   r6   r7   rg    s    zTarInfo._proc_gnusparse_00c             C   s@   dd |d j dD }tt|d d d |dd d |_d S )Nc             S   s   g | ]}t |qS r6   )rF   ).0xr6   r6   r7   
<listcomp>  s    z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>zGNU.sparse.map,r$   r#   )r2  rj  rk  r   )r   r\  r   r   r6   r6   r7   rf    s    zTarInfo._proc_gnusparse_01c             C   s   d }g }|j jt}|jdd\}}t|}xJt||d k rvd|krV||j jt7 }|jdd\}}|jt| q.W |j j |_t	t
|d d d |dd d |_d S )Nr;  r#   r$   )r   rZ   r   r2  rF   r0   r   r   r   rj  rk  r   )r   r\  r   r   Zfieldsr   rT   Znumberr6   r6   r7   rh    s    zTarInfo._proc_gnusparse_10c             C   s   x|j  D ]\}}|dkr(t| d| q
|dkrBt| dt| q
|dkr\t| dt| q
|tkr
|tkryt| |}W n tk
r   d}Y nX |dkr|jd}t| || q
W |j | _d S )NzGNU.sparse.namer%   zGNU.sparse.sizer'   zGNU.sparse.realsizer   r   )	r  setattrrF   
PAX_FIELDSPAX_NUMBER_FIELDSr.   rJ  r
  r   )r   r   r4   r5   r<  r  r6   r6   r7   r[    s"    

zTarInfo._apply_pax_infoc             C   s.   y|j |dS  tk
r(   |j ||S X d S )NrC   )r;   UnicodeDecodeError)r   r  r4   Zfallback_encodingZfallback_errorsr6   r6   r7   rd  ,  s    zTarInfo._decode_pax_fieldc             C   s2   |dk rt dt|t\}}|r*|d7 }|t S )Nr   zinvalid offsetr#   )rH   rY   r   )r   rF  r`   ra   r6   r6   r7   rZ  4  s    zTarInfo._blockc             C   s
   | j tkS )N)r   REGULAR_TYPES)r   r6   r6   r7   r   @  s    zTarInfo.isregc             C   s   | j  S )N)r   )r   r6   r6   r7   isfileB  s    zTarInfo.isfilec             C   s
   | j tkS )N)r   r  )r   r6   r6   r7   r   D  s    zTarInfo.isdirc             C   s
   | j tkS )N)r   SYMTYPE)r   r6   r6   r7   r   F  s    zTarInfo.issymc             C   s
   | j tkS )N)r   LNKTYPE)r   r6   r6   r7   r   H  s    zTarInfo.islnkc             C   s
   | j tkS )N)r   r5  )r   r6   r6   r7   ischrJ  s    zTarInfo.ischrc             C   s
   | j tkS )N)r   r6  )r   r6   r6   r7   isblkL  s    zTarInfo.isblkc             C   s
   | j tkS )N)r   FIFOTYPE)r   r6   r6   r7   isfifoN  s    zTarInfo.isfifoc             C   s
   | j d k	S )N)r   )r   r6   r6   r7   issparseP  s    zTarInfo.issparsec             C   s   | j tttfkS )N)r   r5  r6  r{  )r   r6   r6   r7   isdevR  s    zTarInfo.isdevN)r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   r   r   r   r   r  )r   )5rq   rr   rs   	__slots__r   r  r  propertyr%   r  r  r&   r  r	  r   r  r   r   r  r  r  r  classmethodr1  r  staticmethodr  r8  r  r,  rQ  rS  rR  rX  rT  rU  rW  rg  rf  rh  r[  rd  rZ  r   rv  r   r   r   ry  rz  r|  r}  r~  r6   r6   r6   r7   r   s  sd       


1*
3?zc               @   s  e Zd ZdZdZdZdZeZe	Z
dZeZeZdZdjddZedddefd	d
ZedkddZedlddZedmddZednddZdddddZdd Zdd Zdd Zdd  Zdod!d"Zdpdd$d%d&Zdqdd'd(d)Z drd*d+Z!d,d- Z"dsddd/d0d1Z#d2d3 Z$dtddd/d5d6Z%d7d8 Z&dud9d:Z'd;d< Z(d=d> Z)d?d@ Z*dvdddAdBdCZ+dDdE Z,dFdG Z-dHdI Z.dJdK Z/dLdM Z0dNdO Z1dPdQ Z2dRdS Z3dTdU Z4dVdW Z5dXdY Z6dwdZd[Z7d\d] Z8dxd^d_Z9d`da Z:dbdc Z;ddde Z<dfdg Z=dhdi Z>dS )yr   r   Fr#   Nry   r  c             C   s  ddddd}||krt d|| _|| | _|sj| jdkrVtjj| rVd| _d| _t|| j}d	| _n@|d krt|d
rt	|j
ttfr|j
}t|dr|j| _d| _|rtjj|nd | _
|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r || _|d k	r|| _|	| _|
d k	r4| jtkr4|
| _ni | _|d k	rJ|| _|d k	rZ|| _|| _d	| _g | _d	| _| jj | _i | _ y| jdkrd | _ | j! | _ | jdkr8x| jj"| j y| jj#| }| jj$| W nT t%k
r   | jj"| j P Y n0 t&k
r0 } zt't|W Y d d }~X nX qW | jdkrd| _| jr| jj(| jj) }| jj*| |  jt+|7  _W n&   | js| jj,  d| _ Y nX d S )Nrbzr+bwbZxb)ry   arz   rn  z!mode must be 'r', 'a', 'w' or 'x'r  rz   Fr   rh   Try   rn  )r  rz   rn  )-r.   rh   _moder|   r%   exists	bltn_openr   r   r)  r   r+  rL   abspathr   rP   r   dereferenceignore_zerosr4   r5   r   r   debug
errorlevelcopybufsizer   members_loadedr   r   inodesfirstmemberr\  r   rS  r   rv   r   r   r1  r
  r[   r0   r   )r   r   rh   r   rP   r   r  r  r4   r5   r   r  r  r  ZmodeserT   r6   r6   r7   r   r  s    






$
zTarFile.__init__c                s  | r| rt d|dkr fdd}xtt j|dD ]b}t  j| }|d k	r\|j }	y||d|f|S  ttfk
r   |d k	r|j|	 w8Y q8X q8W tdnd|kr|jdd	\}
}|
pd}
|pd
}| jkrt  j| }ntd| |||
|f|S d|kr|jdd	\}
}|
p.d}
|p8d
}|
dkrLt dt	||
|||}y ||
|f|}W n   |j
   Y nX d|_|S |dkr j|||f|S t dd S )Nznothing to openry   r:*c                s    j |  dkS )Ntaropen)	OPEN_METH)r   )r0  r6   r7   not_compressed  s    z$TarFile.open.<locals>.not_compressed)keyz%file could not be opened successfully:r#   r   zunknown compression type %r|rz   zmode must be 'r' or 'w'Fr  rn  zundiscernible mode)ry   r  )ry   rz   )r  rz   rn  )r.   sortedr  rl   r   r   r   r   r2  r   r   r   r  )r0  r   rh   r   r_   kwargsr  r   funcZ	saved_posrg   streamr   r6   )r0  r7   r     sP    %







zTarFile.openc             K   s    |dkrt d| |||f|S )Nry   r  rz   rn  z!mode must be 'r', 'a', 'w' or 'x')ry   r  rz   rn  )r.   )r0  r   rh   r   r  r6   r6   r7   r  <  s    zTarFile.taropenr   c             K   s   |d
krt dydd l}|j W n  ttfk
rB   tdY nX y|j||d ||}W n. tk
r   |d k	r|dkrtd Y nX y| j|||f|}W nB tk
r   |j	  |dkrtd Y n   |j	   Y nX d	|_
|S )Nry   rz   rn  zmode must be 'r', 'w' or 'x'r   zgzip module is not availablerb   znot a gzip fileF)ry   rz   rn  )r.   gzipZGzipFiler   AttributeErrorr   r   r   r  r   r   )r0  r   rh   r   compresslevelr  r  r   r6   r6   r7   gzopenD  s2    
zTarFile.gzopenc             K   s   |d
krt dydd l}W n tk
r8   tdY nX |j|pD|||d}y| j|||f|}W nF ttfk
r   |j  |dkrt	d Y n   |j   Y nX d	|_
|S )Nry   rz   rn  zmode must be 'r', 'w' or 'x'r   zbz2 module is not available)r  znot a bzip2 fileF)ry   rz   rn  )r.   r   r   r   ZBZ2Filer  r   EOFErrorr   r   r   )r0  r   rh   r   r  r  r   r   r6   r6   r7   bz2openf  s(    zTarFile.bz2openc             K   s   |d
krt dydd l}W n tk
r8   tdY nX |j|pD|||d}y| j|||f|}W nH |jtfk
r   |j  |dkrt	d Y n   |j   Y nX d	|_
|S )Nry   rz   rn  zmode must be 'r', 'w' or 'x'r   zlzma module is not available)presetznot an lzma fileF)ry   rz   rn  )r.   r   r   r   ZLZMAFiler  r   r  r   r   r   )r0  r   rh   r   r  r  r   r   r6   r6   r7   xzopen  s&    zTarFile.xzopenr  r  r  r  )r   r   r   r   c          
   C   s   | j r
d S d| _ z`| jdkrn| jjttd   |  jtd 7  _t| jt\}}|dkrn| jjtt|   W d | j	s| jj
  X d S )NTr  rz   rn  r$   r   )r  rz   rn  )r   rh   r   r[   r1   r   r   rY   
RECORDSIZEr   r   )r   r`   ra   r6   r6   r7   r     s    
zTarFile.closec             C   s"   | j |}|d krtd| |S )Nzfilename %r not found)
_getmemberKeyError)r   r   r   r6   r6   r7   	getmember  s    
zTarFile.getmemberc             C   s   | j   | js| j  | jS )N)_checkr  _loadr  )r   r6   r6   r7   
getmembers  s    zTarFile.getmembersc             C   s   dd | j  D S )Nc             S   s   g | ]
}|j qS r6   )r   )rm  r   r6   r6   r7   ro    s    z$TarFile.getnames.<locals>.<listcomp>)r  )r   r6   r6   r7   getnames  s    zTarFile.getnamesc             C   sp  | j d |d k	r|j}|d kr$|}tjj|\}}|jtjd}|jd}| j }| |_	|d krt
tdr| j rtj|}qtj|}ntj|j }d}|j}tj|r|j|jf}	| j r|jdkr|	| jkr|| j|	 krt}
| j|	 }nt}
|	d rx|| j|	< nhtj|r"t}
nVtj|r4t}
nDtj|rPt}
tj|}n(tj|rbt }
ntj!|rtt"}
nd S ||_||_#|j$|_%|j&|_'|
tkr|j(|_)nd|_)|j*|_+|
|_,||_-t.ryt.j/|j%d |_0W n t1k
r   Y nX t2r*yt2j3|j'd |_4W n t1k
r(   Y nX |
t t"fkrlt
tdrlt
tdrltj5|j6|_7tj8|j6|_9|S )	Nawxr   lstatr   r#   r   majorminor):r  r   r|   r%   
splitdriver   r   r   r   r   r   r  r  rf   fstatfilenost_modeS_ISREGst_inost_devst_nlinkr  rx  r  S_ISDIRr  S_ISFIFOr{  S_ISLNKrw  readlinkS_ISCHRr5  S_ISBLKr6  rh   st_uidr)   st_gidr*   st_sizer'   st_mtimer(   r   r   pwdgetpwuidr+   r  grpZgetgrgidr,   r  st_rdevr   r  r   )r   r   arcnamer   Zdrvr   Zstatresr   Zstmdinoder   r6   r6   r7   
gettarinfo  s~    	




zTarFile.gettarinfoT)r  c            C   s0  | j   |d kr| }x|D ]
}|r|jd kr:td nttj|j td|jpX|j|jpb|jf  |j	 sz|j
 rtdd|j|jf   ntd|j  |jd krtd ntdtj|jd d   t|j|j rd	nd
  |r"|j r
td|j  |j r"td|j  t  qW d S )Nz
??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr   r   r   z-> zlink to )r  rh   rp   rf   rg   r+   r)   r,   r*   ry  rz  r   r   r'   r(   r   Z	localtimer   r   r   r   r   ro   )r   verboser  r   r6   r6   r7   rj  >  s2    





zTarFile.list)filterc      	   
   C   sv  | j d |d kr|}|d k	rPdd l}|jdtd ||rP| jdd|  d S | jd k	rtjj|| jkr| jdd|  d S | jd| | j	||}|d kr| jdd|  d S |d k	r||}|d kr| jdd|  d S |j
 rt|d	}| j|| W d Q R X nd|j rh| j| |rrxHtj|D ].}| jtjj||tjj|||||d
 q4W n
| j| d S )Nr  r   zuse the filter argument insteadr$   ztarfile: Excluded %rztarfile: Skipped %rr#   ztarfile: Unsupported type %rr  )r  )r  rc   rd   re   _dbgr   r|   r%   r  r  r   r  addfiler   listdiraddr   )	r   r   r  	recursiveZexcluder  rc   r   fr6   r6   r7   r  d  sB    



zTarFile.addc             C   s   | j d tj|}|j| j| j| j}| jj| |  jt	|7  _| j
}|d k	rt|| j|j|d t|jt\}}|dkr| jjtt|   |d7 }|  j|t 7  _| jj| d S )Nr  )r_   r   r#   )r  r
  r  rP   r4   r5   r   r[   r   r0   r  rX   r'   rY   r   r1   r  r   )r   r   r   rT   r_   r`   ra   r6   r6   r7   r    s    

zTarFile.addfilec          "   C   sH  |d kr| j }|d k rtjjd}|d krytt}W n tk
rN   Y nBX dd l}|jd dd}| |j	| W d Q R X |jdddd}|ryt
| }W n& tk
r   td|d	d Y nX || _ |S t rtjdt tS tS t|tr td|S t|r|S yt
| S  tk
rB   td|d	d Y nX d S )NZ PYTHON_TARFILE_EXTRACTION_FILTERr   #)ZinterpolationZcomment_prefixesr   r   )Zfallbackzfilter z
 not foundz4The default behavior of tarfile extraction has been z$changed to disallow common exploits z(including CVE-2007-4559). z1By default, absolute/parent paths are disallowed z and some mode bits are cleared. z/See https://access.redhat.com/articles/7004769 zfor more details.z#String names are not supported for z2TarFile.extraction_filter. Use a function such as ztarfile.data_filter directly.)r  zXThe default behavior of tarfile extraction has been changed to disallow common exploits zsThe default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). zThe default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed zThe default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed and some mode bits are cleared. zThe default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed and some mode bits are cleared. See https://access.redhat.com/articles/7004769 a  The default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed and some mode bits are cleared. See https://access.redhat.com/articles/7004769 for more details.zUString names are not supported for TarFile.extraction_filter. Use a function such as zrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.)extraction_filterr|   environr4  r  _CONFIG_FILENAMEFileNotFoundErrorconfigparserZConfigParserZ	read_file_NAMED_FILTERSr  r.   _RH_SAFER_DEFAULTrc   rd   RuntimeWarningr   r   r)  r+  	TypeErrorcallable)r   r  r   filer  Zconfr6   r6   r7   _get_filter_function  sR    


zTarFile._get_filter_function.)numeric_ownerr  c         "   C   s  g }| j |}|d kr| }xT|D ]L}| j|||\}}	|d kr@q |j rR|j|	 | j|||j  ||d q W |jdd dd x$|D ]}	yy||	|}W n4 tk
r }
 z| j|	t|
 wW Y d d }
~
X nX |d kr| j|	d wt	j
j||j}yt	j|}W n$ tk
r.   | j|d wY nX tj|jsL| j|d w| j|||d	 | j|| | j|| W q tk
r } z| j| W Y d d }~X qX qW d S )
N)	set_attrsr  filter_functionc             S   s   | j S )N)r   )r  r6   r6   r7   <lambda>	  s    z$TarFile.extractall.<locals>.<lambda>T)r  reversezexcluded by filterZmissingznot a directory)r  )r  _get_extract_tarinfor   r   _extract_onesort_FILTER_ERRORS_log_no_directory_fixupreprr|   r%   r   r   r  r  rf   r  r  chownutimechmodr
   _handle_nonfatal_error)r   r%   r  r  r  Zdirectoriesr  r   r   
unfilteredexcdirpathr  r  r6   r6   r7   
extractall  sP    


zTarFile.extractallc             C   s   | j dd|j|f  d S )Nr$   z(tarfile: Not fixing up directory %r (%s))r  r   )r   r   reasonr6   r6   r7   r  4	  s    zTarFile._log_no_directory_fixupr   c      	      C   s8   | j |}| j|||\}}|d k	r4| j|||| d S )N)r  r  r  )	r   r   r%   r  r  r  r  r   r  r6   r6   r7   extract8	  s
    
zTarFile.extractc             C   s   t |tr| j|}n|}d }y|||}W nZ ttfk
r\ } z| j| W Y d d }~X n, tk
r } z| j| W Y d d }~X nX |d kr| jdd|j	  dS |j
 rtj|}tjj||j|_||fS )Nr$   ztarfile: Excluded %r)NN)r)  r+  r  r   r   _handle_fatal_errorr
   r  r  r   r   r
  r|   r%   r   r   r  )r   r   r  r%   r  filteredr  r6   r6   r7   r  L	  s"    

zTarFile._get_extract_tarinfoc             C   s   | j d y&| j|tjj||j||||d W nV tk
r\ } z| j| W Y d d }~X n, tk
r } z| j	| W Y d d }~X nX d S )Nry   )r  r  r  extraction_root)
r  _extract_memberr|   r%   r   r   r   r  r
   r  )r   r   r%   r  r  r  r  r6   r6   r7   r  j	  s    
zTarFile._extract_onec             C   s"   | j dkr n| jdd|  d S )Nr#   ztarfile: %s)r  r  )r   r  r6   r6   r7   r  ~	  s    
zTarFile._handle_nonfatal_errorc             C   sn   | j dkr n\t|trP|jd kr6| jdd|j  qj| jdd|j|jf  n| jddt|j|f  d S )Nr   r#   ztarfile: %sztarfile: %s %rztarfile: %s %s)r  r)  r   filenamer  strerrorr   rq   )r   r  r6   r6   r7   r  	  s    


zTarFile._handle_fatal_errorc             C   s   | j d t|tr | j|}n|}|j s6|jtkrB| j| |S |j sR|j	 rzt| j
trhtdq~| j| j|S nd S d S )Nry   z'cannot extract (sym)link as file object)r  r)  r+  r  r   r   rY  
fileobjectr   r   r   r   r	   extractfile_find_link_target)r   r   r   r6   r6   r7   r  	  s    


zTarFile.extractfile)r  r  c            C   s\  |j d}|jdtj}tjj|}|r@tjj| r@tj| |j sP|j	 rj| j
dd|j|jf  n| j
d|j |j r| j|| n|j r| j|| n~|j r| j|| nh|j s|j r| j|| nJ|j s|j	 r| j||||d n&|jtkr| j|| n| j|| |rX| j||| |j	 sX| j|| | j|| d S )Nr   r#   z%s -> %s)r  r  )rJ  r   r|   r   r%   r   r  makedirsr   r   r  r   r   r   makefiler   makedirr|  makefifory  rz  makedevmakelink_with_filterr   rY  makeunknownr  r  r  )r   r   
targetpathr  r  r  r  Z	upperdirsr6   r6   r7   r  	  s:    



zTarFile._extract_memberc             C   s@   y&|j d krtj| ntj|d W n tk
r:   Y nX d S )Ni  )rh   r|   mkdirFileExistsError)r   r   r  r6   r6   r7   r  	  s    
zTarFile.makedirc             C   s   | j }|j|j | j}t|df}|jd k	rrx,|jD ]"\}}|j| t|||t| q6W |j|j |j	  nt|||jt| W d Q R X d S )Nr  )
r   r   r   r  r  r   rX   r   r'   truncate)r   r   r  sourcer_   targetr   r'   r6   r6   r7   r  	  s    


zTarFile.makefilec             C   s"   | j || | jdd|j  d S )Nr#   z9tarfile: Unknown file type %r, extracted as regular file.)r  r  r   )r   r   r  r6   r6   r7   r  
  s    zTarFile.makeunknownc             C   s"   t tdrtj| ntdd S )Nmkfifozfifo not supported by system)r   r|   r  r
   )r   r   r  r6   r6   r7   r  
  s    
zTarFile.makefifoc             C   sn   t td st td r td|j}|d kr2d}|j rF|tjO }n
|tjO }tj||tj	|j
|j d S )Nmknodr  z'special devices not supported by systemi  )r   r|   r
   rh   rz  rf   S_IFBLKS_IFCHRr  r  r   r   )r   r   r  rh   r6   r6   r7   r  
  s    
zTarFile.makedevc             C   s   | j ||d d S )N)r  )r   r   r  r6   r6   r7   makelink(
  s    zTarFile.makelinkc       	   $   C   s&  d}yT|j  r6tjj|r$tj| tj|j| d S tjj|jrVtj	|j| d S W n t
k
rp   d}Y nX y| j|}W n$ tk
r   |rtdn Y nX |d kr|}nR|d krtdy|||}W n2 tk
r } zt||j|W Y d d }~X nX |d k	r"| j||||d d S )NFTz%unable to resolve link inside archivez6makelink_with_filter: if filter_function is not None, z%extraction_root must also not be None)r  r  z[makelink_with_filter: if filter_function is not None, extraction_root must also not be None)r   r|   r%   lexistsunlinksymlinkr   r  r  linksymlink_exceptionr  r  r
   r  r   r   r  )	r   r   r  r  r  Zkeyerror_to_extracterrorr  r  causer6   r6   r7   r  +
  sB    	

  
zTarFile.makelink_with_filterc             C   s   t tdrtj dkr|j}|j}|sytrB|jrBtj|jd }W n tk
rX   Y nX yt	rv|j
rvt	j|j
d }W n tk
r   Y nX |d krd}|d krd}y4|j rt tdrtj||| ntj||| W n tk
r   tdY nX d S )	Ngeteuidr   r$   r#   lchownzcould not change ownerr9   r9   )r   r|   r  r*   r)   r  r,   Zgetgrnamr  r  r+   getpwnamr   r  r  r   r
   )r   r   r  r  gur6   r6   r7   r  ]
  s0    

zTarFile.chownc             C   sL   |j d krd S ttdrHytj||j  W n tk
rF   tdY nX d S )Nr  zcould not change mode)rh   r   r|   r  r   r
   )r   r   r  r6   r6   r7   r  ~
  s    

zTarFile.chmodc             C   sV   |j }|d krd S ttds d S ytj|||f W n tk
rP   tdY nX d S )Nr  z"could not change modification time)r(   r   r|   r  r   r
   )r   r   r  r(   r6   r6   r7   r  
  s    
zTarFile.utimec             C   s  | j d | jd k	r$| j}d | _|S | j| jj krZ| jj| jd  | jjdsZtdd }xby| jj	| }W nH t
k
r } z2| jr| jdd| j|f  |  jt7  _wbW Y d d }~X n tk
r, } zN| jr| jdd| j|f  |  jt7  _wbn| jdkrtt|W Y d d }~X n tk
rT   | jdkrPtdY nj tk
r } z| jdkr~tt|W Y d d }~X n0 tk
r } ztt|W Y d d }~X nX P qbW |d k	r| jj| nd| _|S )	NZrar#   zunexpected end of datar$   z0x%X: %sr   z
empty fileT)r  r  r   r   r   r   rZ   r   r   rS  rv   r  r  r   rH   r+  rt   ru   rw   r  r   r  )r   mr   r  r6   r6   r7   r\  
  sL    


zTarFile.nextc       	      C   s   | j  }d}|d k	rHy|j|}W n tk
r:   d}Y nX |d | }|rXtjj|}xLt|D ]@}|r||j|jkrbd}qb|rtjj|j}n|j}||krb|S qbW |rt|d S )NFT)	r  indexr.   r|   r%   r   reversedr   r   )	r   r   r   	normalizer  Zskippingr  r   member_namer6   r6   r7   r  
  s,    
zTarFile._getmemberc             C   s"   x| j  }|d krP qW d| _d S )NT)r\  r  )r   r   r6   r6   r7   r  
  s
    zTarFile._loadc             C   s:   | j rtd| jj |d k	r6| j|kr6td| j d S )Nz%s is closedzbad operation for mode %r)r   r   r   rq   rh   )r   rh   r6   r6   r7   r  
  s    zTarFile._checkc             C   s`   |j  r.djtd tjj|j|jf}d }n
|j}|}| j||dd}|d kr\t	d| |S )Nr   T)r   r   zlinkname %r not found)
r   r   r  r|   r%   r   r   r   r  r  )r   r   r   limitr   r6   r6   r7   r    s     zTarFile._find_link_targetc             c   s   | j r| jE d H  d S d}| jd k	r:| j }|d7 }|V  xN|t| jk rV| j| }n"| j st| j }|sxd| _ d S nd S |d7 }|V  q<W d S )Nr   r#   T)r  r  r  r\  r0   )r   r  r   r6   r6   r7   __iter__  s&    
zTarFile.__iter__c             C   s   || j krt|tjd d S )N)r  )r  ro   rm   stderr)r   levelmsgr6   r6   r7   r  :  s    
zTarFile._dbgc             C   s   | j   | S )N)r  )r   r6   r6   r7   	__enter__@  s    zTarFile.__enter__c             C   s,   |d kr| j   n| js"| jj   d| _d S )NT)r   r   r   r   )r   r   r  	tracebackr6   r6   r7   __exit__D  s
    

zTarFile.__exit__)Nry   NNNNNNr  NNNN)ry   N)ry   Nr   )ry   Nr   )ry   NN)NNN)T)NTN)N)r  N)r   T)N)TF)NF)N)?rq   rr   rs   r  r  r  r  r   rP   r   r4   r5   r   r   r   r  r  r   r  r  r   r  r  r  r  r  r   r  r  r  r  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r\  r  r  r  r  r#  r  r'  r)  r6   r6   r6   r7   r   V  s      
lZ!

d&=
5D
 62!6
(

	c             C   s.   yt | }|j  dS  tk
r(   dS X d S )NTF)r   r   r   )r   r   r6   r6   r7   r   R  s    c              C   s  dd l } d}| j|d}|jdddddd	 |jd
dtdd |j }|jddddd |jdddd5dd |jdddd6dd |jdddd d |j }|jr|j r|jd!d" |j	r*|j	}t
|rt|d# }|j  t|j tjd$ W d Q R X |jr&td%j| n|jd!d&j| n|jr|j}t
|rjtj|d'}|j|jd( W d Q R X n|jd!d&j| n|jrPt|jd!kr|jd }tj}n,t|jd)kr|j\}}n|jd!|j  t
|r<tj|d'}|j||jd* W d Q R X |jrN|d+kr&d,j|}	nd-j||}	t|	 n|jd!d&j| n|jr|jjd}
tjj|
\}}d.d.d/d/d0d0d0d0d1}||krd2||  nd3}|j}tj|
| }x|D ]}|j| qW W d Q R X |jrtd4j|
 n|jd!|j  d S )7Nr   z3A simple command line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpz--filterz<filtername>zFilter for extraction)metavarchoicesr.  z-lz--list	<tarfile>zShow listing of a tarfile)r/  r.  z-ez	--extract+<output_dir>zExtract tarfile into target dir)nargsr/  r.  z-cz--create<name><file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#   z&--filter is only valid for extraction
ry   )r  z{!r} is a tar archive.z{!r} is not a tar archive.
zr:*)r  r$   )r%   r  r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )z.gzz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rz   z{!r} file created.)r1  r3  )r5  r6  )argparseArgumentParseradd_argumentr  Zadd_mutually_exclusive_group
parse_argsr  r  exitZtestr   r   r  ro   rm   r$  r  rP   rj  r   r0   r|   curdirZformat_helpr  Zcreatepopr%   splitextr  )r7  r*  parserrb  argsr\   r   Ztfr<  r&  Ztar_namerl  ZextZcompressionsZtar_modeZ	tar_files	file_namer6   r6   r7   main`  s    










rB  __main__)r%   r&   r'   r(   r)   r*   r+   r,   )T)sversion
__author__Z__date__Z	__cvsid____credits__builtinsr   r  rm   r|   r   rW   rf   r   rS   r
  rerc   r  r   r  r  NotImplementedErrorr  r   	NameError__all__r  r  r1   r   r  r  r  r  r  r3  r  rG  rx  rw  r5  r6  r  r{  ZCONTTYPEr!  r   rH  r-  r/  rV  r   r   r   r   rY  ru  rK  rr  re  r*  rF   rs  r   r   getfilesystemencodingr8   r=   rK   rQ   rU   rX   rg   rp   	Exceptionr   r
   r   r   r	   r   rt   ru   rv   rH   rw   rx   r   objectr   r   BufferedReaderr   r   r   r   r   r   r   r   r  r   r   r   r   r  r	  compiler`  r   r   r   rB  rq   r6   r6   r6   r7   <module>    s$  


  wh


D
     h          b
