
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
Elf                 @   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 }| ry: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 qX n0x.tj D ]"}|jdr|j|jdd  qW |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 }| ryRt | }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 qX nPxNtj D ]B}tjdt |}t|dkrd|d  tj kr|j|d  qW |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 qW ||jd	jdgt|jd< g }qW xV|j
d
D ]H}x"|j	dD ]}	|j|	jd qW ||jd	jd
gt|jd< g }qW 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rt	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rt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   
	



*


	