
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
Flfz                 @   s6  d dl Z d dlZd dlZd dlZd dljZd dljZd dlZd dl	Z	d dl
Z
d dlZdZy:d dlZi Zejdk rxd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
ZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'i Z(de(d< de(d< de(d< de(d < de(d!< d"e(d#< d$e(d%< d&e(d'< d(e(d)< d(e(d*< d+e(d,< d+e(d-< d.e(d/< d0e(d1< i Z)e*d2e)d3< e*d4e)d5< e*d6e)d7< e*d8e)d9< e*d:e)d;< e*d<e)d=< e*d>e)d?< e*d@e)dA< i Z+d3e+dB< d5e+dC< d7e+dD< d9e+dE< d;e+dF< d=e+dG< d?e+dH< dAe+dI< da,da-da.da/da0g a1da2da3da4da5da6da7da8da9da:da;da<da=da>da?da@daAdaBdaCdaDdJdK ZEddMdNZFdOdP ZGdQdR ZHdSdT ZIyeF ZJeHeJ W n6 eKk
r ZL zejM d
kreLW Y ddZL[LX nX ddUdVZNdWdX ZOddYdZZPd[d\ ZQd]d^ ZRd_d` ZSdadb ZTdcdd ZUdedf ZVdgdh ZWg fdidjZXg fdkdlZYdmdn ZZej[ fdodpZ\ej[ fdqdrZ]ej[ fdsdtZ^ej[ fdudvZ_dwdx Z`dydz Zad{d| Zbd}d~ Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|e|fddZ}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd ZdddńZdddǄZddɄ Zdd˄ Zdd̈́ Zddτ ZdS )    Nzselinux-python   Tunicodez/usr/share/localezutf-8)Z	localedirZcodeset_                  allowZ
auditallowZ
neverallowZ	dontauditsourcetargetpermlistclassZ
transitionZ
role_allowZetc_tz/etcZtmp_tz/tmpZunit_file_tz/usr/lib/systemd/systemz/lib/systemd/systemz/etc/systemd/systemZvar_cache_tz
/var/cacheZ	var_lib_tz/var/libZlog_tz/var/logZ	var_run_tz/var/runz/runZ
var_lock_tz	/run/lockz/var/run/lockZvar_spool_tz
/var/spoolZ	content_tz/var/wwwz	all filesazregular filefZ	directorydzcharacter deviceczblock devicebzsocket fileszsymbolic linklz
named pipep z--z-dz-cz-bz-sz-lz-pc             C   s:   | j ddd }yt|| fS  tk
r4   d| fS X d S )Nz/policy.r   r   )rsplitint
ValueError)Zpolicy_path	extension r   /usr/lib/python3.6/__init__.pypolicy_sortkeyy   s
    r   /c          	   C   sL   y.| t j  }tjd| }|jtd |d S    Y nX ttdd S )Nz%s.*)keyr   zNo SELinux Policy installed)selinuxZselinux_binary_policy_pathglobsortr   r   r   )rootpathpoliciesr   r   r   get_installed_policy   s    r)   c             C   s2   t j dtj | f }|sdS |jtd |d S )z?Get the path to the policy file located in the given store namez%s%s/policy/policy.*N)r!   r   r"   )r$   r#   Zselinux_pathr%   r   )storer(   r   r   r   get_store_policy   s    r+   c          	   C   sT   d a d ad ad ad ad ad ad ad ayt	j
| aW n   ttd|  Y nX d S )NzFailed to read %s policy file)all_domainsall_attributesbools	all_typesrole_allowsZusersroles
file_types
port_typessetoolsZSELinuxPolicy_polr   r   )policy_filer   r   r   policy   s    
r7   c             C   s   t | }|sd S t| d S )N)r+   r7   )r*   r6   r   r   r   load_store_policy   s    r8   c             C   s  | t krZtjt}||_t|j }|rLt|dk rLd |_||_t|j }dd |D S | t	krtj
t}|rv||_dd |j D S | tkrtjt}|r||_dd |j D S | tkrFtjt}|rdd |jdD }t|d	k r||_n t|dkr|d
 |d
 f|_tjr4dd |j D S dd |j D S | tkrtjt}|rf||_tjrdd |j D S dd |j D S | tkrtjt}|r||_dd |j D S | tkrtjt}|r||_dd |j D S tdd S )Nr   c             s   sB   | ]:}t tt|j t|t|jt tt|j d V  qdS ))aliasesnameZ
