
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
yb!                 @   s\  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m	Z	m
Z
mZ ddlmZmZ ddlmZmZ ddlmZ dj jd	Zd
j jd	ZdZdd Zdd Ze j dd Zejejjddeje dG dd deZejejjddeje dG dd deZ ejejjd"dG dd deZ!dd Z"d d! Z#dS )#    N   )acl_getacl_setswidth)get_process_idprocess_alive   )BaseTestCaseunopened_tempfile)free_pidzs
user::rw-
user:root:rw-:0
user:9999:r--:9999
group::r--
group:root:r--:0
group:9999:r--:9999
mask::rw-
other::r--
asciizs
user::rw-
user:root:r--:0
user:8888:r--:8888
group::r--
group:root:r--:0
group:8888:r--:8888
mask::rw-
other::r--
c               C   s
   dt jkS )NZFAKEROOTKEY)osenviron r   r    /usr/lib64/python3.6/platform.pyfakeroot_detected)   s    r   c             C   s,   yt j|  dS  ttfk
r&   dS X d S )NTF)pwdgetpwnamKeyError
ValueError)Zusernamer   r   r   user_exists-   s
    
r   c              C   s   t  v} t| dj  yLd}d|i}t| | i }t| |tj|  |jdd }|r`d|kr`dS W n tk
rv   Y nX dS Q R X d S )NwsQ   user::rw-
group::r--
mask::rw-
other::---
user:root:rw-:9999
group:root:rw-:9999

acl_accesss	   user::rw-TF)	r
   opencloser   r   r   statgetPermissionError)filepathaccessaclZread_aclZread_acl_accessr   r   r   are_acls_working5   s    
r!   linuxzlinux only testznot compatible with fakerootc               @   s   e Zd Zdd Zdd ZdddZdd	d
Zeje	  ddd Z
eje	  ddd Zejed deje	  ddd Zdd ZdS )PlatformLinuxTestCasec             C   s   t j | _d S )N)tempfilemkdtemptmpdir)selfr   r   r   setUpK   s    zPlatformLinuxTestCase.setUpc             C   s   t j| j d S )N)shutilrmtreer&   )r'   r   r   r   tearDownN   s    zPlatformLinuxTestCase.tearDownFc             C   s   i }t ||tj||d |S )N)numeric_owner)r   r   r   )r'   pathr,   itemr   r   r   get_aclQ   s    zPlatformLinuxTestCase.get_aclNc             C   s   ||d}t |||d d S )N)r   acl_default)r,   )r   )r'   r-   r   defaultr,   r.   r   r   r   set_aclV   s    
zPlatformLinuxTestCase.set_aclzACLs do not workc             C   s   t j }| j| j|ji  | j|jddd | jd| j|jd  | jd| j|jd  | jd| j|jdd	d  t j }| j|jddd | jd
| j|jd  | jd| j|jd  d S )NsQ   user::rw-
group::r--
mask::rw-
other::---
user:root:rw-:9999
group:root:rw-:9999
F)r   r,   s   user:root:rw-:0r   s   group:root:rw-:0s   user:0:rw-:0T)r,   s   user:9999:rw-:9999s   group:9999:rw-:9999)r$   NamedTemporaryFileassert_equalr/   namer2   	assert_in)r'   filefile2r   r   r   test_access_aclZ   s    z%PlatformLinuxTestCase.test_access_aclc             C   sZ   | j | j| ji  | j| jttd | j | j| jd t | j | j| jd t d S )N)r   r1   r   r0   )r4   r/   r&   r2   
ACCESS_ACLDEFAULT_ACL)r'   r   r   r   test_default_aclg   s    z&PlatformLinuxTestCase.test_default_aclu   übelu   requires übel userc             C   s>  t j }| j| j|ji  djd}djd}djd}djd}djd}dj|||g}| j|j|d	d
 | j|jd	dd }| j|| | j|| | j|jddd }	| j||	 | j||	 t j }
| j|
j|dd
 | j|
jd	dd }| j|| | j|| | j|jddd }	| j||	 | j||	 d S )Nz*user::rw-
group::r--
mask::rw-
other::---
r   u   user:übel:rw-:666zutf-8zuser:666:rw-:666u   group:übel:rw-:666zgroup:666:rw-:666   
F)r   r,   )r,   r   T)	r$   r3   r4   r/   r5   encodejoinr2   r6   )r'   r7   Znothing_specialZ
user_entryZuser_entry_numericZgroup_entryZgroup_entry_numericr    r   Zacl_access_numericr8   r   r   r   test_non_ascii_acln   s.    




