
    M/ek                        d Z ddlZddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmc mZ ddlmZ 	 ddlZddlZddlZd	ZdZdZdZ ej4                  ed       G d de             Z G d de      Z G d de      Z ej4                  ed       G d de             Z G d dej"                        Z ej4                  ed       G d dej"                               Z  G d dej"                        Z! G d d ej"                        Z" G d! d"ej"                        Z# G d# d$ej"                        Z$ G d% d&ej"                        Z% G d' d(ej"                        Z& G d) d*ejN                        Z(ejR                  d+        Z*d, Z+d- Z,d. Z-d2d/Z.e/d0k(  r4 ej`                   ejb                  ejd                  d1d e3gz                yy# e$ r d
ZY w xY w)3z#Tests for certbot.compat.filesystem    N)mock)util)lock)
filesystem)os)TempDirTestCaseFTzS-1-1-0zS-1-5-18zS-1-5-32-544z"Tests specific to Windows securityreasonc                   ^     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z xZS )WindowsChmodTestsz:Unit tests for Windows chmod function in filesystem modulec                 V    t         |           t        | j                        | _        y NsupersetUp_create_probetempdir
probe_pathself	__class__s    P/usr/lib/python3/dist-packages/certbot/_internal/tests/compat/filesystem_test.pyr   zWindowsChmodTests.setUp#       '5    c                    t         j                  j                  | j                  d      }t        j                  | j
                  |       t        | j
                        j                         }t        |      j                         }t        j                  |d       t        | j
                        j                         }t        |      j                         }t        j                  ||      rJ t        j                  ||      sJ y )Nlink  )r   pathjoinr   symlinkr   _get_security_daclGetSecurityDescriptorDaclr   chmod_compare_dacls)r   	link_pathref_dacl_proberef_dacl_linkcur_dacl_probecur_dacl_links         r   test_symlink_resolutionz)WindowsChmodTests.test_symlink_resolution'   s    GGLLv6	


4??I.+DOO<VVX*95OOQE* ,DOO<VVX*95OOQ,,^^LLL((FFFr   c                    t        j                  t              }t        j                  | j
                  d       t        | j
                        j                         }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , c}rJ t        j                  | j
                  d       t        | j
                        j                         }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , c}sJ y c c}w c c}w )Nr   r      i  )win32securityConvertStringSidToSidEVERYBODY_SIDr   r#   r   r!   r"   rangeGetAceCountGetAce)r   	everybodydaclindexs       r   test_world_permissionz'WindowsChmodTests.test_world_permission6   s   !77F	%0!$//2LLN49!T=M=M=O4P A5![[/2i? KK& A 	A A 	%0!$//2LLN05a9I9I9K0L @u KK.q1Y> E" @ 	@ @A@s   9/E/Ec                 @   t        j                  | j                  d       t        | j                        j	                         }t        j                  | j                  d       t        | j                        j	                         }t        j
                  ||      sJ y )Nr   i  )r   r#   r   r!   r"   r$   )r   r&   r(   s      r   test_group_permissions_noopz-WindowsChmodTests.test_group_permissions_noopE   sn    %0+DOO<VVX%0+DOO<VVX((HHHr   c                    t        j                  t              }t        j                  t              }t	        j
                  | j                  d       t        | j                        j                         }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , }}t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , }}t        |      dk(  sJ t        |      dk(  sJ |d   d   t        j                  k(  sJ |d   d   t        j                  k(  sJ y c c}w c c}w )N   r   r,      )r-   r.   
SYSTEM_SID
ADMINS_SIDr   r#   r   r!   r"   r0   r1   r2   lenntsecurityconFILE_ALL_ACCESS)r   systemadminsr4   r5   system_aces
admin_acess          r   test_admin_permissionsz(WindowsChmodTests.test_admin_permissionsN   sN   44Z@44Z@%0!$//2LLN7<Q@P@P@R7S ;e++e,Q/69 {{5) ; ;6;At?O?O?Q6R :UU+A.&8 kk%( :
 : ;1$$$:!###1~a M$A$AAAA!}Q=#@#@@@@;:s   /E'/E,c                 D    | j                  dt        j                         y )N   )
_test_flagr?   FILE_GENERIC_READr   s    r   test_read_flagz WindowsChmodTests.test_read_flag`   s    =::;r   c                 D    | j                  dt        j                         y Nr;   )rH   r?   FILE_GENERIC_EXECUTErJ   s    r   test_execute_flagz#WindowsChmodTests.test_execute_flagc   s    ===>r   c                     | j                  dt        j                  t        j                  z  t        j                  z         y )Nr,   )rH   r?   r@   rI   rN   rJ   s    r   test_write_flagz!WindowsChmodTests.test_write_flagf   s6    M99+==>+@@A 	Cr   c                 D    | j                  dt        j                         y )N   )rH   r?   r@   rJ   s    r   test_full_flagz WindowsChmodTests.test_full_flagk   s    =889r   c                    t        j                  | j                  d|z         t        | j                        j	                         }t        j                  t              }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , }}t        |      dk(  sJ |d   }|d   |k(  sJ y c c}w )Nr   r   r,   r;   )r   r#   r   r!   r"   r-   r.   r/   r0   r1   r2   r>   )r   everyone_modewindows_flagr4   r3   r5   acls_everybodys          r   rH   zWindowsChmodTests._test_flagn   s     	%-*?@!$//2LLN!77F	:?4CSCSCU:V A![[/2i? ++e, A A >"a''''*a L000As   </Cc                    t        j                  dt        j                               \  }}}t	        | j
                        }t        | j
                  ||       t        j                  | j
                  d       t        | j
                        }|j                         j                         dk(  sJ t        j                  t              }t	        | j
                        }t        | j
                  ||       t        j                  | j
                  d       t        | j
                        }|j                         j                         dk(  sJ y )N r      r,   )r-   LookupAccountNamewin32apiGetUserName_get_security_ownerr   
