a ܅g: @sdZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZz ddlZWneydZYn0z ddlZWneydZYn0eefZzeef7ZWneyYn0gdZdZdZd Zd Zed Zd Zd ZdZ dZ!dZ"dZ#d Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4e4Z5e#e$e%e&e)e*e+e'e(e,e-e.f Z6e#e$e+e.fZ7e,e-e.fZ8d Z9hd!Z:e;e;e;ed#krd$Z?ne@Z?d%d&ZAd'd(ZBd)d*ZCd+e5fd,d-ZDd.d/ZEdedfd0d1ZFd2d3ZGGd4d5d5eHZIGd6d7d7eIZJGd8d9d9eIZKGd:d;d;eIZLGdd?d?eIZNGd@dAdAeNZOGdBdCdCeNZPGdDdEdEeNZQGdFdGdGeNZRGdHdIdIeNZSGdJdKdKZTGdLdMdMZUGdNdOdOeVZWGdPdQdQeVZXGdRdSdSejYZZGdTdUdUeIZ[GdVdWdWe[Z\GdXdYdYe[Z]GdZd[d[e[Z^Gd\d]d]e[Z_Gd^d_d_e[Z`dsd`daZadbdcZbdddeZcdfdgZdebeceddhZeeVZfegdiZhGdjdkdkeVZiGdldmdmeVZjdndoZkejjZdpdqZlemdrkreldS)tz0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openN)TarFileTarInfo is_tarfileTarError ReadErrorCompressionError StreamError ExtractError HeaderErrorENCODING USTAR_FORMAT GNU_FORMAT PAX_FORMATDEFAULT_FORMATrTz/etc/python/tarfile.cfgisustar sustar00d01234567LKSxgX)pathlinkpathsizemtimeuidgidunamegname>r,r&r%r+)Zatimectimer(r)r*r'ntutf-8cCs8|durtd|||}|d||t|tS)Nzmetadata cannot contain None) ValueErrorencodelenNUL)slengthencodingerrorsr8/usr/lib64/python3.9/tarfile.pystns r:cCs*|d}|dkr|d|}|||S)Nr)finddecode)r4r6r7pr8r8r9ntss  r?cCs|ddvrbd}tt|dD]}|dK}|||d7}q |ddkrdt|d| }n>z"t|dd}t|p|d d}Wntytd Yn0|S) Nr)r#rAasciistrict0invalid header)ranger2r?intstripr0InvalidHeaderError)r4nir8r8r9ntis    rNrBcCst|}d|kr$d|dkrDnntd|d|fdt}n|tkrd|d |krrd|dkrnnV|dkrtdg}ntdg}d||}t|dD]}|d|d@|dL}qntd |S) NrrBr#z%0*orDrCr@rAzoverflow in number field)rIbytesr3r bytearrayrHinsertr0)rLdigitsformatr4rMr8r8r9itns  2    rTcCs0dttd|}dttd|}||fS)NrCZ 148B8x356BZ 148b8x356b)sumstruct unpack_from)bufZunsigned_chksumZ signed_chksumr8r8r9 calc_chksumss rYc Cs|pd}|dkrdS|dur.t|||dSt||\}}t|D],}||}t||krf|d||qD|dkr||}t||kr|d||dS)Ni@runexpected end of data)shutil copyfileobjdivmodrHreadr2write) srcdstr5 exceptionbufsizeblocks remainderbrXr8r8r9r\s$       r\cCs8ttjdd}|dur(||d|}t|dddS)Nr6backslashreplace )end)getattrsysstdoutr1r=print)r4r6r8r8r9 _safe_printsrnc@s eZdZdS)rN__name__ __module__ __qualname__r8r8r8r9rsrc@s eZdZdS)r Nror8r8r8r9r sr c@s eZdZdS)rNror8r8r8r9rsrc@s eZdZdS)rNror8r8r8r9rsrc@s eZdZdS)r Nror8r8r8r9r !sr c@s eZdZdS)r Nror8r8r8r9r $sr c@s eZdZdS)EmptyHeaderErrorNror8r8r8r9rs'srsc@s eZdZdS)TruncatedHeaderErrorNror8r8r8r9rt*srtc@s eZdZdS)EOFHeaderErrorNror8r8r8r9ru-sruc@s eZdZdS)rKNror8r8r8r9rK0srKc@s eZdZdS)SubsequentHeaderErrorNror8r8r8r9rv3srvc@s,eZdZddZddZddZddZd S) _LowLevelFilecCsFtjtjtjBtjBd|}ttdr2|tjO}t||d|_dS)NrwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr{rfd)selfnamemoder8r8r9__init__@s  z_LowLevelFile.__init__cCst|jdSN)r|closerrr8r8r9rIsz_LowLevelFile.closecCst|j|Sr)r|r^rrr'r8r8r9r^Lsz_LowLevelFile.readcCst|j|dSr)r|r_rrr4r8r8r9r_Osz_LowLevelFile.writeN)rprqrrrrr^r_r8r8r8r9rw:s rwc@sneZdZddZddZddZddZd d Zd d Zd dZ ddZ dddZ ddZ ddZ ddZdS)_Streamc Csd|_|durt||}d|_|dkr6t|}|}|pd|fg}d|_g|_d}|j}|D]L\}}||kr||j d||df|j d||||f||7}||}qX||jkr|j d||jdfdS)NrrFT) roffsetr'positionrjrr map_indexmapr)rrrr'Z blockinfoZlastposZrealposr8r8r9rhs(    z_FileInFile.__init__cCsdSrr8rr8r8r9rsz_FileInFile.flushcCsdSNTr8rr8r8r9readablesz_FileInFile.readablecCsdS)NFr8rr8r8r9writablesz_FileInFile.writablecCs |jSr)rseekablerr8r8r9rsz_FileInFile.seekablecCs|jSr)rrr8r8r9rsz_FileInFile.tellcCs|tjkr tt|d|j|_nj|tjkr\|dkrFt|j|d|_qt|j||j|_n.|tjkrtt|j||jd|_ntd|jS)NrzInvalid argument) ioSEEK_SETminmaxr'rSEEK_CURSEEK_ENDr0)rrwhencer8r8r9rs   z_FileInFile.seekc Cs |dur|j|j}nt||j|j}d}|dkr|j|j\}}}}||jkr`|krhqnqq6|jd7_|jt|jkr6d|_q6t|||j}|r|j||j||j|}t||krt d||7}n |t |7}||8}|j|7_q,|S)Nrrr#rZ) r'rrrrr2rrr^rr3) rr'rXdatastartstoprr5rfr8r8r9r^s,     z_FileInFile.readcCs&|t|}||dt|<t|Sr)r^r2)rrfrXr8r8r9readintosz_FileInFile.readintocCs d|_dSr)rrr8r8r9rsz_FileInFile.close)N)N)rprqrrrrrrrrrrrr^rrr8r8r8r9rbs  rcseZdZfddZZS) ExFileObjectcs&t|j|j|j|j}t|dSr)rr offset_datar'sparsesuperr)rtarfiletarinfor __class__r8r9rs zExFileObject.__init__rprqrrr __classcell__r8r8rr9rsrc@s eZdZdS) FilterErrorNror8r8r8r9rsrcseZdZfddZZS)AbsolutePathErrorcs ||_td|jddS)Nzmember z has an absolute pathrrrrrrrr8r9rszAbsolutePathError.__init__rr8r8rr9rsrcseZdZfddZZS)OutsideDestinationErrorcs.||_||_t|jd|dddS)Nz would be extracted to , which is outside the destinationr_pathrrrrrr%rr8r9rs z OutsideDestinationError.__init__rr8r8rr9rsrcseZdZfddZZS)SpecialFileErrorcs||_t|jddS)Nz is a special filerrrr8r9rszSpecialFileError.__init__rr8r8rr9rsrcseZdZfddZZS)AbsoluteLinkErrorcs||_t|jddS)Nz is a link to an absolute pathrrrr8r9rszAbsoluteLinkError.__init__rr8r8rr9rsrcseZdZfddZZS)LinkOutsideDestinationErrorcs.||_||_t|jd|dddS)Nz would link to rrrrrr8r9rs z$LinkOutsideDestinationError.__init__rr8r8rr9rsrcCsi}|j}tj|}|dtjfr@|jdtj}|d<tj|rTt|tjtj ||}tj ||g|krt |||j }|dur|d@}|r| s|r|d@s|dM}|dO}n|s|rd}nt|||j kr||d<|r|jdurd|d<|jdur*d|d <|jdur>d|d <|jdurRd|d <|sf|rtj|jr~t||rtj |tj||j}ntj ||j}tj|}tj ||g|krt|||S) N/ri@irr)r*r+r,)rr|r%realpathrseplstripisabsrr commonpathrrisregislnkisdirissymrr)r*r+r,linknamerdirnamer)member dest_pathZfor_data new_attrsrZ target_pathrr8r8r9_get_filtered_attrss^             rcCs|Srr8)rrr8r8r9fully_trusted_filter6srcCs,t||d}|r(|jfi|ddiS|S)NFdeeprrrrrr8r8r9 tar_filter9s rcCs,t||d}|r(|jfi|ddiS|S)NTrFrrr8r8r9 data_filter?s r)Z fully_trustedrrs([0-9]{1,20}) c@seZdZeddddddddd d d d d ddddddddZdhddZeddZejddZeddZ e jddZ ddZ e e e e e e e e de d d!d"Z d#d$Z eed%fd&d'Zd(d)Zd*d+Zd,d-Zed.d/Zd0d1Zed2d3Zed4d5Zed6d7Zed8d9Zed:d;Zedd?Zd@dAZdBdCZ dDdEZ!dFdGZ"dHdIZ#dJdKZ$dLdMZ%dNdOZ&dPdQZ'dRdSZ(dTdUZ)dVdWZ*dXdYZ+dZd[Z,d\d]Z-d^d_Z.d`daZ/dbdcZ0dddeZ1dfdgZ2dS)irzName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.zFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z User name.z Group name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)rrr)r*r'r(chksumtyper r+r,devmajordevminorrr pax_headersrr_sparse_structs _link_targetrcCsj||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)Nirr)rrr)r*r'r(rREGTYPErr r+r,rrrrrrrrr8r8r9rxs"zTarInfo.__init__cCs|jSrrrr8r8r9r%sz TarInfo.pathcCs ||_dSrr!r r8r8r9r%scCs|jSrr rr8r8r9r&szTarInfo.linkpathcCs ||_dSrr")rr r8r8r9r&scCsd|jj|jt|fS)Nz<%s %r at %#x>)rrpridrr8r8r9__repr__szTarInfo.__repr__T) rr(rr r)r*r+r,r_KEEPc Cs| rt|} n t|} || ur(|| _|| ur6|| _|| urD|| _|| urR|| _|| ur`|| _|| urn|| _|| ur||| _|| ur|| _ | Sr) copydeepcopyrr(rr r)r*r+r,) rrr(rr r)r*r+r,rr%resultr8r8r9rs(  zTarInfo.replacecCs|jdurd}n |jd@}|j||j|j|j|j|j|j|j|j |j |j |j d }|dt kr||dds||dd7<|S)N) rrr)r*r'r(rrr r+r,rrrrr)rrr)r*r'r(rrr r+r,rrDIRTYPEr)rrinfor8r8r9get_infos(  zTarInfo.get_infosurrogateescapecCsz|}|D]\}}|durtd|q|tkrD||||S|tkrZ||||S|tkrn|||StddS)Nz%s may not be Nonezinvalid format) r,itemsr0r create_ustar_headerrcreate_gnu_headerrcreate_pax_header)rrSr6r7r+rvaluer8r8r9tobufs z TarInfo.tobufcCsnt|d<t|d||tkr(tdt|d||tkr^||d||\|d<|d<||t||S)Nmagicr zlinkname is too longrprefix) POSIX_MAGICr2r1 LENGTH_LINKr0 LENGTH_NAME_posix_split_name_create_headerr )rr+r6r7r8r8r9r/s zTarInfo.create_ustar_headercCst|d<d}t|d||tkr<|||dt||7}t|d||tkrl|||dt||7}|||t ||S)Nr4rr r) GNU_MAGICr2r1r7_create_gnu_long_headerGNUTYPE_LONGLINKr8GNUTYPE_LONGNAMEr:r)rr+r6r7rXr8r8r9r0szTarInfo.create_gnu_headerc CsLt|d<|j}ddtfddtfddfD]h\}}}||vr>q*z||dd Wn"tyt||||<Yq*Yn0t|||kr*||||<q*d D]\}}d }||} t| t } | rt | n| } d | krd |dksnd ||<d}n| r| ||<d}|r||vrt | ||<q|r4| |t |} nd} | ||tddS)Nr4rr%r r&)r+r+ )r,r,r?rDrE))r)rB)r*rB)r' )r(r@FrrBr#Trr)r6rr&r8r7r1UnicodeEncodeErrorr2 isinstancefloatroundstr_create_pax_generic_headerXHDTYPEr:r ) rr+r6rrZhnamer5rRZ needs_paxvalZ val_is_floatZval_intrXr8r8r9r1 s>       zTarInfo.create_pax_headercCs||tdS)Nr/)rFXGLTYPE)clsrr8r8r9create_pax_global_headerCsz TarInfo.create_pax_global_headercCs~|d}tdt|D]T}d|d|}d||d}t|||tkrt|||tkrqvqtd||fS)Nrr#zname is too long)splitrHr2rr1 LENGTH_PREFIXr8r0)rrr6r7 componentsrMr5r8r8r9r9Is zTarInfo._posix_split_namec Cs|dttfv}|r@t|ddd|}t|ddd|}ntdd||}tdd||}|dt}|durxtdt|ddd ||t|d dd @d|t|d dd|t|d dd|t|ddd|t|ddd|d|t|ddd |||dtt|ddd||t|ddd||||t|ddd||g}t dt d |} t | t dd} | ddt d| d| dd} | S)NrrrrBrrzTarInfo.type must not be Nonerrrr)r)r*r'r@r(s r r4r+r?r,r5rz%dsriz%06orDi)getCHRTYPEBLKTYPErTr:rr0r6rVrrrrYrO) r+rSr6r7Zhas_device_fieldsrrZfiletypepartsrXrr8r8r9r:Ys:  &zTarInfo._create_headercCs.tt|t\}}|dkr*|t|t7}|S)Nr)r]r2rr3)payloadrdrer8r8r9_create_payloadszTarInfo._create_payloadcCsR|||t}i}d|d<||d<t||d<t|d<||t||||S)Nz ././@LongLinkrrr'r4)r1r3r2r;r:r rT)rJrrr6r7r+r8r8r9r<s zTarInfo._create_gnu_long_headerc Cs0d}|D]6\}}z|ddWq ty@d}YqDYq 0q d}|rT|d7}|D]\}}|d}|r||d}n |d}t|t|d}d } } |tt| } | | krq| } q|tt| d d |d |d 7}q\i} d| d<|| d<t|| d<t| d<|| td d| |S)NFr/rETrs21 hdrcharset=BINARY r-rrrD = z././@PaxHeaderrrr'r4r) r.r1rAr2rErOr6r:r rT) rJrrr6binarykeywordr2recordslrLr>r+r8r8r9rFs<   ( z"TarInfo._create_pax_generic_headerc Cstt|dkrtdt|tkr(td|ttkr>tdt|dd}|t|vrbt d|}t |dd|||_ t|dd |_ t|d d |_ t|d d |_t|d d |_t|d d|_||_|dd |_t |d d|||_t |dd|||_t |dd|||_t|dd|_t|dd|_t |dd||}|jtkr|j drt|_|jtkr6d}g}tdD]j} z0t|||d} t||d|d} WntyYqYn0|| | f|d7}qt|d} t|dd} || | f|_ |!rN|j "d|_ |rp|jt#vrp|d|j |_ |S)Nrz empty headerztruncated headerzend of file headerz bad checksumrlt|ii i)iIiQiYirirr@iii)$r2rsrrtcountr3rurNrYrKr?rrr)r*r'r(rrr r+r,rrAREGTYPErr*GNUTYPE_SPARSErHr0rboolrr rstrip GNU_TYPES)rJrXr6r7robjr5rstructsrMrnumbytes isextendedorigsizer8r8r9frombufsZ         zTarInfo.frombufcCs8|jt}|||j|j}|jt|_||Sr) rr^rror6r7rr _proc_member)rJrrXrjr8r8r9 fromtarfiles zTarInfo.fromtarfilecCsT|jttfvr||S|jtkr,||S|jtttfvrF| |S| |SdSr) rr>r= _proc_gnulongrf _proc_sparserGrISOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr8r8r9rp%s    zTarInfo._proc_membercCsR|j|_|j}|s$|jtvr4|||j7}||_| |j |j |j |Sr) rrrrrSUPPORTED_TYPES_blockr'r_apply_pax_inforr6r7)rrrr8r8r9rv2s zTarInfo._proc_builtincCs|j||j}z||}Wnty<tdYn0|j|_|jt krdt ||j |j |_ n|jtkrt ||j |j |_|S)N missing or bad subsequent header)rr^rxr'rqr rvrrr>r?r6r7rr=r )rrrXnextr8r8r9rrCs   zTarInfo._proc_gnulongc Cs|j\}}}|`|r|jt}d}tdD]l}z0t|||d}t||d|d} WntyxYqYn0|r| r||| f|d7}q,t|d}q||_ |j |_ |j | |j |_||_ |S)Nrr@rci)rrr^rrHrNr0rrgrrrrxr'r) rrrkrmrnrXrrMrrlr8r8r9rsYs(       zTarInfo._proc_sparsecCs|j||j}|jtkr&|j}n |j}d}d}g}t||krh||dkrht ||}spt dzt | d}Wntyt dYn0|dkrt d||t|krt d|d|d} ||dd| } | d\} } } | r| dks|| dkr$t d||| | f| dkr^|dur^| dkrZ|j}nd }||7}q<|durvd }|D]X\}} } || d d |j}|tvr|| ||j|j}n|| d d |j}|||<qzz||}Wntytd Yn0d |vr|||nFd |vr0|||n.|d dkr^|ddkr^|||||jttfvr| ||j|j|j!|_!d|vr|j"}|#s|jt$vr|||j7}||_!|S)NrrGr#rVrs hdrcharsetsBINARYr/rzGNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrFr')%rr^rxr'rrIrr&r2_header_length_prefix_rematchrKrIgroupr0rri partitionrr6_decode_pax_fieldr7PAX_NAME_FIELDSrqr rv_proc_gnusparse_01_proc_gnusparse_00rO_proc_gnusparse_10rGrtryrrrrw)rrrXrrr6 raw_headersrr5Zheader_value_end_offsetZkeyword_and_valueZ raw_keywordZequalsZ raw_valuerYr2r{rr8r8r9ruus|                zTarInfo._proc_paxc Csg}g}|D]\}}}|dkrRz|t|WqtyNtdYq0q |dkr z|t|Wq tytdYq 0q tt|||_dS)NsGNU.sparse.offsetrGsGNU.sparse.numbytes)rrIr=r0rKlistzipr)rr{rZoffsetsrl_rYr2r8r8r9rs  zTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)NcSsg|] }t|qSr8)rI).0xr8r8r9 rz.TarInfo._proc_gnusparse_01..r~,r$r#)rLrrr)rr{rrr8r8r9rszTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}t||dkrtd|vrT||jt7}|dd\}}|t|q,|j|_t t |ddd|ddd|_ dS)NrWr#r$) rr^rrLrIr2rrrrrr)rr{rrfieldsrrXnumberr8r8r9rs  zTarInfo._proc_gnusparse_10c Cs|D]\}}|dkr&t|d|q|dkr@t|dt|q|dkrZt|dt|q|tvr|tvrzt||}Wntyd}Yn0|dkr|d}t|||q||_dS)NzGNU.sparse.namer%rr'zGNU.sparse.realsizerr) r.setattrrI PAX_FIELDSPAX_NUMBER_FIELDSr0rhr&r)rrr6r7rYr2r8r8r9rys"   zTarInfo._apply_pax_infocCs2z||dWSty,|||YS0dS)NrE)r=UnicodeDecodeError)rr2r6Zfallback_encodingZfallback_errorsr8r8r9r/s zTarInfo._decode_pax_fieldcCs"t|t\}}|r|d7}|tS)Nr#)r]r)rrdrdrer8r8r9rx7szTarInfo._blockcCs |jtvSr)r REGULAR_TYPESrr8r8r9r@sz TarInfo.isregcCs|Sr)rrr8r8r9isfileDszTarInfo.isfilecCs |jtkSr)rr*rr8r8r9r Hsz TarInfo.isdircCs |jtkSr)rSYMTYPErr8r8r9r Lsz TarInfo.issymcCs |jtkSr)rLNKTYPErr8r8r9r Psz TarInfo.islnkcCs |jtkSr)rrPrr8r8r9ischrTsz TarInfo.ischrcCs |jtkSr)rrQrr8r8r9isblkXsz TarInfo.isblkcCs |jtkSr)rFIFOTYPErr8r8r9isfifo\szTarInfo.isfifocCs |jduSr)rrr8r8r9issparse`szTarInfo.issparsecCs|jtttfvSr)rrPrQrrr8r8r9isdevcsz TarInfo.isdev)r)3rprqrrdict __slots__rpropertyr%setterr&r$r%rr,rr r3r/r0r1 classmethodrKr9 staticmethodr:rTr<rFrorqrprvrrrsrurrrryrrxrrr r r rrrrrr8r8r8r9rUs       :  )   2 >  y rc @seZdZdZdZdZdZeZe Z dZ e Z eZdZdeddZedddefd d Zedfd d ZedgddZedhddZediddZdddddZddZddZddZdd Zdjd!d"Zdkdd$d%d&Zdldd'd(d)Z dmd*d+Z!d,d-Z"dnddd/d0d1Z#doddd/d3d4Z$d5d6Z%d7d8Z&d9d:Z'd;d<Z(d=d>Z)dpd?d@Z*dAdBZ+dCdDZ,dEdFZ-dGdHZ.dIdJZ/dKdLZ0dMdNZ1dOdPZ2dQdRZ3dSdTZ4dqdUdVZ5dWdXZ6drdYdZZ7d[d\Z8d]d^Z9d_d`Z:dadbZ;dcddZd }| d vrRtdt || |||} z|| | fi|} Wn| Yn0d| _ | S|dvrj |||fi|StddS)Nznothing to open)ryr:*csj|dkS)Ntaropen) OPEN_METH)rrJr8r9not_compressedsz$TarFile.open..not_compressed)keyryz%file could not be opened successfully:r#rr|rxzmode must be 'r' or 'w'Frzundiscernible mode) r0sortedrrjrrrrrLrrrr) rJrrrrckwargsrrfuncZ saved_posfilemodestreamrr8rr9rsP%            z TarFile.opencKs$|dvrtd||||fi|S)Nrr)r0)rJrrrrr8r8r9rNszTarFile.taropenrcKs|dvrtdzddlm}Wnty:tdYn0z|||d||}Wn,ty~|durx|dkrxtdYn0z|j|||fi|}Wn@ty||dkrtdYn|Yn0d |_ |S) Nryrzrmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availablerfryrF) r0gziprrrrrrrr)rJrrr compresslevelrrrr8r8r9gzopenVs0   zTarFile.gzopenc Ks|dvrtdzddlm}Wnty:tdYn0||pD|||d}z|j|||fi|}WnDttfy||dkrt dYn|Yn0d |_ |S) Nrrr)BZ2Filer)rryznot a bzip2 fileF) r0rrrrrrEOFErrorrrr)rJrrrrrrrr8r8r9bz2openws& zTarFile.bz2openc Ks|dvrtdzddlm}m}Wnty>tdYn0||pH|||d}z|j|||fi|}WnD|tfy||dkrt dYn|Yn0d |_ |S) Nrrr)LZMAFilerr)presetryznot an lzma fileF) r0rrrrrrrrrr) rJrrrrrrrrr8r8r9xzopens& zTarFile.xzopenrrrr)rrrrcCs|jr dSd|_zp|jdvrn|jttd|jtd7_t|jt\}}|dkrn|jtt|W|j s|j n|j s|j 0dS)NTrr$r) rrrr_r3rrr] RECORDSIZErr)rrdrer8r8r9rs  z TarFile.closecCs(||d}|dur$td||S)Nrzfilename %r not found) _getmemberrhKeyError)rrrr8r8r9 getmembers zTarFile.getmembercCs||js||jSr)_checkr_loadrrr8r8r9 getmembersszTarFile.getmemberscCsdd|DS)NcSsg|] }|jqSr8r!)rrr8r8r9rrz$TarFile.getnames..)rrr8r8r9getnamesszTarFile.getnamesc CsZ|d|dur|j}|dur$|}tj|\}}|tjd}|d}|}||_ |dur|j stt |}qt |}nt |}d}|j}t |r|j|jf} |j s|jdkr| |jvr||j| krt} |j| }nt} | dr||j| <nht |rt} nVt |r"t} nDt |r>t} t|}n(t |rPt} nt |rbt!} ndS||_||_"|j#|_$|j%|_&| tkr|j'|_(nd|_(|j)|_*| |_+||_,t-rzt-.|j$d|_/Wnt0yYn0t1rzt12|j&d|_3Wnt0yYn0| tt!fvrVt4tdrVt4tdrVt5|j6|_7t8|j6|_9|S)Nawxrrr#rmajorminor):rrr|r% splitdriverrrrrrlstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrrrS_ISDIRr*S_ISFIFOrS_ISLNKrreadlinkS_ISCHRrPS_ISBLKrQrst_uidr)st_gidr*st_sizer'st_mtimer(rr pwdgetpwuidr+rgrpgetgrgidr,rrst_rdevrrr) rrarcnamerdrvrZstatresr Zstmdinoderr8r8r9 gettarinfos                 zTarFile.gettarinfoT)rcCs*||dur|}|D] }|r|jdur6tdntt|jtd|jpT|j|jp^|jf| sv| rtdd|j |j fntd|j |jdurtdntdt|jddt|j|rd nd |r|rtd |j|rtd |jtqdS) Nz ??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02drrrz-> zlink to )rrrnrrr+r)r,r*rrrrr'r(r localtimerr r r r rm)rverboserrr8r8r9rMs8        z TarFile.listfiltercCsL|d|dur|}|jdurFtj||jkrF|dd|dS|d||||}|durz|dd|dS|dur||}|dur|dd|dS|rt|d}| ||Wdn1s0Ynb| r>| ||rHt t |D],}|j tj||tj||||dqn | |dS) Nrr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rtarfile: Excluded %rrr)rrr|r%r_dbgrrraddfiler rlistdiraddr)rrr recursiverrfr8r8r9rss6    ,   z TarFile.addcCs|dt|}||j|j|j}|j||jt |7_|j }|durt ||j|j |dt |j t\}}|dkr|jtt||d7}|j|t7_|j|dS)Nr)rcrr#)rr&r3rSr6r7rr_rr2rr\r'r]rr3rr)rrrrXrcrdrer8r8r9rs   zTarFile.addfilecCsT|dur|j}|durtjd}|durz tt}WntyJYnV0ddl}|jddd}|| |Wdn1s0Y|jdddd}|rz t |}Wn$t yt d|d dYn0||_|St rtd ttStSt|tr td |St|r|Sz t |WSt yNt d|d dYn0dS) NZ PYTHON_TARFILE_EXTRACTION_FILTERr)#)Z interpolationZcomment_prefixesrr)fallbackzfilter z not foundaThe 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.zrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.)extraction_filterr|environrOr_CONFIG_FILENAMEFileNotFoundError configparser ConfigParserZ read_file_NAMED_FILTERSrr0_RH_SAFER_DEFAULTwarningswarnRuntimeWarningrrrBrE TypeErrorcallable)rrrfilerZconfr8r8r9_get_filter_functionsZ    (      zTarFile._get_filter_function.) numeric_ownerrc Csg}||}|dur|}|D]F}||||}|dur:q|rL|||j||| |dq|jdddd|D]p}tj||j } z,|j || |d| || | || Wq|t y} z|| WYd} ~ q|d} ~ 00q|dS)N set_attrsrcSs|jSrr!)rr8r8r9 rz$TarFile.extractall..T)rreverse)r)r_get_extract_tarinfor r _extract_onesortr|r%rrchownutimechmodr _handle_nonfatal_error) rr%rrrZ directoriesfilter_functionrrdirpathrr8r8r9 extractalls,   zTarFile.extractallrcCs4||}||||}|dur0|||||dSr)rr r!)rrr%rrrr'rr8r8r9extract! s zTarFile.extractc Cst|tr||}n|}|}z|||}Wn^ttfy^}z||WYd}~n6d}~0ty}z||WYd}~n d}~00|dur|dd|j dS| rt |}t j ||j|_|S)Nr$r)rBrErrr_handle_fatal_errorr r&rrr r&r|r%rr r)rrr'r%rZ unfilteredrr8r8r9r 4 s"    zTarFile._get_extract_tarinfoc Cs|dz"|j|tj||j||dWnZtyZ}z||WYd}~n6d}~0ty}z| |WYd}~n d}~00dS)Nryr) r_extract_memberr|r%rrrr+r r&)rrr%rrrr8r8r9r!K s  zTarFile._extract_onecCs"|jdkrn|dd|dS)Nr# tarfile: %s)rrrrr8r8r9r&X s zTarFile._handle_nonfatal_errorcCsn|jdkrn\t|trP|jdur6|dd|jqj|dd|j|jfn|ddt|j|fdS)Nrr#r-ztarfile: %s %rztarfile: %s %s)rrBrfilenamerstrerrorrrpr.r8r8r9r+_ s   zTarFile._handle_fatal_errorcCs|dt|tr ||}n|}|s6|jtvrB|||S|sR| rzt|j t rht dq~| ||SndSdS)Nryz'cannot extract (sym)link as file object)rrBrErrrrw fileobjectr r rrr extractfile_find_link_target)rrrr8r8r9r2k s      zTarFile.extractfilecCsT|d}|dtj}tj|}|r>tj|s>t||sN| rh| dd|j |j fn| d|j | r|||n|r|||nx|r|||nb|s|r|||nD|s| r|||n&|jtvr|||n ||||rP||||| sP||||||dS)Nrr#z%s -> %s)rhrr|rr%r rmakedirsr r rrr rmakefiler makedirrmakefiforrmakedevmakelinkrrw makeunknownr#r%r$)rr targetpathrrZ upperdirsr8r8r9r, s4       zTarFile._extract_membercCs>z&|jdurt|n t|dWnty8Yn0dS)Ni)rr|mkdirFileExistsErrorrrr;r8r8r9r6 s    zTarFile.makedircCs|j}||j|j}t|dl}|jdurn|jD]"\}}||t|||t|q4||j| nt|||jt|Wdn1s0YdS)Nr) rrrrrrr\rr'truncate)rrr;sourcerctargetrr'r8r8r9r5 s      zTarFile.makefilecCs"||||dd|jdS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)r5rrr>r8r8r9r: s zTarFile.makeunknowncCs"ttdrt|ntddS)Nmkfifozfifo not supported by system)rr|rBr r>r8r8r9r7 s  zTarFile.makefifocCsjttdrttdstd|j}|dur.d}|rB|tjO}n |tjO}t||t |j |j dS)Nmknodr8z'special devices not supported by systemr) rr|r rrrS_IFBLKS_IFCHRrCr8rr)rrr;rr8r8r9r8 s  zTarFile.makedevc Cszb|r0tj|r t|t|j|n0tj|jrNt |j|n| | ||WnDt yz| | ||Wnt ytdYn0Yn0dS)Nz%unable to resolve link inside archive)r r|r%lexistsunlinksymlinkr rrlinkr,r3symlink_exceptionrr r>r8r8r9r9 s"      zTarFile.makelinkcCsttdrtdkr|j}|j}|sztrB|jrBt|jd}WntyVYn0zt rt|j rtt |j d}WntyYn0|durd}|durd}z4| rttdrt |||nt|||WntytdYn0dS)Ngeteuidrr$r;lchownzcould not change owner)rr|rKr*r)rr,getgrnamrrr+getpwnamr rLr#rr )rrr;rgur8r8r9r# s0     z TarFile.chowncCs@|jdurdSzt||jWnty:tdYn0dS)Nzcould not change mode)rr|r%rr r>r8r8r9r%6 s   z TarFile.chmodcCsT|j}|durdSttds dSzt|||fWntyNtdYn0dS)Nr$z"could not change modification time)r(rr|r$rr )rrr;r(r8r8r9r$@ s  z TarFile.utimec Csl|d|jdur$|j}d|_|S|j|jkrZ|j|jd|jdsZtdd}z|j |}WqJt y}zD|j r| dd|j|f|jt 7_WYd}~q^WYd}~qJd}~0tyD}z`|j r| dd|j|f|jt 7_WYd}~q^n|jdkr.tt|WYd}~qJd}~0tyj|jdkrftdYnty}z$|jdkrtt|WYd}~nd}~0ty}ztt|WYd}~nvd}~0tyB}zTz.ddl}t||jrtd|n|Wnty,|Yn0WYd}~n d}~00qJq^|durb|j|nd |_|S) NZrar#rZr$z0x%X: %srz empty filez zlib error: T)rrrrrrr^rrrqrurrrrKrErsrtrv ExceptionrrBrrrrr)rmrrrr8r8r9r{N sZ   " "       z TarFile.nextc Cs|}d}|durFz||}Wnty8d}Yn0|d|}|rVtj|}t|D]D}|rx|j|jkr^d}q^|rtj|j}n|j}||kr^|Sq^|rt|dS)NFT) rindexr0r|r%normpathreversedrr) rrr normalizerZskippingrSr member_namer8r8r9r s,       zTarFile._getmembercCs|}|durqqd|_dSr)r{rrr8r8r9r sz TarFile._loadcCs:|jrtd|jj|dur6|j|vr6td|jdS)Nz %s is closedzbad operation for mode %r)rrrrpr)rrr8r8r9r szTarFile._checkcCs`|r.dtdtj|j|jf}d}n |j}|}|j||dd}|dur\t d||S)NrT)rrVzlinkname %r not found) r rrr|r%r rr rr)rrr limitrr8r8r9r3 s  zTarFile._find_link_targetccs|jr|jEdHdSd}|jdur:|}|d7}|V|t|jkrT|j|}n"|jsr|}|svd|_dSndS|d7}|Vq:dS)Nrr#T)rrrr{r2)rrSrr8r8r9__iter__ s$   zTarFile.__iter__cCs||jkrt|tjddS)Nr)rrmrkstderr)rlevelmsgr8r8r9r s z TarFile._dbgcCs ||Sr)rrr8r8r9 __enter__ szTarFile.__enter__cCs,|dur|n|js"|jd|_dSr)rrrr)rrr2 tracebackr8r8r9__exit__ s   zTarFile.__exit__) NryNNNNNNr-NNNN)ryN)ryNr)ryNr)ryNN)NNN)T)NT)N)rN)rT)TF)NF)N)=rprqrrrrrrrrSr r6r7rrrr1r rrrrrrrrrrrrrrrrrrr)r*r r!r&r+r2r,r6r5r:r7r8r9r#r%r$r{rrrr3rYrr^r`r8r8r8r9rhs oZ        c&3 5 -     1! ? ( rcCsFz,t|drt|d}nt|}|WdSty@YdS0dS)Nr^)rTF)rrrr)rrr8r8r9r s   rc Cs`ddl}d}|j|d}|jdddddd |jd d td d |jdd}|jddddd|jdddddd|jdddddd|jdd dd!d|}|jr|jdur|d"d#|j durJ|j }t |r4t |d$*}| t | tjd%Wdn1s0Y|jrFt d&|n|d"d'|n|jdur|j}t |rt |d(}|j|jd)Wdn1s0Yn|d"d'|n|jdurt|jd"kr|jd}tj}n,t|jd*kr|j\}}n|d"|t |rt |d( }|j||jd+Wdn1sR0Y|jr|d,krzd-|} n d.||} t | n|d"d'|n|jdur\|jd} tj| \} } d/d/d0d0d1d1d1d1d2} | | vrd3| | nd4}|j}t | |&}|D]}||qWdn1s<0Y|jr\t d5| dS)6Nrz3A simple command-line interface for tarfile module.) descriptionz-vz --verbose store_trueFzVerbose output)actiondefaulthelpz--filterz zFilter for extraction)metavarchoicesreT)requiredz-lz--list zShow listing of a tarfile)rfrez-ez --extract+)riz zExtract tarfile into target dir)nargsrfrez-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction ryrZz{!r} is a tar archive.z{!r} is not a tar archive. r)rr$)r%rrz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrr)rz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rzz{!r} file created.)argparseArgumentParser add_argumentradd_mutually_exclusive_group parse_argsrr*exittestrrrrmrkr[rrSrrr2r|curdir format_helpr)Zcreatepopr%splitextr)rlraparserrargsr`rZtfrsr]Ztar_namerextZ compressionsZtar_modeZ tar_files file_namer8r8r9main% s           2  0    0      .r{__main__)T)nversion __author__ __credits__builtinsrrrkr|rr[rrrVr&rerrrrAttributeErrorNotImplementedErrorrJr NameError__all__rr r3rrr;r6r8r7rMrrerrrPrQr*rZCONTTYPEr>r=rfrGrIrtr rrrrwrrirrrCrIrrr getfilesystemencodingr:r?rNrTrYr\rnrQrr rrr r rsrtrurKrvrwrobjectrrBufferedReaderrrrrrrrrrrrrr%compilerrrrr{rpr8r8r8r9 s          sh  ?  3_