permissive
attributesN)listmapstrr9   boolZispermissiver;   ).0xr   r   r   	<genexpr>   s   zinfo.<locals>.<genexpr>c             s   s:   | ]2}t |ttt |j ttt |j d V  qdS ))r:   r1   typesN)r>   r<   r=   expandrC   )r@   rA   r   r   r   rB      s   c             s   s*   | ]"}t |ttt |j d V  qdS ))r:   rC   N)r>   r<   r=   rD   )r@   rA   r   r   r   rB      s   c             S   s   g | ]}t |qS r   )r   )r@   ir   r   r   
<listcomp>   s    zinfo.<locals>.<listcomp>-r   r   c             s   s<   | ]4}|j jt|jt|jjt|jj|j jd V  qdS ))highprotocolrangetypelowN)portsrH   r>   rI   contextZrange_type_rL   )r@   rA   r   r   r   rB      s   c             s   s2   | ]*}|j jt|jt|jj|j jd V  qdS ))rH   rI   rK   rL   N)rM   rH   r>   rI   rN   rO   rL   )r@   rA   r   r   r   rB      s   c             s   s8   | ]0}t |jt |ttt |jt |jd V  qdS ))rJ   r:   r1   levelN)r>   Z	mls_ranger<   r=   r1   Z	mls_level)r@   rA   r   r   r   rB     s   c             s   s(   | ] }t |ttt |jd V  qdS ))r:   r1   N)r>   r<   r=   r1   )r@   rA   r   r   r   rB   
  s   c             s   s   | ]}t ||jd V  qdS ))r:   stateN)r>   rQ   )r@   rA   r   r   r   rB     s   c             s   s"   | ]}t |t|jd V  qdS ))r:   r   N)r>   r<   perms)r@   rA   r   r   r   rB     s   zInvalid type)TYPEr4   Z	TypeQueryr5   r:   r<   resultslenaliasROLE	RoleQuery	ATTRIBUTEZTypeAttributeQueryPORTZPortconQuerysplitrM   mlsUSERZ	UserQueryBOOLEANZ	BoolQueryTCLASSZObjClassQueryr   )setyper:   qrT   rM   r   r   r   info   sr    










rb   c          3   C   s`  t | jt | jt | jt | jd}y<i }x| jjD ]}|j|t |< q6W | jjf || j	k}W n t
k
rz   d}Y nX ||d< yttt | j|d< W n t
k
r   Y nX yt | j|d< W n t
k
r   Y nX ydd | jjD |d< W n t
k
r
   Y nX yt | j|d	< W n t
k
r4   Y nX y| j|d
< W n t
k
rZ   Y nX |S )N)rK   r   r   r   Tenabledr   	transtypec             S   s   g | ]}t ||jfqS r   )r>   rQ   )r@   r   r   r   r   rF   H  s    z)_setools_rule_to_dict.<locals>.<listcomp>booleansconditionalfilename)r>   ruletyper   r   tclassrf   re   rQ   ZevaluateZconditional_blockAttributeErrorr<   r=   rR   defaultrg   )Zruler   Z	boolstatebooleanrc   r   r   r   _setools_rule_to_dict'  sB    
rm   c             C   s  |si }t ttttttg}x&| D ]}||kr"tddj| q"W d }t	|kr\t
|t	 }d }t|krtt
|t }d }t|krt
|t jd}g }g }t| kr|jt t| kr|jt t| kr|jt t| kr|jt t|dkr.tjt||||d}	t|kr|t |	_|dd |	j D 7 }t| krdd	d
g}
tjt|
|||d}	t|krj|t |	_|dd |	j D 7 }t| krdg}tjt||||d}	x.|	j D ]"}|jt
|jt
|jd qW |S )NzType has to be in %s ,r   )rh   r   r   ri   c             S   s   g | ]}t |qS r   )rm   )r@   rA   r   r   r   rF     s    zsearch.<locals>.<listcomp>type_transitionZtype_changeZtype_memberc             S   s   g | ]}t |qS r   )rm   )r@   rA   r   r   r   rF     s    r   )r   r   )setALLOW
AUDITALLOW
NEVERALLOW	DONTAUDIT
TRANSITION
ROLE_ALLOWr   joinSOURCEr>   TARGETCLASSr[   appendrU   r4   TERuleQueryr5   PERMSrR   rT   RBACRuleQueryr   r   )rC   ZseinfoZvalid_typesr`   r   r   ri   ZtoretZtertypesra   ZrtypesZratypesrr   r   r   searchY  sn    