z(PlatformLinuxTestCase.test_non_ascii_aclc             C   sP   ddl m} | j|dd | j|dd | j|dd | j|d	d
 d S )Nr   )acl_use_local_uid_gids   user:nonexistent1234:rw-:1234s   user:1234:rw-s   group:nonexistent1234:rw-:1234s   group:1234:rw-s   user:root:rw-:0s
   user:0:rw-s   group:root:rw-:0s   group:0:rw-)Zplatform.linuxrA   r4   )r'   rA   r   r   r   
test_utils   s
    z PlatformLinuxTestCase.test_utils)F)NNF)__name__
__module____qualname__r(   r+   r/   r2   unittestskipIfr!   r9   r<   r   r@   rB   r   r   r   r   r#   G   s   

r#   darwinzOS X only testc               @   sH   e Zd Zdd Zdd ZdddZddd	Zeje	  d
dd Z
dS )PlatformDarwinTestCasec             C   s   t j | _d S )N)r$   r%   r&   )r'   r   r   r   r(      s    zPlatformDarwinTestCase.setUpc             C   s   t j| j d S )N)r)   r*   r&   )r'   r   r   r   r+      s    zPlatformDarwinTestCase.tearDownFc             C   s   i }t ||tj||d |S )N)r,   )r   r   r   )r'   r-   r,   r.   r   r   r   r/      s    zPlatformDarwinTestCase.get_aclc             C   s   d|i}t |||d d S )Nacl_extended)r,   )r   )r'   r-   r    r,   r.   r   r   r   r2      s    zPlatformDarwinTestCase.set_aclzACLs do not workc             C   s   t j }t j }| j| j|ji  | j|jddd | jd| j|jd  | jd| j|jd  | j|jddd | jd| j|jd  | jd	| j|jddd  d S )
Ns   !#acl 1
group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:staff:0:allow:read
user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:read
F)r,   s>   group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014:staff:20:allow:readrJ   s;   user:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000:root:0:allow:readTs=   group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000:wheel:0:allow:reads8   group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000::0:allow:read)r$   r3   r4   r/   r5   r2   r6   )r'   r7   r8   r   r   r   r9      s    z&PlatformDarwinTestCase.test_access_aclN)F)F)rC   rD   rE   r(   r+   r/   r2   rF   rG   r!   r9   r   r   r   r   rI      s
   

rI   freebsdzPOSIX only testsc               @   s$   e Zd Zdd Zdd Zdd ZdS )PlatformPosixTestCasec             C   s   | j tdd d S )NZborg   )r4   r   )r'   r   r   r   test_swidth_ascii   s    z'PlatformPosixTestCase.test_swidth_asciic             C   s   | j tdd d S )Nu   バックアップ   r      )r4   r   )r'   r   r   r   test_swidth_cjk   s    z%PlatformPosixTestCase.test_swidth_cjkc             C   s   | j tdd d S )Nu   borgバックアップrM   rO   r   rP      )r4   r   )r'   r   r   r   test_swidth_mixed   s    z'PlatformPosixTestCase.test_swidth_mixedN)rC   rD   rE   rN   rQ   rS   r   r   r   r   rL      s   rL   c             C   sZ   t  }t| st|\}}}t|d ||s0tt|||d sDtt|| | sVtd S )Nabcr   )r   r   AssertionError)r   idhostpidtidr   r   r   test_process_alive   s    
rZ   c              C   sj   t  \} }}t| tstt|ts(tt|ts6tt| dksFt|dksRtt  | ||fksftd S )Nr   )r   
isinstancestrrU   intlen)ZhostnamerX   rY   r   r   r   test_process_id   s    r_   )r"   rK   rH   )$	functoolsr   Zrandomr)   sysr$   r   rF   platformr   r   r   r   r    r	   r
   Zlockingr   stripr>   r:   r;   Z_acls_workingr   r   	lru_cacher!   Z
skipUnless
startswithrG   r#   rI   rL   rZ   r_   r   r   r   r   <module>   s6   
L
	