_set_ownerr   r#   r!   r"   r1   r.   r=   )r   authenticated_user_security_ownersecurity_dacl
admin_users         r    test_user_admin_dacl_consistencyz2WindowsChmodTests.test_user_admin_dacl_consistency   s    #0#B#B2xG[G[G]#^ Aq,T__=4??N4FG%0*4??;668DDF!KKK #88D
,T__=4??NJ?%0*4??; 668DDF!KKKr   )__name__
__module____qualname____doc__r   r*   r6   r8   rE   rK   rO   rQ   rT   rH   rf   __classcell__r   s   @r   r   r       sC    D6G@IA$<?C
:1"Lr   r   c                   *    e Zd Zd Zd Zedd       Zy)	UmaskTestc                    t        j                  d      }	 t        j                  j	                  | j
                  d      }t        j                  |       t        j                  |d      du sJ t        j                  d       t        j                  j	                  | j
                  d      }t        j                  |       t        j                  |d      du sJ t        j                  j	                  | j
                  d      }t        j                  |d	
       t        j                  |d      du sJ 	 t        j                  |       y # t        j                  |       w xY w)N   probe1  T?   dir2r   dir3  )mode)r   umaskr   r   r   r   mkdir
check_mode)r   previous_umaskdir1rt   ru   s        r   test_umask_on_dirzUmaskTest.test_umask_on_dir   s   #))%0	-77<<h7DT"((u5===U#77<<f5DT"((u5===77<<f5DT.((u5===^,J^,s   D"E E'c                    t        j                  d      }	 t        j                  j	                  | j
                  d      }t        j                  |       t        j                  |d      du sJ t        j                  d       t        j                  j	                  | j
                  d      }t        j                  |       t        j                  |d      du sJ t        j                  j	                  | j
                  d      }t        j                  |       t        j                  |d      du sJ 	 t        j                  |       y # t        j                  |       w xY w)	Nrp   rq   rr   Trs   probe2r   probe3)	r   rx   r   r   r   r   rn   _create_filerz   )r   r{   file1file2file3s        r   test_umask_on_filezUmaskTest.test_umask_on_file   s   #))%0	-GGLLx8E""5)((6$>>>U#GGLLx8E""5)((6$>>>GGLLx8E""5)((6$>>>^,J^,s   D E E%c                     d }	 t        j                  | t        j                  |      }|rt        j                  |       y y # |rt        j                  |       w w xY w)N)flagsrw   )r   openr   O_CREATclose)r   rw   	file_descs      r   r   zUmaskTest._create_file   sK    		$"BJJTJI# y# s   &A AN)rv   )rg   rh   ri   r}   r   staticmethodr    r   r   rn   rn      s     -(-( $ $r   rn   c                   $     e Zd Z fdZd Z xZS )ComputePrivateKeyModeTestc                 V    t         |           t        | j                        | _        y r   r   r   s    r   r   zComputePrivateKeyModeTest.setUp   r   r   c                     t        j                  | j                  d       t        j                  | j                  d      }t        r|dk(  sJ y |dk(  sJ y )Nrv   i  i  )r   r#   r   compute_private_key_mode