r   c                s  i }g }g gy(t tfddt d d 7 W n   Y nX y(t t fddt d d 7 W n   Y nX tdd tfddt }yHxB|D ]:}|j|d |d	 |d
 fd ||kr|j| i }qW W n tk
r    |S X |S )Nc                s   | d  kS )Nr:   r   )rA   )srcr   r   <lambda>  s    z"get_conditionals.<locals>.<lambda>r   r;   c                s   | d  kS )Nr:   r   )rA   )destr   r   r     s    c             S   s   | S )Nr   )yr   r   r   r     s    c                s2   | d ko0| d  ko0t j| t o0d| kS )Nr   r   rf   )rq   issubsetr~   )rA   )	dest_listpermsrc_listr   r   r     s    r   rf   rc   )r   rf   )r<   filterget_all_types_infor=   get_all_allow_rulesupdater|   KeyError)r   r   ri   r   ZtdictZtlistZallowsrE   r   )r   r   r   r   r   r   get_conditionals  s.    ((

 
r   c             C   sH   d}x| D ]}|d d r
d}P q
W t d|djttdd | f S )	NFrf   r   Tz-- Allowed %s [ %s ]z || c             S   s   d| d d | d d f S )Nz%s=%drf   r   r   r   )rA   r   r   r   r     s    z.get_conditionals_format_text.<locals>.<lambda>)r   rx   rq   r=   )Zcondrc   rA   r   r   r   get_conditionals_format_text  s    
r   c             C   s   t tt| d d S )Nr   rC   )r<   rb   rY   )Z	attributer   r   r   get_types_from_attribute  s    r   c             C   s   g }i }x&t  D ]}|jt| r|j| qW t }xN|D ]F}y$|| d t|| d  f||< W q< tk
r   g ||< Y q<X q<W |S )Nregexftype)get_all_file_types
startswithgen_short_namer|   
get_fcdictfile_type_strr   )r`   flistmpathsr   fcdictr   r   r   get_file_types  s    
$r   c             C   s8   | s| S yt tt| d S  ttfk
r2   | S X dS )zReturn the real name of a type

    * If 'name' refers to a type alias, return the corresponding type name.
    * Otherwise return the original name (even if the type does not exist).
    r:   N)nextrb   rS   RuntimeErrorStopIteration)r:   r   r   r   get_real_type_name  s    r   c       
      C   s<  t  }g }i }ttg| ddgdd}|d ks:t|dkr>|S t }ddg}x|D ]}|d |krdqRd	|krv|d	 svqR|d jd
r|d |krqR|d |kr|d | kr|j|d  qRx&t|d D ]}||kr|j| qW qRW xP|D ]H}	y$||	 d t||	 d  f||	< W q t	k
r2   g ||	< Y qX qW |S )Nopenwritefile)r   r   r   r   Z	proc_typeZsysctl_typer   rc   _tr   r   )
r   r   rr   rU   r   endswithr|   r   r   r   )
r`   r2   Z
all_writesr   r   r   r;   rE   tr   r   r   r   get_writable_files  s:    

