
    g                     ^    S SK r S SKrS SKJr  S SKJrJr   " S S\5      r\R                  rg)    N)Path)ExtractErrorTarFilec                      ^  \ rS rSrSr \" \R                  5      rSrU =r$ ! \	 a2    SSS.U 4S jjjr
SSS.U 4S jjjrS rS rS	 rS
 rS rS r SrU =r$ f = f)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                D   > U R                  5         [        TU ]	  XUUS9  g )N)	set_attrsr	   )_safetarfile_checksuperextract)selfmemberpathr   r	   	__class__s        4/usr/lib/python3/dist-packages/samba/safe_tarfile.pyr   TarFile.extract$   s'    ##%GOFI*7  9    c                B   > U R                  5         [        TU ]	  XUS9  g )Nr   )r   r   
extractall)r   r   membersr	   r   s       r   r   TarFile.extractall*   s&    ##%Gt-:  <r   c                 :   U R                  5        H  nU R                  US9(       a  [        SUR                   35      eU R	                  US9(       a  [        SUR
                   35      eU R                  US9(       d  Mq  [        SUR
                   35      e   g )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   TarFile._safetarfile_check/   s    ==?--g->&##*<<.23 3 **7*;&##*#3#3"467 7 '''88&##*#3#3"467 7 +r   c                 z    [         R                  R                  [         R                  R                  U5      5      $ N)osr   realpathabspath)r   r   s     r   _resolve_pathTarFile._resolve_path>   s$    77##BGGOOD$9::r   c                 ~    U R                  [        R                  R                  UU5      5      R	                  U5      $ r%   )r)   r&   r   join
startswith)r   r   basedirs      r   _is_path_in_dirTarFile._is_path_in_dirA   s4    %%bggll7&*', --7Z-@Ar   c                     UR                   R                  [        R                  5      (       d!  S[        R                  -   UR                   ;   a  gg)Nz..TF)r   r-   r&   sepr"   s     r   r   TarFile._is_traversal_attemptE   s5    ''//-7<</r   c                 J   UR                  5       (       a  [        [        R                  R	                  [        R                  R                  [        R                  " 5       UR                  5      5      5      nU R                  U[        R                  " 5       5      (       d  ggNTF)	issymr   r&   r   normpathr,   getcwdr    r/   )r   r   symlink_files      r   r   TarFile._is_unsafe_symlinkK   sj    }}#GG$$RWW\\"))+%,%5%5&7 8 9 ++L"))+FFr   c                 J   UR                  5       (       a  [        [        R                  R	                  [        R                  R                  [        R                  " 5       UR                  5      5      5      nU R                  U[        R                  " 5       5      (       d  ggr5   )	islnkr   r&   r   r7   r,   r8   r    r/   )r   r   	link_files      r   r!   TarFile._is_unsafe_linkT   sm    }} GG$$RWW\\"))+292B2B&D EF	 ++Iryy{CCr    ) Tr%   )__name__
__module____qualname____firstlineno____doc__staticmethodtarfile
tar_filterextraction_filterAttributeErrorr   r   r   r)   r/   r   r   r!   __static_attributes____classcell__)r   s   @r   r   r      sw    
= )););< 8	9"'	9 	9	<% 	< 	<
	7	;	A			 	c8s   # 0AAr   )r&   rG   pathlibr   r   r   UnsafeTarFileopenr?   r   r   <module>rP      s-   $ 
   :Cm CL ||r   