
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
El„fï  ã               @   s&  d dl Z d dlZd dlZdZdZdddddd	d
ddg	ZdZy:d dlZi Zej	d#k rZded< ej
efdddœe—Ž W nJ   yd dlZeejd< W n& ek
r¸   d dlZeejd< Y nX Y nX dd„ Zd$dd„Zd%dd„Zd&dd„Zdad'dd„Zd(dd	„Zdd
„ Zd)dd „Zd!d„ Zd*d"d„ZdS )+é    Nz_admin$z_role$Úget_all_interfacesÚget_interfaces_from_xmlÚ	get_adminÚget_userÚget_interface_dictÚget_interface_format_textÚ!get_interface_compile_format_textÚget_xml_fileÚinterface_compile_testzselinux-pythoné   TÚunicodez/usr/share/localezutf-8)Z	localedirZcodesetÚ_c             C   s,   g }t | ƒ}x|jƒ D ]}|j|ƒ qW |S )z' Get all interfaces from given xml file)r   ÚkeysÚappend)ÚpathZinterfaces_listÚidictÚk© r   ú/usr/lib/python3.6/interface.pyr   4   s
    Ú c             C   s0   ddl m} g }| s|ƒ }nt| ƒ}t|ƒ}|S )Nr   )Úget_methods)Úsepolicyr   r	   r   )r   r   Zall_interfacesÚxml_pathr   r   r   r   =   s    c             C   sÂ   g }| rŽy:t | ƒ}t|ƒ}x$|jƒ D ]}|jdƒr$|j|ƒ q$W W q¾ tk
rŠ } z,tjjd|j	j
t|ƒf ƒ tjdƒ W Y dd}~X q¾X n0x.tjƒ D ]"}|jdƒr˜|j|jdƒd ƒ q˜W |S )z? Get all domains with an admin interface from installed policy.Z_adminz%s: %s
é   Nr   )r	   r   r   Úendswithr   ÚIOErrorÚsysÚstderrÚwriteÚ	__class__Ú__name__ÚstrÚexitr   r   Úsplit)r   Z
admin_listr   r   r   ÚeÚir   r   r   r   I   s    

c             C   sú   g }| r¦yRt | ƒ}t|ƒ}x<|jƒ D ]0}|jdƒr$d|dd	…  tjƒ kr$|j|ƒ q$W W qö tk
r¢ } z,tj	j
d|jjt|ƒf ƒ tjdƒ W Y dd}~X qöX nPxNtjƒ D ]B}tjdt |ƒ}t|ƒdkr°d|d  tjƒ kr°|j|d ƒ q°W |S )
z1 Get all domains with SELinux user role interfaceZ_rolez	%s_exec_tNé   z%s: %s
r   z(.*)%sr   éûÿÿÿ)r	   r   r   r   r   Zget_all_typesr   r   r   r   r   r   r    r!   r"   r   ÚreÚfindallÚUSER_TRANSITION_INTERFACEÚlen)r   Z
trans_listr   r   r   r$   r%   Úmr   r   r   r   _   s$    
ú#/usr/share/selinux/devel/policy.xmlc       
      C   sX  dd l }dd l}trtS i ag }d}|| 7 }|d7 }�y|jj| ƒrT|jjj| ƒ}n|jjj|ƒ}xÖ|j	dƒD ]È}xÂ|j	dƒD ]´}xV|j