$r   c                s   t jj| r| gS ytjd|   W n   td|  g S | }|jdrX|d d d }t jj|yd dkrzd7 W n tk
r   td Y nX y4tjd|    fdd	t	fd
dt j
D S    g S d S )Nz%s$zbad reg:z(/.*)?r	   r    r   ztry failed got an IndexErrorc                s   g | ]} j |r|qS r   )match)r@   rA   )patr   r   rF   (  s    zfind_file.<locals>.<listcomp>c                s    |  S )Nr   )rA   )r'   r   r   r   (  s    zfind_file.<locals>.<lambda>ir"   )osr'   existsrecompileprintr   dirname
IndexErrorr=   listdir)Zregr   r   )r   r'   r   	find_file  s,    

&r   c             C   sV   t | }xH|j D ]<}|jdr||krx$|| D ]}xt|D ]}|S W q2W qW d S )N_exec_t)get_entrypointskeysr   r   )domainexclude_listZexecutable_filesexer'   r   r   r   r   find_all_files-  s    r   c             C   s`   t  }y@| jdrD| |krDx(||  d D ]}xt|D ]}|S W q(W W n tk
rZ   Y nX d S )Nr   r   )r   r   r   r   )r   r   r   r'   r   r   r   r   find_entrypoint_path7  s    r   c             C   s   yZt |dF}x>|D ]6}|j }|r|d jd r|d |d| |d < qW W d Q R X W n0 tk
r } z|jtjkrz W Y d d }~X nX | S )Nr   r   #r   )Zequivmodify)r   r[   r   OSErrorerrnoENOENT)Zedictfc_pathr   fder   r   r   r   read_file_equivC  s    
(r   c             C   s"   t rt S i a tt | d dda t S )Nz.subsT)r   )file_equiv_modifiedr   )r   r   r   r   get_file_equiv_modifiedP  s
    r   c             C   s&   t rt S t| a tt | d dda t S )Nz
.subs_distF)r   )
file_equivr   r   )r   r   r   r   get_file_equivY  s
    r   c             C   s   t rt S g a y&t| d d}|j }W d Q R X W n. tk
r` } z|jtjkrR g S d }~X nX xl|D ]d}|j }t|dkrqhy4t|dkrt|d  }nd}t j	|d |f W qh t
k
r   Y qhX qhW t S )Nz.localr   r   r   r   r   )local_filesr   	readlinesr   r   r   r[   rU   trans_file_type_strr|   r   )r   r   fcr   rE   recr   r   r   r   get_local_file_pathsb  s,    

r   c             C   s  t rt S t| d}|j }|j  t| d d}||j 7 }|j  i a y*t| d d}||j 7 }W d Q R X W n0 tk
r } z|jtjkr W Y d d }~X nX x|D ]}|j }yjt|dkrt	|d  }nd}|d jdd }|t kr
t | d j
|d	  n|d	 g|d
t |< W q   Y qX qW ddgit d< ddgit d< ddgit d< ddgit d< ddgit d< ddgit d< ddgit d< ddgit d< ddgit d< t S )Nr   z	.homedirsz.localr   r   r   :r   r   )r   r   zall log filesZlogfilezall user tmp filesZuser_tmp_typezall user home filesZuser_home_typezall virtual image filesZvirt_image_typezBall files on file systems which do not support extended attributesZ	noxattrfsz)all sandbox content in tmpfs file systemsZsandbox_tmpfs_typez&all user content in tmpfs file systemsZuser_tmpfs_typezall files on the system	file_typezAuse this label for random content that will be shared using sambaZsamba_share_tr"   )r   r   r   closer   r   r   r[   rU   r   r|   )r   r   r   r   rE   r   r   r   r   r   r   r   ~  sJ    



r   c                s<   y fddt tgddiD S  ttfk
r6   Y nX d S )Nc                s   g | ]}|d   kr|qS )rd   r   )r@   rA   )r`   r   r   rF     s    z(get_transitions_into.<locals>.<listcomp>r   process)r   rv   	TypeErrorrj   )r`   r   )r`   r   get_transitions_into  s
    r   c             C   s0   yt tg| ddS  ttfk
