
    d                     b    d dl Z d dlZd dlmZ d dlmZmZmZ  G d de      Zej                  Zy)    N)Path)ExtractErrorTarInfoTarFilec                        e Zd ZdZ	  eej                        Z xZS # e$ r* ddd fdZ	ddd fdZ
d Zd Zd Zd	 Zd
 Zd ZY  xZS w xY w)r   zThis TarFile implementation is trying to ameliorate CVE-2007-4559,
    where tarfile.TarFiles can step outside of the target directory
    using '../../'.
    Fnumeric_ownerc                L    | j                          t        | 	  ||||       y )N)	set_attrsr	   )_safetarfile_checksuperextract)selfmemberpathr   r	   	__class__s        4/usr/lib/python3/dist-packages/samba/safe_tarfile.pyr   zTarFile.extract$   s)    ##%GOFDI*7  9    c                J    | j                          t        | 	  |||       y )Nr   )r   r   
extractall)r   r   membersr	   r   s       r   r   zTarFile.extractall*   s(    ##%GtW-:  <r   c                 *   | j                         D ]  }| j                  |      rt        d|j                         | j	                  |      rt        d|j
                         | j                  |      sjt        d|j
                          y )N)tarinfoz*Attempted directory traversal for member: z6Attempted directory traversal via symlink for member: z3Attempted directory traversal via link for member: )__iter___is_traversal_attemptr   name_is_unsafe_symlinklinkname_is_unsafe_linkr   r   s     r   r   zTarFile._safetarfile_check/   s    ==? 7--g->&##*<<.23 3 **7*;&##*#3#3"467 7 '''8&##*#3#3"467 77r   c                 z    t         j                  j                  t         j                  j                  |            S N)osr   realpathabspath)r   r   s     r   _resolve_pathzTarFile._resolve_path>   s$    77##BGGOOD$9::r   c                 ~    | j                  t        j                  j                  ||            j	                  |      S r"   )r&   r#   r   join
startswith)r   r   basedirs      r   _is_path_in_dirzTarFile._is_path_in_dirA   s4    %%bggll7&*', --7Z-@Ar   c                     |j                   j                  t        j                        sdt        j                  z   |j                   v ryy)Nz..TF)r   r)   r#   sepr    s     r   r   zTarFile._is_traversal_attemptE   s2    ''/-7<</r   c                 2   |j                         rt        t        j                  j	                  t        j                  j                  t        j                         |j                                    }| j                  |t        j                               syyNTF)	issymr   r#   r   normpathr(   getcwdr   r+   )r   r   symlink_files      r   r   zTarFile._is_unsafe_symlinkK   se    }}#GG$$RWW\\"))+%,%5%5&7 8 9 ++L"))+Fr   c                 2   |j                         rt        t        j                  j	                  t        j                  j                  t        j                         |j                                    }| j                  |t        j                               syyr/   )	islnkr   r#   r   r1   r(   r2   r   r+   )r   r   	link_files      r   r   zTarFile._is_unsafe_linkT   sh    }} GG$$RWW\\"))+292B2B&D EF	 ++Iryy{Cr   ) Tr"   )__name__
__module____qualname____doc__staticmethodtarfile
tar_filterextraction_filterAttributeErrorr   r   r   r&   r+   r   r   r   __classcell__)r   s   @r   r   r      sh    
= )););< 8	9"'	9	<% 	<
	7	;	A			c8s    )AAr   )	r#   r=   pathlibr   r   r   r   UnsafeTarFileopen r   r   <module>rF      s0   $ 
   C CCm CL ||r   