POSIX_MODE)r   new_modes     r   test_compute_private_key_modez7ComputePrivateKeyModeTest.test_compute_private_key_mode   sO    %066tN u$$$ u$$$r   )rg   rh   ri   r   r   rk   rl   s   @r   r   r      s    6
%r   r   c                   $    e Zd Zd Zd Zd Zd Zy)WindowsOpenTestc                    t         j                  j                  | j                  d      }t	        j
                  |t         j                  t         j                  z  t         j                  z  d      }t        j                  |       t        |      j                         }t        j                  t              }t        d|j!                               D cg c]*  }|j#                  |      d   |k(  r|j#                  |      , c}rJ y c c}w )Nfiler   r   r,   )r   r   r   r   r   r   r   O_EXCLO_RDWRr   r!   r"   r-   r.   r/   r0   r1   r2   r   r   descr4   r3   r5   s         r   !test_new_file_correct_permissionsz1WindowsOpenTest.test_new_file_correct_permissions   s    ww||DLL&1tRZZ"))%;bii%GO
!$'AAC!77F	49!T=M=M=O4P A5![[/2i? KK& A 	A A A As   /D
c                 0   t         j                  j                  | j                  d      }t	        |d      j                          t        j                  |t         j                  t         j                  z  d      }t        j
                  |       t        |      j                         }t        j                  t              }t        d|j                               D cg c]*  }|j!                  |      d   |k(  r|j!                  |      , c}rJ y c c}w )Nr   wr   r   r,   )r   r   r   r   r   r   r   r   r   r!   r"   r-   r.   r/   r0   r1   r2   r   s         r   &test_existing_file_correct_permissionsz6WindowsOpenTest.test_existing_file_correct_permissions   s    ww||DLL&1T3tRYY%:EB
!$'AAC!77F	49!T=M=M=O4P A5![[/2i? KK& A 	A A A As   /Dc                    | j                  ddt        j                  t        j                  z         t	        j
                  t              5 }| j                  ddt        j                  t        j                  z         d d d        j                  j                  t        j                  k(  sJ | j                  ddt        j                         | j                  ddt        j                         t        j                  j                  | j                  d      }t        |d	      j                          t        j                   |      }	 t	        j
                  t              5 }| j                  d
dt        j                         d d d        |j                  j                  t        j"                  k(  sJ 	 |j%                          t	        j
                  t              5  | j                  ddt        j&                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# |j%                          w xY w# 1 sw Y   y xY w)Nr;   F)