r*   Y nX d S )Nr   )r   r   )r   rv   r   rj   )r`   r   r   r   get_transitions  s
    r   c             C   s8   ydd t tgd| iD S  ttfk
r2   Y nX d S )Nc             S   s   g | ]}|d  dkr|qS )r   r   r   )r@   rA   r   r   r   rF     s    z(get_file_transitions.<locals>.<listcomp>r   )r   rv   r   rj   )r`   r   r   r   get_file_transitions  s
    r   c          
   C   sd   g }t tgd| i}xJ|D ]B}d|kry(x"|d D ]}||kr2|j| q2W W q   Y qX qW |S )Nr   re   )r   rr   r|   )r`   rl   Zboollistr   r   r   r   r   r   get_boolean_rules  s    

r   c               C   s   t dS )NZ
entry_type)r   r   r   r   r   get_all_entrypoints  s    r   c                s0   t jttg dgdgd} fdd|j D S )Nr   
entrypoint)rh   r   ri   rR   c                s    g | ]}|j  krt|jqS r   )r   r>   r   )r@   rA   )r`   r   r   rF     s    z(get_entrypoint_types.<locals>.<listcomp>)r4   r}   r5   rr   rT   )r`   ra   r   )r`   r   get_entrypoint_types  s    
r   c                sh   t j| d jdd  y0tt fddttgddd}|d	 d
 S  ttt	fk
rb   Y nX d S )Nr   r   r   c                s   | d  kS )Nr   r   )rA   )r   r   r   r     s    z$get_init_transtype.<locals>.<lambda>init_tr   )r   r   r   rd   )
r#   Z
getfileconr[   r<   r   r   rv   r   rj   r   )r'   entrypointsr   )r   r   get_init_transtype  s    $r   c             C   sb   t jtdgddgd}g }xB|j D ]6}y|j| kr@|j|j W q$ tk
rX   w$Y q$X q$W |S )Nrp   r   r   )rh   r   ri   )r4   r}   r5   rT   rk   r|   r   rj   )rd   ra   r   rE   r   r   r   get_init_entrypoint  s    

r   c              C   s   t jtdgddgd} i }xd| j D ]X}y<t|j}||krR|| jt|j nt|jg||< W q$ tk
rz   w$Y q$X q$W |S )Nrp   r   r   )rh   r   ri   )	r4   r}   r5   rT   r>   rk   r|   r   rj   )ra   r   rE   rd   r   r   r   get_init_entrypoints_str  s    

r   c             C   sH   y*t dd ttgd| dd}t|d S  ttfk
rB   Y nX d S )Nc             S   s   | d S )Nrd   r   )rA   r   r   r   r     s    z,get_init_entrypoint_target.<locals>.<lambda>r   r   )r   r   r   r   )r=   r   rv   r<   r   r   )r   r   r   r   r   get_init_entrypoint_target
  s    r   c             C   sb   t  }i }xRt| D ]F}y$|| d t|| d  f||< W q tk
rX   g ||< Y qX qW |S )Nr   r   )r   r   r   r   )r`   r   r   r   r   r   r   r     s    $r   c           	   C   s   t tdkrtS t  tj } y4t| }tj }|j| t	|jj
 a|j  W n&   tjjd|   tjd Y nX tj  tS )Nr   z#could not open interface info [%s]
r   )rU   methodsgen_interfacesdefaultsinterface_infor   
interfacesZInterfaceSetZ	from_filer<   r   r   sysstderrr   exitr%   )fnr   Zifsr   r   r   get_methods  s    
r   c               C   s   t d krdd ttD a t S )Nc             S   s   g | ]}|d  qS )r:   r   )r@   rA   r   r   r   rF   6  s    z!get_all_types.<locals>.<listcomp>)r/   rb   rS   r   r   r   r   get_all_types3  s    r   c               C   s   t d krttta t S )N)all_types_infor<   rb   rS   r   r   r   r   r   9  s    r   c               C   s&   t d kr"ttttdd d a t S )NZ
userdomainr   rC   )
user_typesr<   rb   rY   r   r   r   r   get_user_types?  s    r   c              C   sz   t rt S i a tjttgd} xX| j D ]L}t|j}t|j}|dks&|dkrPq&|t krht | j	| q&|gt |< q&W t S )N)rh   Zsystem_r)
r0   r4   r   r5   rr   rT   r>   r   r   r|   )ra   r   r   Ztgtr   r   r   get_all_role_allowsF  s    

