ó
4ŽŢ]c        	   @   sl  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 d  d l Z e j e d  e j	 e  y e j
 e d e d d WnS e k
 rÉ e j
 e d d d d n* e k
 rň d  d l Z e e j d <n Xd   Z d d  Z d d  Z d d  Z d a d d  Z d d  Z d   Z d d  Z d   Z d d   Z d S(!   i˙˙˙˙Ns   _admin$s   _role$t   get_all_interfacest   get_interfaces_from_xmlt	   get_admint   get_usert   get_interface_dictt   get_interface_format_textt!   get_interface_compile_format_textt   get_xml_filet   interface_compile_testt   policycoreutilss   /usr/share/localet   unicodet   codesets   utf-8t	   localedirt   _c         C   s@   g  } t  |   } x' t | j    D] } | j |  q% W| S(   s'    Get all interfaces from given xml file(   R   t   listt   keyst   append(   t   patht   interfaces_listt   idictt   k(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   6   s
    t    c         C   sD   d d l  m } g  } |  s( |   } n t |   } t |  } | S(   Ni˙˙˙˙(   t   get_methods(   t   sepolicyR   R   R   (   R   R   t   all_interfacest   xml_path(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR    ?   s    c         C   s÷   g  } |  r° yX t  |   } t |  } x9 t | j    D]% } | j d  r: | j |  q: q: WWqó t k
 rŹ } t j j	 d | j
 j t |  f  t j d  qó XnC x@ t j   D]2 } | j d  r˝ | j | j d  d  q˝ q˝ W| S(   s?    Get all domains with an admin interface from installed policy.t   _admins   %s: %s
i   i    (   R   R   R   R   t   endswithR   t   IOErrort   syst   stderrt   writet	   __class__t   __name__t   strt   exitR   R   t   split(   R   t
   admin_listR   R   R   t   et   i(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   K   s    &!c         C   sA  g  } |  rÍ yu t  |   } t |  } xV t | j    D]B } | j d  r: d | d  t j   k r| | j |  q| q: q: WWq=t k
 rÉ } t	 j
 j d | j j t |  f  t	 j d  q=Xnp xm t j   D]_ } t j d t |  } t |  d k rÚ d | d t j   k r9| j | d  q9qÚ qÚ W| S(   s1    Get all domains with SELinux user role interfacet   _roles	   %s_exec_tiű˙˙˙s   %s: %s
i   s   (.*)%si    (   R   R   R   R   R   R   t   get_all_typesR   R   R   R   R   R    R!   R"   R#   R   t   ret   findallt   USER_TRANSITION_INTERFACEt   len(   R   t
   trans_listR   R   R   R&   R'   t   m(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   a   s$    &s#   /usr/share/selinux/devel/policy.xmlc         C   s)  d d  l  } d d  l } d d l m } m } t r8 t Sg  } i  a g  } |   } | d  k rv t d  GH|   } n  d } | |  7} | d 7} y| j j	 |   r˝ | j
 j j |   } n | j
 j j |  } x9| j d  D](}	 x|	 j d  D]}
 |
 j d  | k rř xu |
 j d	  D]d } x- | j d
  D] } | j | j d   q9W| | j d  j d	 g t | j d  <g  } q#Wxx |
 j d  D]d } x- | j d
  D] } | j | j d   qąW| | j d  j d g t | j d  <g  } qWqř qř Wqâ WWn t k
 r$} n Xt S(   Ni˙˙˙˙(   t   get_all_modulest   get_all_modules_from_mod_lsts   Using only non-base modules.sZ   <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<policy>
<layer name="admin">
s   
</layer>
</policy>
t   layert   modulet   namet	   interfacet   paramt   summaryt   template(   t   ost   xml.etree.ElementTreeR   R0   R1   t   interface_dictt   NoneR   R   t   isfilet   etreet   ElementTreet   parset
   fromstringR+   t   gett   getiteratorR   t   findt   textR   (   R   R9   t   xmlR0   R1   t   active_modulest
   param_listR   t   treet   lR/   R'   R&   (    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   |   sH    	
(
(c         C   sN   t  |  } d |  d j | |  d  d j | |  d j d   f } | S(   Ns	   %s(%s) %ss   , i    t    i   s   
(   R   t   joinR$   (   R5   R   R   t   interface_text(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   Ž   s    >c         C   s`   d d l  m } g  } xC |  | d D]3 } | j | j |  d | d j |  f } q% W| S(   Ni   (   t   test_modulei    s   %s(%s)
s   , (   t	   templatesRN   R   t   dict_valuesRL   (   t   interfaces_dictR5   RN   t	   param_tmpR'   RM   (    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   ľ   s    t   compiletestc         C   sI   d d l  m } d } | t j d | | j  7} | t | |   7} | S(   Ni   (   RN   R   t   TEMPLATETYPE(   RO   RN   R*   t   subt   te_test_moduleR   (   R5   R   R4   RN   t   te(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyt   generate_compile_też   s
    c         C   sČ   d d l  } d d l } | j j |   d } | j j |   j d  d } y. | j d | | d | j d t } | SWnF | j	 k
 rĂ } t
 j j d	  t
 j j | j  t
 j d
  n Xd S(   s;    Returns xml format of interfaces for given .if policy filei˙˙˙˙Nt   /t   .i    sD   python /usr/share/selinux/devel/include/support/segenxml.py -w -m %sR   t   shells-   
 Could not proceed selected interface file.
i   (   R9   t
   subprocessR   t   dirnamet   basenameR$   t   check_outputt   STDOUTt   Truet   CalledProcessErrorR   R   R   t   outputR#   (   t   if_fileR9   R\   t   basedirt   filenameRc   R&   (    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   Č   s    		c         C   sđ  d d d d d g } d g } d g } d d  l  } d d  l } i d	 d
 6d d 6d d 6d d 6} t |  } |  | k pŁ |  j d  d | k pŁ | |  d | k sŇt d |   GHyĽ t | d d  }	 |	 j t |  |   |	 j   y( | j	 d | d
 d | j
 d t WnC | j k
 rX}
 t j j t d  |   t j j |
 j  n XWn3 t k
 r}
 t j j t d  |  |
 f  n XxY t | j    D]( } | j j |  rŁ| j |  qŁqŁWn t j j t d |    d  S(   Nt   userdomt   kernelt   corenett   filest   devt   selinux_genboolR8   i˙˙˙˙s   compiletest.ppt   pps   compiletest.teRW   s   compiletest.fct   fcs   compiletest.ift   ifR   i    i   s   Compiling %s interfacet   ws,   make -f /usr/share/selinux/devel/Makefile %sR   R[   s   
Compile test for %s failed.
s%   
Compile test for %s has not run. %s
s,   
Compiling of %s interface is not supported.(   R\   R9   R   R$   R   t   openR   RX   t   closeR_   R`   Ra   Rb   R   R   Rc   t   EnvironmentErrorR   t   valuesR   t   existst   remove(   R5   R   t   exclude_interfacest   exclude_interface_namet   exclude_interface_typeR\   R9   t   policy_filesR   t   fdR&   t   v(    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyR   Ů   s4    		"9
	$(   R*   R   R   t   ADMIN_TRANSITION_INTERFACER,   t   __all__t   PROGNAMEt   gettextt   bindtextdomaint
   textdomaint   installRa   t	   TypeErrorR   t   builtinsR
   t   __dict__R   R    R   R   R<   R;   R   R   R   RX   R   R   (    (    (    s8   /usr/lib64/python2.7/site-packages/sepolicy/interface.pyt   <module>   s>   !
		2	
		