a
    W×a  ã                   @   sP   d dl mZ d dlmZmZ d dlmZ d dlm	Z	 d dl
Z
G dd„ deƒZdS )é    )Úprint_function)ÚBlackboxTestCaseÚBlackboxProcessError)Úparam)ÚCredentialsNc                       s\   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚSmbCaclsBlockboxTestBasec                    sŽ   t t| ƒ ¡  t ¡ | _tjd | _tjd | _	tjd | _
tƒ | _| j | j¡ | j | j	¡ | j | j
¡ t dd¡| _t dd¡| _d S )NZSERVERZUSERZPASSWORDZTESTDIRÚsmbcaclsZSHAREÚtmp)Úsuperr   ÚsetUpÚs3paramZget_contextZlpÚosÚenvironÚserverÚuserÚpasswdr   ZcredsZguessZset_usernameZset_passwordÚgetenvÚtestdirÚshare)Úself©Ú	__class__© ú?/usr/lib/python3/dist-packages/samba/tests/blackbox/smbcacls.pyr      s    
zSmbCaclsBlockboxTestBase.setUpc              
   C   sâ   z2|   dd| j| jf dd| j g¡}|  |¡ W nª tyÜ } z’tdt|ƒ ƒ tj	 
tjd | j¡}td| ƒ tj	 |¡rÈt |¡D ]}tj	 
||¡}qŠtj	 |¡r¾dd l}| |¡ n
t |¡ W Y d }~n
d }~0 0 d S )	NÚ	smbclientú//%s/%sú-czdeltree %s/*zremote remove failed: %sZ
LOCAL_PATHz2falling back to removing contents of local dir: %sr   )Úbuild_test_cmdr   r   r   Úcheck_outputÚ	ExceptionÚprintÚstrr   ÚpathÚjoinr   ÚexistsÚlistdirÚisdirÚshutilZrmtreeÚunlink)r   Úsmbclient_argsÚeÚdirpathÚentryÚfullpathr'   r   r   r   ÚtearDown)   s    $z!SmbCaclsBlockboxTestBase.tearDownc                 C   s2   |  ¡ D ]$\}}td||f dd tdƒ qd S )Nz%s=%s,Ú )Úend©Úitemsr    )r   ÚaceÚkeyÚvaluer   r   r   Úace_dump>   s    z!SmbCaclsBlockboxTestBase.ace_dumpc                 C   sd   |  ¡ D ]V\}}|dkrq||vr4td| ƒ  dS ||| krtd||||| f ƒ  dS qdS )NÚuser_domzno entry for: %sFzmismatch: %s:%s != %s:%sTr1   )r   ÚleftÚrightr4   r5   r   r   r   Úace_cmpC   s    z SmbCaclsBlockboxTestBase.ace_cmpc                 C   s¦   |  d¡}i }|d dkr&td| ƒ‚d|d v rN|d   d¡\|d< |d< n4d	|d v rv|d   d	¡\|d< |d< n|d |d< |d
   d	¡\|d< |d< |d< |S )Nú:r   ÚACLzinvalid ace string:%ú\é   r7   r   ú/é   ÚtypeZinheritZpermissions)Úsplitr   )r   r3   ÚpartsÚresultr   r   r   Úace_parse_strO   s    
 z&SmbCaclsBlockboxTestBase.ace_parse_strc                 C   s"   |d| j | jf g}| |¡ |S )Nz-U%s%%%s)r   r   Úextend)r   ÚcmdÚargsr   r   r   r   ]   s    
z'SmbCaclsBlockboxTestBase.build_test_cmdc                 C   s2   d| j | jf g}| |¡ |  |  d|¡¡}|S )Nr   r   )r   r   rF   r   r   )r   rH   Z
cacls_argsÚoutr   r   r   Ú	smb_caclsb   s    
z"SmbCaclsBlockboxTestBase.smb_caclsc           
   	   C   sâ   |   ¡ Æ}tj | j|¡}tj |¡\}}d}t|ƒr| j ddd¡}| tj¡D ]<}|d | }|  	dd| j
| jf dd| g¡}|  |¡ qR|  	dd| j
| jf dd	||f g¡}|  |¡}	W d   ƒ n1 sÔ0    Y  |S )
Nr/   r?   r=   é
   r   r   r   zmkdir %sz
put  %s %s)Zmktempr   r"   r#   r   rB   ÚlenÚreplaceÚsepr   r   r   r   )
r   Ú
remotepathZtmpfileÚfilepathr+   ÚfilenameZremote_pathZsegr)   rI   r   r   r   Úcreate_remote_test_fileh   s    
"&(z0SmbCaclsBlockboxTestBase.create_remote_test_filec              
   C   s,  |   dd| j| jf d|g¡}z|  |¡}W n2 ty^ } ztt|ƒƒ W Y d }~dS d }~0 0 | ¡ }g }| d¡D ]}| 	d¡rv| 
|¡ qv|D ]’}	|  |	¡}
|d |
d kr”|d |
d kr”td	|
d  ƒ |  |
|¡std
ƒ |  |
¡ tdƒ |  |¡ q”td|
d  ƒ |  |¡  dS q”dS )Nr   r   z--getFÚ
r<   r   rA   zfound ACE for %szdifferences between file ACE: zand expected ACE: zmatched ACE for %sT)r   r   r   r   r   r    r!   ÚdecoderB   Ú
startswithÚappendrE   r:   r6   )r   rO   r3   Zsmbcacls_argsÚoutputr*   Zout_strZacesÚlineZaclZacl_acer   r   r   Úfile_ace_checkx   s8    ÿÿ

 

z'SmbCaclsBlockboxTestBase.file_ace_check)Ú__name__Ú
__module__Ú__qualname__r   r.   r6   r:   rE   r   rJ   rR   rY   Ú__classcell__r   r   r   r   r      s   r   )Z
__future__r   Zsamba.testsr   r   Zsamba.samba3r   r   Zsamba.credentialsr   r   r   r   r   r   r   Ú<module>   s
   