r   c              C   sz   dd l } g }tt }x^|D ]V}| jdd |}t|dkrt| jdd |d dkr|d |kr|j|d  qW |S )Nr   z(.*)%sz_exec_t$z_initrc$)r   sortedr   findallrU   r|   )r   r,   rC   rE   mr   r   r   get_all_entrypoint_domainsZ  s    

(r   c              C   s   yddl m}  W n  tk
r0   ddlm}  Y nX tj }tj }y tj|j	tj|j	kr`d S W n t
k
rv   Y nX tj dkrttdt| dd  d S )Nr   )getstatusoutputzEYou must regenerate interface info by running /usr/bin/sepolgen-ifgenz/usr/bin/sepolgen-ifgenr   )Zcommandsr   ImportError
subprocessr   r   headersr   statst_mtimer   getuidr   r   r   )r   Zifiler   r   r   r   r   f  s    r   c              C   s   t rt tfS i ai a xttD ]} | d | d kr@t| d }ndt| d t| d f }| d | d ft krt | d | d f j| n|gt | d | d f< d| kr| d | d ft| d | d | d f< q| d t| d | d | d f< qW t tfS )NrL   rH   z%s-%srK   rI   rJ   )portrecsportrecsbynumrb   rZ   r>   r|   )rE   Zportr   r   r   gen_port_dictx  s    ("r   c               C   s"   t sttttdd d a t S )Nr   r   rC   )r,   r<   rb   rY   r   r   r   r   get_all_domains  s    r   c              C   s(   t rt S tjt} dd | j D a t S )Nc             S   s    g | ]}t |d krt |qS )Zobject_r)r>   )r@   rA   r   r   r   rF     s    z!get_all_roles.<locals>.<listcomp>)r1   r4   rX   r5   rT   )ra   r   r   r   get_all_roles  s
    
r   c              C   s@   t s<ttta tjr<x$t D ]} dj| d jd| d< qW t S )Nr   rJ   rn   )selinux_user_listr<   rb   r]   r5   r\   rx   r[   )rA   r   r   r   get_selinux_users  s    
r   c              C   s   t rt S ttj d} | j }| j  g a xd|jdD ]V}|j }t|dks6|j	drZq6|jd}t j
|d |d dj|dd  d q6W t S )	Nr   
r   r   r   r   r   )r:   Zseuserr\   )login_mappingsr   r#   Zselinux_usersconf_pathreadr   r[   striprU   r   r|   rx   )r   bufr   rA   r   r   r   get_login_mappings  s    
,r  c               C   s   t tdd t S )Nc             S   s   | d S )Nr:   r   )rA   r   r   r   r     s    zget_all_users.<locals>.<lambda>)r   r=   r   r   r   r   r   get_all_users  s    r  c               C   s&   t rt S ttttdd d a t S )Nr   r   rC   )r2   r<   r   rb   rY   r   r   r   r   r     s    r   c               C   s&   t rt S ttttdd d a t S )NZ	port_typer   rC   )r3   r<   r   rb   rY   r   r   r   r   get_all_port_types  s    r  c               C   s   t sttta t S )N)r.   r<   rb   r^   r   r   r   r   get_all_bools  s    r	  c             C   s   dj | d t|  jdS )Nrn   r   )rx   rU   r[   )r   Ztrimr   r   r   prettyprint  s    r
  c             C   s   | S )Nr   )r   r   r   r   markup  s    r  c             C   sV  d||  }| j dr(|dt| d  S | j drD|dt| d  S | j dr`|dt| d  S | j dr||d	t| d  S | j d