file_existr   r,   Tr[   rG   5r         )_test_one_creationr   r   r   pytestraisesOSErrorvalueerrnoEEXISTr   r   r   r   r   r   LockFileEACCESreleaseO_RDONLY)r   exc_infor   filelocks       r   test_create_file_on_openz(WindowsOpenTest.test_create_file_on_open   s   eBJJ<RT ]]7# 	Xx##A$rzzBII?U#W	X~~##u||333 	e2::F 	d"**E ww||DLL#.T3==&	w' N8''d"**'MN>>''5<<777 ]]7# 	L##A%r{{#K	L 	L-	X 	XN N 	L 	Ls<   4HH, )#H 1H, '#IH H)%H, ,H>I
c                    t         j                  j                  | j                  t	        |            }|r5t         j                  j                  |      st        |d      5  	 d d d        d }	 t        j                  ||      }|rt        j                  |       y y # 1 sw Y   ;xY w# |rt        j                  |       w w xY w)Nr   )	r   r   r   r   strexistsr   r   r   )r   numr   r   one_filehandlers         r   r   z"WindowsOpenTest._test_one_creation  s    77<<c#h7bggnnX6h$  	" ooh6G!   ! s   !B.B) B&)CN)rg   rh   ri   r   r   r   r   r   r   r   r   r      s    
AAL<"r   r   c                   "    e Zd ZdZd Zd Zd Zy)TempUmaskTestsz8Tests for using the TempUmask class in `with` statementsc                 Z    t        j                  d      }t        j                  |       |S )Nr   )r   rx   )r   	old_umasks     r   _check_umaskzTempUmaskTests._check_umask&  s&    $$Q'	#r   c                    t        j                  d       | j                         dk(  sJ t        j                  d      5  | j                         dk(  sJ 	 d d d        | j                         dk(  sJ y # 1 sw Y   xY wNrp   rs   )r   rx   r   
temp_umaskrJ   s    r   test_works_normallyz"TempUmaskTests.test_works_normally+  sx       "f,,,""6* 	1$$&&000	1  "f,,,	1 	1s    A55A>c                    t        j                  d       | j                         dk(  sJ 	 t        j                  d      5  | j                         dk(  sJ t	               # 1 sw Y   y xY w#  | j                         dk(  sJ Y y xY wr   )r   rx   r   r   	ExceptionrJ   s    r   !test_resets_umask_after_exceptionz0TempUmaskTests.test_resets_umask_after_exception2  s       "f,,,	1&&v. "((*f444k!" "	1$$&&000s#   A-  A!!A*&A- *A- -BN)rg   rh   ri   rj   r   r   r   r   r   r   r   r   $  s    B
-1r   r   !Test specific to Windows securityc                   "    e Zd ZdZd Zd Zd Zy)WindowsMkdirTestszFUnit tests for Windows mkdir + makedirs functions in filesystem modulec                    t         j                  j                  | j                  d      }t	        j
                  |d       t        j                  t              }t        |      j                         }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , c}rJ y c c}w )Ndirr   r   r,   )r   r   r   r   r   ry   r-   r.   r/   r!   r"   r0   r1   r2   )r   r   r3   r4   r5   s        r   test_mkdir_correct_permissionsz0WindowsMkdirTests.test_mkdir_correct_permissions@  s    ww||DLL%0u%!77F	!$'AAC49!T=M=M=O4P A5![[/2i? KK& A 	A A A As   /Cc                    t         j                  j                  | j                  d      }t         j                  j                  |d      }t	        j
                  |d       t        j                  t              }t        |      j                         }t        d|j                               D cg c]*  }|j                  |      d   |k(  r|j                  |      , c}rJ y c c}w )Nr   subpathr   r   r,   )r   r   r   r   r   makedirsr-   r.   r/   r!   r"   r0   r1   r2   )r   r   r   r3   r4   r5   s         r   !test_makedirs_correct_permissionsz3WindowsMkdirTests.test_makedirs_correct_permissionsK  s    ww||DLL%0'',,tY/GU+!77F	!'*DDF49!T=M=M=O4P A5![[/2i? KK& A 	A A A As   //C$c                 0   t         j                  j                  | j                  d      }dd l }|j                  }t        j                  |       ||j                  k(  sJ 	 t        j                  |       ||j                  k(  sJ y # t        $ r Y w xY w)Nr   r   )r   r   r   r   ry   r   r   r   )r   r   std_osoriginal_mkdirs       r   test_makedirs_switch_os_mkdirz/WindowsMkdirTests.test_makedirs_switch_os_mkdirW  s    ww||DLL%0D!---	% ---  		s   "B	 		BBN)rg   rh   ri   rj   r   r   r   r   r   r   r   r   =  s    P	A