dƒD ]H}x"|j	dƒD ]}	|j|	jdƒƒ qžW ||jd	ƒjdgt|jdƒ< g }qŽW xV|j
d
ƒD ]H}x"|j	dƒD ]}	|j|	jdƒƒ qöW ||jd	ƒjd
gt|jdƒ< g }qæW q~W qnW W n tk
�rR   Y nX tS )Nr   zZ<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<policy>
<layer name="admin">
z
</layer>
</policy>
ZlayerÚmoduleÚ	interfaceZparamÚnameZsummaryÚtemplate)ÚosZxml.etree.ElementTreeÚinterface_dictr   ÚisfileZetreeZElementTreeÚparseZ
fromstringr)   Zgetiteratorr   ÚgetÚfindÚtextr   )
r   r2   ZxmlZ
param_listr   ZtreeÚlr,   r%   r$   r   r   r   r   z   s:    c             C   s<   t |ƒ}d| dj||  d ƒdj||  d jdƒƒf }|S )Nz	%s(%s) %sz, r   ú r   Ú
)r   Újoinr#   )r/   r   r   Úinterface_textr   r   r   r   ¤   s    0c             C   sL   ddl m} g }x6| | d D ]&}|j|j| ƒ d|dj|ƒf }qW |S )Nr   )Útest_moduler   z%s(%s)
z, )Ú	templatesr>   r   Údict_valuesr<   )Zinterfaces_dictr/   r>   Z	param_tmpr%   r=   r   r   r   r   «   s    Úcompiletestc             C   s6   ddl m} d}|tjd||jƒ7 }|t|| ƒ7 }|S )Nr   )r>   r   ZTEMPLATETYPE)r?   r>   r(   ÚsubZte_test_moduler   )r/   r   r0   r>   Úter   r   r   Úgenerate_compile_teµ   s
    rD   c             C   s¬   ddl }yddlm} W n  tk
r8   ddlm} Y nX |jj| ƒd }|jj| ƒjdƒd }|d| | ƒ\}}|dkr¤t	j
jdƒ t	j
jd| ƒ t	jd	ƒ n|S dS )
z; Returns xml format of interfaces for given .if policy filer   N)Úgetstatusoutputú/Ú.zDpython /usr/share/selinux/devel/include/support/segenxml.py -w -m %sz-
 Could not proceed selected interface file.
z
%sr   )r2   ÚcommandsrE   ÚImportErrorÚ
subprocessr   ÚdirnameÚbasenamer#   r   r   r   r"   )Zif_filer2   rE   ZbasedirÚfilenameÚrcÚoutputr   r   r   r	   ¾   s    c             C   s‚  dddddg}dg}yddl m} W n  tk
rD   ddlm} Y nX dd l}d	d
dddœ}t|ƒ}| jdƒd |kp„||  d |k�sjttdƒ|  ƒ yft	|d dƒ}|j
t| |ƒƒ |jƒ  |d|d  ƒ\}	}
|	dkrütjj
|
ƒ tjj
tdƒ|  ƒ W n< tk
�r: } ztjj
tdƒ| |f ƒ W Y d d }~X nX x@|jƒ D ]}|jj|ƒ�rF|j|ƒ �qFW ntjj
tdƒ|  ƒ d S )NZuserdomZkernelZcorenetÚfilesZdevr1   r   )rE   zcompiletest.ppzcompiletest.tezcompiletest.fczcompiletest.if)ÚpprC   ZfcÚifr   é   zCompiling %s interfacerC   Úwz,make -f /usr/share/selinux/devel/Makefile %srQ   z
Compile test for %s failed.
z%
Compile test for %s has not run. %s
z,
Compiling of %s interface is not supported.)rH   rE   rI   rJ   r2   r   r#   Úprintr   Úopenr   rD   Úcloser   r   ÚEnvironmentErrorÚvaluesr   ÚexistsÚremove)r/   r   Zexclude_interfacesZexclude_interface_typerE   r2   Zpolicy_filesr   ÚfdrN   rO   r$   Úvr   r   r   r
   Ð   s2    $*)r   )r   )r   )r   )r-   )r-   )rA   )r-   )r(   r   r   ZADMIN_TRANSITION_INTERFACEr*   Ú__all__ZPROGNAMEÚgettextÚkwargsÚversion_infoZinstallÚbuiltinsr!   Ú__dict__rI   Z__builtin__r   r   r   r   r   r3   r   r   r   rD   r	   r
   r   r   r   r   Ú<module>   sB   
	



*


	