r|dt| d  S | j dr|dt| d  S | j ds| j dr|d S | j dr|d S | j dr|dt| d  S | j dr|dt| d  S | j dr:|dt| d  S | j drX|dt| d  S | j dr~|d| d td    S | j dr|dt| d  S | j dr|dt| d  S | j dr|dt| d  S | j d r|dt| d   S | j d!r|d"t| d!  S | j d#r2|d$t| d#  S | j d%rP|d&t| d%  S | j d'rn|d(t| d'  S | j d)r|d*t| d'  S | j d+r|d$t| d+  S | j d,r|d-t| d,  S | j d.r|d/t| d.  S | j d0r|d1t| d0  S | j d2r"|d3t| d2  S | j d4r@|d1t| d4  S | j d5r^|d1t| d5  S | j d6r||d1t| d6  S | j d5r|d7t| d5  S | j d8r|d9t| d8  S | j d:r|d;t| d8  S | j d<r|d=t| d<  S | j d>r|d?t| d>  S | j d@r&|dA S | j dBrD|dCt| dB  S |dDt| dE  S )FNz+Set files with the %s type, if you want to Z
_var_run_tz8store the %s files under the /run or /var/run directory.Z_pid_tz,store the %s files under the /run directory.Z
_var_lib_tz0store the %s files under the /var/lib directory.Z_var_tz,store the %s files under the /var directory.Z_var_spool_tz2store the %s files under the /var/spool directory.Z_spool_tZ_cache_tZ_var_cache_tz/store the files under the /var/cache directory.Z	_keytab_tz)treat the files as kerberos keytab files.Z_lock_tzEtreat the files as %s lock data, stored under the /var/lock directoryZ_log_tzKtreat the data as %s log data, usually stored under the /var/log directory.Z	_config_tzRtreat the files as %s configuration data, usually stored under the /etc directory.Z_conf_tr   z,transition an executable to the %s_t domain.Z_cgi_content_tz"treat the files as %s cgi content.Z_rw_content_tz)treat the files as %s read/write content.Z_rw_tZ_write_tZ_db_tz'treat the files as %s database content.Z_ra_content_tz*treat the files as %s read/append content.Z_cert_tz'treat the files as %s certificate data.Z_key_tztreat the files as %s key data.Z	_secret_tz"treat the files as %s secret data.Z_ra_tZ_ro_tz(treat the files as %s read/only content.Z
_modules_tztreat the files as %s modules.Z
_content_tztreat the files as %s content.Z_state_tz!treat the files as %s state data.Z_files_tZ_file_tZ_data_tztreat the data as %s content.Z_tmp_tz1store %s temporary files in the /tmp directories.Z_etc_tz'store %s files in the /etc directories.Z_home_tz+store %s files in the users home directory.Z_tmpfs_tz&store %s files on a tmpfs file system.Z_unit_file_tz#treat files as a systemd unit file.Z_htaccess_tz#treat the file as a %s access file.ztreat the files as %s data.r   )r   r
  rU   )r   r  Ztxtr   r   r   get_description  s    







r  c               C   s"   t stttdd tta t S )Nc             S   s   | d S )Nr:   r   )rA   r   r   r   r   B  s    z$get_all_attributes.<locals>.<lambda>)r-   r<   r   r=   rb   rY   r   r   r   r   get_all_attributes?  s    r  c             C   s"   x|D ]}|| t  krdS qW dS )NFT)r~   )dictrR   r   r   r   r   _dict_has_permsF  s    
r  c             C   sp   t  }| jdr&t| } | d d }n| }|d |krBtd| |d dkr`|d d	 d }n|d }||fS )
Nr   r   zdomain %s_t does not existr   r   r   r"   r"   )r   r   r   r   )r`   r,   
domainname
short_namer   r   r   r   M  s    
r   c               C   s   t sttga t S )N)all_allow_rulesr   rr   r   r   r   r   r   ]  s    
r   c              C   s0   t s,tjtddttgd} dd | j D a t S )Nz.*T)rl   Zboolean_regexrh   c             S   s   g | ]}t |qS r   )rm   )r@   rA   r   r   r   rF   h  s    z&get_all_bool_rules.<locals>.<listcomp>)all_bool_rulesr4   r}   r5   rr   ru   rT   )ra   r   r   r   get_all_bool_rulesc  s
    