A.r   r   c                       e Zd ZdZd Zy)MakedirsTestsz5Unit tests for makedirs function in filesystem modulec                    t         j                  j                  | j                  d      }t         j                  j                  |d      }t	        j
                  d      }	 t	        j                  |d       t	        j                  |d      sJ t	        j                  |d      sJ 	 t	        j
                  |       y # t	        j
                  |       w xY w)Nr   r   rp   r   )r   r   r   r   r   rx   r   rz   )r   r   r   r{   s       r   r   z/MakedirsTests.test_makedirs_correct_permissionsh  s    ww||DLL%0'',,tY/#))%0	-/((u555((%888^,J^,s   !AB> >CN)rg   rh   ri   rj   r   r   r   r   r   r   f  s
    ?-r   r   c                        e Zd ZdZ fdZ ej                  ed      d        Z ej                  ed      d        Z
d Z ej                  ed      d	        Z xZS )
CopyOwnershipAndModeTestzYTests about copy_ownership_and_apply_mode, copy_ownership_and_mode and has_same_ownershipc                 V    t         |           t        | j                        | _        y r   r   r   s    r   r   zCopyOwnershipAndModeTest.setUpy  r   r   r   r	   c           	      \   t        j                  t              }t        j                         j                  }|j                  |d       t        j                  d      5 }t        j                  d      5 }||_        t        j                  d| j                  ddd       d d d        d d d        j                  dk(  sJ |j                  d	   }|d	   d   }||j                         k(  sJ |j                  d
   }|d	   d   }|j                         }t        j                  t               }|j#                         sJ t%        d	|j#                               D 	cg c]*  }	|j'                  |	      d   |k(  r|j'                  |	      , c}	rJ y # 1 sw Y   xY w# 1 sw Y   xY wc c}	w )NFwin32security.GetFileSecurityzwin32security.SetFileSecuritydummyr   T	copy_user
copy_groupr,   r   r;   )r-   r.   r<   SECURITY_ATTRIBUTESSECURITY_DESCRIPTORSetSecurityDescriptorOwnerr   patchreturn_valuer   copy_ownership_and_apply_moder   
call_countcall_args_listGetSecurityDescriptorOwnerr"   r/   r1   r0   r2   )
r   rA   securitymock_getmock_set
first_callsecond_callr4   r3   r5   s
             r   *test_copy_ownership_and_apply_mode_windowszCCopyOwnershipAndModeTest.test_copy_ownership_and_apply_mode_windows}  s   44Z@ 446JJ++FE:ZZ78 	WH;< W(0%88T__etPUWW	W ""a''',,Q/
a=#<<>>>>--a0q>!$113!77F	!!!49!T=M=M=O4P A5![[/2i? KK& A 	A A A!W W	W 	W"As*   F5,F!F/F)F	FF&Test specific to Linux securityc           
         t        j                  d      5 }t        j                  d      5 }t        j                  d      5 }d|j                  _        d|j                  _        t        j                  d| j                  ddd	       d d d        d d d        d d d        j                  | j                  dd       j                  | j                  d       y # 1 sw Y   SxY w# 1 sw Y   WxY w# 1 sw Y   [xY w)
Nzos.chownzos.chmodzos.stat2   3   r   r   Tr   )	r   r   r   st_uidst_gidr   r   r   assert_called_once_with)r   
mock_chown
mock_chmod	mock_stats       r   (test_copy_ownership_and_apply_mode_linuxzACopyOwnershipAndModeTest.test_copy_ownership_and_apply_mode_linux  s    ZZ
# 	ZzJ' Z:ZZ	* Zi46I**146I**1<<%4TXZZZ	Z 	**4??BC**4??EBZ ZZ Z	Z 	Zs;   C3C'AC	C'C3C$ C''C0	,C33C<c                 p   t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t	        j
                  |d      j                          t	        j
                  |d      j                          t        j                  ||      du sJ y )Ntest1test2r   T)	r   r   r   r   r   	safe_openr   r   has_same_ownership)r   path1path2s      r   test_has_same_ownershipz0CopyOwnershipAndModeTest.test_has_same_ownership  s{    T\\73T\\73uc"((*uc"((*,,UE:dBBBr   c                    | j                   }t        | j                  d      }t        j                  |d       t        j
                  |d      du sJ t        j
                  |d      du sJ t        j                  d      5 }t        j                  ||       d d d        j                  ||       t        j
                  |d      du sJ y # 1 sw Y   6xY w)Ndst)namer   T  z-certbot.compat.filesystem._copy_win_ownership)
r   r   r   r   r#   rz   r   r   copy_ownership_and_moder   )r   srcr  mock_copy_owners       r   $test_copy_ownership_and_mode_windowsz=CopyOwnershipAndModeTest.test_copy_ownership_and_mode_windows  s    ooDLLu5e$$$S%0D888$$S%0D888
 ZZGH 	9O..sC8	9 	//S9$$S%0D888		9 	9s   CC)rg   rh   ri   rj   r   unittestskipIfr   r   
skipUnlessr   r  r
  rk   rl   s   @r   r   r   w  s    c6 X__Z(KLA MA2 X,MN
C O
CC X__Z(KL9 M9r   r   c                        e Zd ZdZ fdZd Z ej                  ed      d        Z	 ej                  ed      d        Zd	 Zd
 Zd Z xZS )CheckPermissionsTestz-Tests relative to functions that check modes.c                 V    t         |           t        | j                        | _        y r   r   r   s    r   r   zCheckPermissionsTest.setUp  r   r   c                     t        j                  | j                  d      du sJ t        j                  | j                  d       t        j                  | j                  d      rJ y Nr  Tr   )r   rz   r   r#   rJ   s    r   test_check_modez$CheckPermissionsTest.test_check_mode  sR    $$T__e<DDD%0((%@@@@r   r   r	   c                    t        j                  | j                        du sJ t        j                  t
              }t        j                         j                  }|j                  |d       t        j                  d      5 }||_        t        j                  | j                        rJ 	 d d d        y # 1 sw Y   y xY w)NTFr   )r   check_ownerr   r-   r.   r<   r   r   r   r   r   r   )r   rA   r   r   s       r   test_check_owner_windowsz-CheckPermissionsTest.test_check_owner_windows  s    %%doo6$>>>44Z@ 446JJ++FE:ZZ78 	?H$,H!!--doo>>>>	? 	? 	?s   )B55B>r   c                    t        j                  | j                        du sJ dd l}|j	                         }t        j                  d      5 }|dz   |_        t        j                  | j                        rJ 	 d d d        y # 1 sw Y   y xY w)NTr   z	os.getuidr;   )r   r  r   r   getuidr   r   r   )r   r   uidmock_uids       r   test_check_owner_linuxz+CheckPermissionsTest.test_check_owner_linux  sy    %%doo6$>>> mmoZZ$ 	?$'!GH!!--doo>>>>	? 	? 	?s   ,BBc                    t        j                  | j                  d      du sJ t        j                  d      5 }d|_        t        j                  | j                  d      rJ 	 d d d        t        j                  d      5 }d|_        t        j                  | j                  d      rJ 	 d d d        y # 1 sw Y   RxY w# 1 sw Y   y xY w)Nr  Tz$certbot.compat.filesystem.check_modeFz%certbot.compat.filesystem.check_owner)r   check_permissionsr   r   r   r   )r   	mock_mode
mock_owners      r   test_check_permissionsz+CheckPermissionsTest.test_check_permissions  s    ++DOOUCtKKKZZ>? 	L9%*I"!33DOOUKKKK	L ZZ?@ 	LJ&+J#!33DOOUKKKK	L 	L		L 	L	L 	Ls   *B6*C6B?Cc                    t        j                  | j                  d       t        j                  | j                  d      du sJ t        j                  | j                  d       t        j                  | j                  d      rJ t        j                  | j                  d       t        j                  | j                  d      rJ y )Nr  Tr   i  )r   r#   r   has_min_permissionsrJ   s    r   test_check_min_permissionsz/CheckPermissionsTest.test_check_min_permissions  s    %0--doouEMMM%011$//5III%011$//5IIIIr   c                    t        j                  | j                  d       t        j                  | j                        du sJ t        j                  | j                  d       t        j                  | j                        rJ y r  )r   r#   r   has_world_permissionsrJ   s    r   test_is_world_reachablez,CheckPermissionsTest.test_is_world_reachable  sb    %0//@DHHH%033DOODDDDr   )rg   rh   ri   rj   r   r  r  r  r   r  r  r  r   r#  r&  rk   rl   s   @r   r  r    sk    76A X__Z(KL	? M	? X,MN? O?	LJEr   r  c                       e Zd ZdZd Zy)OsReplaceTestz3Test to ensure consistent behavior of rename methodc                    t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t	        |d      j                          t	        |d      j                          t        j                  ||       t         j                  j                  |      rJ t         j                  j                  |      du sJ y)zKEnsure that replace will effectively rename src into dst for all platforms.r  r  r   TN)	r   r   r   r   r   r   r   replacer   )r   r  r  s      r    test_os_replace_to_existing_filez.OsReplaceTest.test_os_replace_to_existing_file  s    ggll4<</ggll4<</S#S# 	3$77>>#&&&ww~~c"d***r   N)rg   rh   ri   rj   r+  r   r   r   r(  r(    s
    =+r   r(  c                   .     e Zd ZdZ fdZd Zd Z xZS )RealpathTestzTests for realpath methodc                 V    t         |           t        | j                        | _        y r   r   r   s    r   r   zRealpathTest.setUp  r   r   c                    t        j                  | j                        | _        t        j                  j                  | j                  d      }t        j                  | j                  |       | j                  t        j                  | j                        k(  sJ | j                  t        j                  |      k(  sJ t        j                         }t        j                  j                  | j                  d      }t        j                  j                  | j                        }	 t        j                  t        j                  j                  | j                               t        j                  ||       | j                  t        j                  |      k(  sJ | j                  t        j                  |      k(  sJ 	 t        j                  |       y # t        j                  |       w xY w)Nlink_abslink_rel)r   realpathr   r   r   r   r   r    getcwdbasenamechdirdirname)r   r%   curdir
probe_names       r   r*   z$RealpathTest.test_symlink_resolution  s@   $--doo>GGLLz:	


4??I.*"5"5doo"FFFF*"5"5i"@@@@ GGLLz:	WW%%doo6
	HHRWW__T__56JJz9-??j&9&9*&EEEE??j&9&9)&DDDDHHVBHHVs   )BG G1c                    t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t        j                  ||       t        j                  ||       t        j                  ||       t        j                  t        d      5 }t        j                  |       d d d        y # 1 sw Y   y xY w)Nlink1link2link3zlink1 is a loop!)match)
r   r   r   r   r    r   r   RuntimeErrorr   r2  )r   
link1_path
link2_path
link3_patherrors        r   test_symlink_loop_mitigationz)RealpathTest.test_symlink_loop_mitigation0  s    WW\\$,,8
WW\\$,,8
WW\\$,,8



:z*


:z*


:z*]]</AB 	,e
+	, 	, 	,s   C;;D)rg   rh   ri   rj   r   r*   rC  rk   rl   s   @r   r-  r-    s    #6.	,r   r-  c                   $   e Zd ZdZd Z ej                  d       ej                  d      d               Z ej                  d       ej                  d      d               Z ej                  d       ej                  d      d               Z	y)	IsExecutableTestzTests for is_executable methodc                    t         j                  j                  | j                  d      }ddlm dfd	}t        j                  d|      5  t        j                  t        j                  |t         j                  t         j                  z  d             d d d        t        j                  |      rJ y # 1 sw Y   !xY w)	Nfoor   )_generate_daclc                 |     | ||      }t        d|j                               D ]  }|j                  d        |S rM   )r0   r1   	DeleteAce)user_sidrw   maskr4   rb   rH  s        r   _execute_mockz;IsExecutableTest.test_not_executable.<locals>._execute_mockK  sA    !(D$7D1d..01 "q!"Kr   z(certbot.compat.filesystem._generate_dacl)side_effecti  r   )r   r   r   r   certbot.compat.filesystemrH  r   r   r   r   r   r   O_WRONLYis_executable)r   	file_pathrM  rH  s      @r   test_not_executablez$IsExecutableTest.test_not_executable>  s    GGLLu5	 	=	 ZZBP]^ 	RHHZ__Y

R[[0H%PQ	R ++I6666	R 	Rs   A
B99Cz(certbot.compat.filesystem.os.path.isfilez#certbot.compat.filesystem.os.accessc                     t               5  d|_        d|_        t        j                  d      du sJ 	 d d d        y # 1 sw Y   y xY w)NTz/path/to/exe_fix_windows_runtimer   r   rQ  r   mock_accessmock_isfiles      r   test_full_pathzIsExecutableTest.test_full_pathW  sL     "# 	D'+K$'+K$++N;tCCC	D 	D 	D	   (=Ac                     t               5  d|_        d|_        t        j                  d      du sJ 	 d d d        y # 1 sw Y   y xY w)NTexerU  rW  s      r   test_rel_pathzIsExecutableTest.test_rel_path_  sH     "# 	;'+K$'+K$++E2d:::	; 	; 	;r[  c                     t               5  d|_        d|_        t        j                  d      rJ 	 d d d        y # 1 sw Y   y xY w)NTFr]  rU  rW  s      r   test_not_foundzIsExecutableTest.test_not_foundg  sF     "# 	7'+K$',K$!//6666	7 	7 	7s	   &;AN)
rg   rh   ri   rj   rS  r   r   rZ  r^  r`  r   r   r   rE  rE  <  s    (72 TZZ:;TZZ56D 7 <D TZZ:;TZZ56; 7 <; TZZ:;TZZ567 7 <7r   rE  c                   &   e Zd Z ej                  ed       ej                  d      d               Z ej                  ed       ej                  d      d               Z
 ej                  ed       ej                  d      d               Zy)	ReadlinkTestzTests specific to Linuxr	   z%certbot.compat.filesystem.os.readlinkc                 F    d|_         t        j                  d      dk(  sJ y )Nz/normal/pathr   r   r   readlinkr   mock_readlinks     r   test_path_posixzReadlinkTest.test_path_posixq  s%     &4"""7+~===r   zTests specific to Windowsc                     d|_         t        j                  d      dk(  sJ d|_         t        j                  d      dk(  sJ y )NzC:\short\pathr   z\\?\C:\short\pathrd  rf  s     r   test_normal_path_windowsz%ReadlinkTest.test_normal_path_windowsw  sJ     &7"""7+/@@@@ &>"""7+/@@@@r   c                     dddz  z   |_         t        j                  t              5  t	        j
                  d       d d d        y # 1 sw Y   y xY w)Nz\\?\C:\longi  z\pathr   )r   r   r   
ValueErrorr   re  rf  s     r   test_extended_path_windowsz'ReadlinkTest.test_extended_path_windows  sD     &7%H"]]:& 	)(	) 	) 	)s   AAN)rg   rh   ri   r  r  r   r   r   rh  r  rj  rm  r   r   r   rb  rb  p  s    X,EFTZZ78> 9 G> X__Z(CDTZZ78A 9 EA X__Z(CDTZZ78) 9 E)r   rb  c               #     K   t         j                  dk7  rd  y t        j                  d      5 } | j                  j
                  }|j                  j                  }t        j                  |_        d  d d d        y # 1 sw Y   y xY ww)Nntr   )	r   r  r   r   r   r"   GetEffectiveRightsFromAclr?   rN   )r   	dacl_mock	mode_mocks      r   rV  rV    sj     	ww$ZZ78 	H --GGI!..HHI%2%G%GI"		 	 	s   .BAA?6	B?BBc                 J    t        j                  | t         j                        S r   )r-   GetFileSecurityDACL_SECURITY_INFORMATIONtargets    r   r!   r!     s    ((1X1XYYr   c                 J    t        j                  | t         j                        S r   )r-   rt  OWNER_SECURITY_INFORMATIONrv  s    r   r_   r_     s    ((1Y1YZZr   c                 r    |j                  |d       t        j                  | t        j                  |       y )NF)r   r-   SetFileSecurityry  )rw  rc   users      r   r`   r`     s.    --dE:!!88.Jr   c                     t        j                  | d       t        j                  j	                  | |      }t        j                  |dd      j                          |S )Nr  r   )r#   )r   r#   r   r   r   r   r   r   )r   r  r   s      r   r   r     sE    We$gt,JNN:s%0668r   __main__r;   )probe)4rj   
contextlibr   sysr  r   r   certbotr   certbot._internalr   certbot.compatr   r   certbot.tests.utiltests	test_utilr   r?   r]   r-   r   ImportErrorr/   r<   r=   r  r   rn   r   r   r   r   r   r   r  r(  r-  rE  TestCaserb  contextmanagerrV  r!   r_   r`   r   rg   exitmainargv__file__r   r   r   <module>r     s   )   
     " %  & & .J 

 $HItL tL JtLn0$ 0$f% %$ $HIC"o C" JC"L1Y.. 12 $GH%.	11 %. I%.P-I-- -"F9y88 F9R@E944 @EF+I-- + &,9,, &,R17y00 17h)8$$ )4  Z[J zCHH[V[[!"
234 k  Js   G   G+*G+