r  c               C   s   t stttga t S )N)all_transitionsr<   r   rv   r   r   r   r   get_all_transitionsk  s    r  c                s  g }g }t  \}}xtdd t fddt D ]}x|D ]}t|tsNq>ytj|d }W n tk
r|   |d }Y nX |d j	|s|d j	|r|d |f|kr|d | f|kr|j
|d |f q>|d |f|ko|d | f|kr>|j
|d |f q>W q4W ||fS )Nc             S   s   | d S )Nre   r   )rA   r   r   r   r   u  s    zget_bools.<locals>.<lambda>c                s   d| ko| d  kS )Nre   r   r   )rA   )r`   r   r   r   u  s    r   r   )r   r=   r   r  
isinstancetupler#   Zsecurity_get_boolean_activer   r   r|   )r`   r.   Zdomainboolsr  r  rE   r   rc   r   )r`   r   	get_boolsq  s"    $

""r  c               C   s   t stj d a t S )Nr   )re   r#   Zsecurity_get_boolean_namesr   r   r   r   get_all_booleans  s    r  #/usr/share/selinux/devel/policy.xmlc             C   sP   yt j| }|j }|j  W n, tk
rJ   t| }|j }|j  Y nX |S )N)gzipr   r  r   IOError)r'   r   r  r   r   r   
policy_xml  s    
r  c             C   s  t rt S dd l}i a y|jjjt| }x2|jdD ]"}x|jdD ]}xX|jdD ]J}|jdjdjj	d}t
jdd|}|jd	|jd
|ft |jd	< qZW xX|jdD ]J}|jdjdjj	d}t
jdd|}|jd	|jd
|ft |jd	< qW qJW xT|jdD ]F}|jdjdjj	d}t
jdd|}d|jd
|ft |jd	< qW q8W xT|jdD ]F}|jdjdjj	d}t
jdd|}d|jd
|ft |jd	< qlW W n tk
r   Y nX t S )Nr   ZlayermoduleZtunabledescr   r  rn   r:   Zdftvalr?   global)booleans_dictZxml.etree.ElementTreeZetreeZElementTreeZ
fromstringr  r   findtextr  r   subgetr  )r'   ZxmlZtreer   r   r   r!  rE   r   r   r   gen_bool_dict  s6    $($$r(  c             C   s*   t  }| |krt||  d S tdS d S )Nr   unknown)r(  r   )rl   r#  r   r   r   boolean_category  s    r*  c             C   sJ   t  }| |krt||  d S | jd}d|d dj|dd  f S d S )Nr   r   zAllow %s to %sr   rn   r   )r(  r   r[   rx   )rl   r#  r!  r   r   r   boolean_desc  s
    
r+  c              C   sF   d} y$t d}|j j } W d Q R X W n tk
r@   d} Y nX | S )Nr   z/etc/system-releaseZMisc)r   readlinerstripr  )Zsystem_releaser   r   r   r   get_os_version  s    

r.  c               C   sP   d a d ad ad ad ad ad ad ad ad a	d a	d a
d ad ad ad ad ad ad ad S )N)r-   r,   r/   re   r#  r.   r   r2   r   r   r   r   r3   r0   r1   r   r  r   r   r   r   r   reinit  s&    r/  )r   )r    )N)N)r  )r  )r   r#   r4   r$   Zsepolgen.defaultsr   Zsepolgen.interfacesr   r   r   r   r  ZPROGNAMEgettextkwargsversion_infoZinstallbuiltinsr>   __dict__r   Z__builtin__r   rS   rW   rY   rZ   r]   r^   r_   rr   rs   rt   ru   ry   rz   r~   r{   rv   rw   ZDEFAULT_DIRSr   r   r   r5   r   r   r   r   r   r/   r   r   r0   r   r   r,   r1   r   r  r2   r3   r.   r-   re   r#  r  r  r  r   r)   r+   r7   r8   r6   r   r   Zis_selinux_enabledrb   rm   r   r   r   r   r   r   r   r   r   r   r   Zselinux_file_context_pathr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r	  r
  r  r  r  r  r   r   r  r  r  r  r  r(  r*  r+  r.  r/  r   r   r   r   <module>   sZ  


	



i2
H!
$
		.	
	

]

	