
^c        I   @   s}  d  d l  Z  d  d l Z d  d l Z d  d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 d Z
 i4 d dQ 6d dR 6d dS 6d  dT 6d! dU 6d" dV 6d# dW 6d$ dX 6d% dY 6d& dZ 6d' d[ 6d( d\ 6d) d] 6d* d^ 6d+ d_ 6d, d` 6d- da 6d. db 6d/ dc 6d0 dd 6d1 de 6d2 df 6d3 dg 6d4 dh 6d5 di 6d6 dj 6d7 dk 6d8 dl 6d9 dm 6d: dn 6d; do 6d< dp 6d= dq 6d> dr 6d? ds 6d@ dt 6dA du 6dB dv 6dC dw 6dD dx 6dE dy 6dF dz 6dG d{ 6dH d| 6dI d} 6dJ d~ 6dK d 6dL d 6dM d 6dO d 6dN d 6dP d 6Z 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 d Z d Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d a) d a* d a+ d a, e- a. d d  Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d   Z8 d   Z9 d   Z: d   Z; d   Z< d   Z= d   Z> d   Z? d   Z@ d   ZA d   ZB d   ZC d   ZD d   ZE d   ZF d   ZG d   ZH d   ZI d   ZJ d   ZK d   ZL d   ZM d   ZN d   ZO d   ZP d   ZQ d   ZR d   ZS d   ZT d   ZU d   ZV d   ZW d   ZX d   ZY d   ZZ d   Z[ d   Z\ d   Z] d   Z^ d   Z_ d   Z` d   Za d   Zb d   Zc d   Zd d   Ze d   Zf d   Zg d   Zh d   Zi d   Zj d   Zk d   Zl d   Zm d   Zn d   Zo d   Zp d   Zq d ar d as d   Zt d d eu d  Zv d   Zw d e- eu d  Zx d S(   iNi   (   t   access(   t   defaults(   t   lex(   t	   refpolicy(   t   yacct   TICKt   SQUOTEt   OBRACEt   CBRACEt   SEMIt   COLONt   OPARENt   CPARENt   COMMAt   MINUSt   TILDEt   ASTERISKt   AMPt   BARt   EXPLt   EQUALt   FILENAMEt
   IDENTIFIERt   NUMBERt   PATHt	   IPV6_ADDRt   MODULEt   POLICY_MODULEt   REQUIREt   SIDt   GENFSCONt   FS_USE_XATTRt   FS_USE_TRANSt   FS_USE_TASKt   PORTCONt   NODECONt   NETIFCONt   PIRQCONt   IOMEMCONt	   IOPORTCONt   PCIDEVICECONt   DEVICETREECONt   CLASSt   TYPEATTRIBUTEt   ROLEATTRIBUTEt   TYPEt	   ATTRIBUTEt   ATTRIBUTE_ROLEt   ALIASt	   TYPEALIASt   BOOLt   TRUEt   FALSEt   IFt   ELSEt   ROLEt   TYPESt   ALLOWt	   DONTAUDITt
   AUDITALLOWt
   NEVERALLOWt
   PERMISSIVEt
   TYPEBOUNDSt   TYPE_TRANSITIONt   TYPE_CHANGEt   TYPE_MEMBERt   RANGE_TRANSITIONt   ROLE_TRANSITIONt
   OPT_POLICYt	   INTERFACEt   TUNABLE_POLICYt   GEN_REQt   TEMPLATEt   GEN_CONTEXTt   IFELSEt   IFDEFt   IFNDEFt   DEFINEt   modulet   policy_modulet   requiret   sidt   genfscont   fs_use_xattrt   fs_use_transt   fs_use_taskt   portcont   nodecont   netifcont   pirqcont   iomemcont	   ioportcont   pcidevicecont   devicetreecont   classt   typeattributet   roleattributet   typet	   attributet   attribute_rolet   aliast	   typealiast   boolt   truet   falset   ift   elset   rolet   typest   allowt	   dontauditt
   auditallowt
   neverallowt
   permissivet
   typeboundst   type_transitiont   type_changet   type_membert   range_transitiont   role_transitiont   optional_policyt	   interfacet   tunable_policyt   gen_requiret   templatet   gen_contextt   ifelset   ifndeft   ifdeft   defines   \`s   \'s   \{s   \}s   \;+s   \:s   \(s   \)s   \,s   \-s   \~s   \*s   \&s   \|s   \!s   \=s   [0-9\.]+s   /[a-zA-Z0-9)_\.\*/\$]*s    	c         C   s   |  S(   s2   [a-fA-F0-9]{0,4}:[a-fA-F0-9]{0,4}:([a-fA-F0-9]|:)*(    (   t   t(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_IPV6_ADDR   s    c         C   s   |  j  j d 7_ d S(   s   dnl.*\ni   N(   t   lexert   lineno(   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_m4comment   s    c         C   s   |  j  d  d S(   s   define.*refpolicywarn\(.*\ni   N(   t   skip(   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_refpolicywarn1   s    c         C   s   |  j  j d 7_ d S(   s   refpolicywarn\(.*\ni   N(   R   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_refpolicywarn   s    c         C   s   t  j |  j d  |  _ |  S(   s#   [a-zA-Z_\$][a-zA-Z0-9_\-\+\.\$\*~]*R   (   t   reservedt   gett   valueRa   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_IDENTIFIER   s    c         C   s   t  j |  j d  |  _ |  S(   s   \"[a-zA-Z0-9_\-\+\.\$\*~ :]+\"R   (   R   R   R   Ra   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   t_FILENAME  s    c         C   s   |  j  j d 7_ d S(   s   \#.*\ni   N(   R   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   t_comment  s    c         C   s!   d |  j  d GH|  j d  d  S(   Ns   Illegal character '%s'i    i   (   R   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   t_error  s    c         C   s   |  j  j t |  j  7_ d S(   s   \n+N(   R   R   t   lenR   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   t_newline  s    t    c         C   s{   |  d  k r d  Sxd |  D]\ } | d  k r/ q n  | | _ | d  k	 r` | j j d | | f  q | j j d |  q Wd  S(   Ni    (   t   Nonet   parentt   childrent   insert(   t   stmtsR   t   valt   s(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   collect-  s    	c         C   sJ   xC |  D]; } t  j |  r5 | j t  j |   q | j |  q Wd  S(   N(   t   sptt   has_keyt   updatet   by_namet   add(   t   idsR   t   id(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   expand9  s    c         C   sj   t  |   d k r3 |  d r3 t j j |  d  n3 t  |   d k rf |  d rf t j j |  d  n  d S(   s^   statements : statement
                  | statements statement
                  | empty
    i   i   N(   R   t   mR   t   append(   t   p(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_statementsA  s    c         C   s   |  d |  d <d S(   s   statement : interface
                 | template
                 | obj_perm_set
                 | policy
                 | policy_module_stmt
                 | module_stmt
    i   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_statementK  s    c         C   s   d S(   s   empty :N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_emptyU  s    c         C   s=   t  j   } |  d | _ |  d | _ t | _  | |  d <d S(   sH   policy_module_stmt : POLICY_MODULE OPAREN IDENTIFIER COMMA NUMBER CPARENi   i   i    N(   R   t   ModuleDeclarationt   namet   versiont   True(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_policy_module_stmt`  s
    	c         C   s2   t  j |  d  } t |  d |  | |  d <d S(   sa   interface : INTERFACE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    i   i   i    N(   R   t	   InterfaceR   (   R   t   x(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_interfaceh  s    c         C   s2   t  j |  d  } t |  d |  | |  d <d S(   s   template : TEMPLATE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
                | DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    i   i   i    N(   R   t   TemplateR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_templateo  s    c         C   s   d |  d <d S(   s4   define : DEFINE OPAREN TICK IDENTIFIER SQUOTE CPARENi    N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_definew  s    c         C   s   t  |   d k r- |  d r- |  d |  d <nn t  |   d k r |  d sg |  d r |  d |  d <q q |  d s |  d |  d <q |  d |  d |  d <n  d S(   sl   interface_stmts : policy
                       | interface_stmts policy
                       | empty
    i   i   i    N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_interface_stmts~  s    


c         C   s`   t  j   } t |  d | d t t |   d k rO t |  d | d t n  | g |  d <d S(   s   optional_policy : OPT_POLICY OPAREN TICK interface_stmts SQUOTE CPAREN
                       | OPT_POLICY OPAREN TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    i   R   i   i   i    N(   R   t   OptionalPolicyR   R   R   t   False(   R   t   o(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_optional_policy  s
    c         C   sm   t  j   } |  d | _ t |  d | d t t |   d k r\ t |  d | d t n  | g |  d <d S(   s   tunable_policy : TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
                      | TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    i   i   R   i   i   i    N(   R   t   TunablePolicyt	   cond_exprR   R   R   R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_tunable_policy  s    c         C   s   d S(   s  ifelse : IFELSE OPAREN TICK IDENTIFIER SQUOTE COMMA COMMA TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
              | IFELSE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
              | IFELSE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_ifelse  s    c         C   s   t  j |  d  } |  d d k r, t } n t } t |  d | d | t |   d k ru t |  d | d t n  | g |  d <d S(	   s^  ifdef : IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
             | IFNDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
             | IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
    i   i   R   i   R   i   i    N(   R   t   IfDefR   R   R   R   (   R   R   t   v(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_ifdef  s    	c         C   sM   t  j d |  d  } t |   d k r? | j j |  d  n  | |  d <d S(   s   interface_call : IDENTIFIER OPAREN interface_call_param_list CPAREN
                      | IDENTIFIER OPAREN CPAREN
                      | IDENTIFIER OPAREN interface_call_param_list CPAREN SEMIt   ifnamei   i   i   i    N(   R   t   InterfaceCallR   t   argst   extend(   R   t   i(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_interface_call  s    c         C   sC   t  |   d k r# |  d |  d <n |  d d |  d g |  d <d S(   s   interface_call_param : IDENTIFIER
                            | IDENTIFIER MINUS IDENTIFIER
                            | nested_id_set
                            | TRUE
                            | FALSE
                            | FILENAME
    i   i   i    t   -i   N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_interface_call_param  s    
c         C   sC   t  |   d k r& |  d g |  d <n |  d |  d g |  d <d S(   s   interface_call_param_list : interface_call_param
                                 | interface_call_param_list COMMA interface_call_param
    i   i   i    i   N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_interface_call_param_list  s    c         C   s.   t  j |  d  } |  d | _ | |  d <d S(   sR   obj_perm_set : DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK names SQUOTE CPARENi   i   i    N(   R   t
   ObjPermSett   perms(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_obj_perm_set  s    c         C   s   |  d |  d <d S(   s   policy : policy_stmt
              | optional_policy
              | tunable_policy
              | ifdef
              | ifelse
              | conditional
    i   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_policy  s    c         C   s"   |  d r |  d g |  d <n  d S(   s  policy_stmt : gen_require
                   | avrule_def
                   | typerule_def
                   | typebound_def
                   | typeattribute_def
                   | roleattribute_def
                   | interface_call
                   | role_def
                   | role_allow
                   | permissive
                   | type_def
                   | typealias_def
                   | attribute_def
                   | attribute_role_def
                   | range_transition_def
                   | role_transition_def
                   | bool
                   | define
                   | initial_sid
                   | genfscon
                   | fs_use
                   | portcon
                   | nodecon
                   | netifcon
                   | pirqcon
                   | iomemcon
                   | ioportcon
                   | pcidevicecon
                   | devicetreecon
    i   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_policy_stmt  s    
c         C   s=   t  j   } |  d | _ |  d | _ t | _  | |  d <d S(   s+   module_stmt : MODULE IDENTIFIER NUMBER SEMIi   i   i    N(   R   R   R   R   R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_module_stmt  s
    	c         C   s   d S(   sl   gen_require : GEN_REQ OPAREN TICK requires SQUOTE CPAREN
                   | REQUIRE OBRACE requires CBRACEN(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_gen_require!  s    c         C   s   d S(   ss   requires : require
                | requires require
                | ifdef
                | requires ifdef
    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_requires)  s    c         C   s   d S(   s   require : TYPE comma_list SEMI
               | ROLE comma_list SEMI
               | ATTRIBUTE comma_list SEMI
               | ATTRIBUTE_ROLE comma_list SEMI
               | CLASS comma_list SEMI
               | BOOL comma_list SEMI
    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   p_require1  s    c         C   sc   t  j   } |  d | _ |  d | _ |  d | _ t |   d k rU |  d | _ n  | |  d <d S(   s   security_context : IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER
                        | IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER COLON mls_range_defi   i   i   i   i   i    N(   R   t   SecurityContextt   userRk   Ra   R   t   level(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_security_context;  s    c         C   s%   |  d } |  d | _  | |  d <d S(   sQ   gen_context : GEN_CONTEXT OPAREN security_context COMMA mls_range_def CPAREN
    i   i   i    N(   R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_gen_contextH  s    
c         C   s   |  d |  d <d S(   s<   context : security_context
               | gen_context
    i   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   p_contextS  s    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s$   initial_sid : SID IDENTIFIER contexti   i   i    N(   R   t
   InitialSidR   t   context(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_initial_sidY  s    c         C   sA   t  j   } |  d | _ |  d | _ |  d | _ | |  d <d S(   s+   genfscon : GENFSCON IDENTIFIER PATH contexti   i   i   i    N(   R   t   GenfsCont
   filesystemt   pathR   (   R   t   g(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_genfscon`  s
    c         C   s   t  j   } |  d d k r. t  j j | _ nD |  d d k rP t  j j | _ n" |  d d k rr t  j j | _ n  |  d | _ |  d | _ | |  d <d S(	   s   fs_use : FS_USE_XATTR IDENTIFIER context SEMI
              | FS_USE_TASK IDENTIFIER context SEMI
              | FS_USE_TRANS IDENTIFIER context SEMI
    i   RS   RU   RT   i   i   i    N(   R   t   FilesystemUset   XATTRRa   t   TASKt   TRANSR   R   (   R   t   f(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_fs_usej  s    c         C   s|   t  j   } |  d | _ t |   d k rH |  d | _ |  d | _ n& |  d d |  d | _ |  d | _ | |  d <d S(   sk   portcon : PORTCON IDENTIFIER NUMBER context
               | PORTCON IDENTIFIER NUMBER MINUS NUMBER contexti   i   i   i   R   i    N(   R   t   PortCont	   port_typeR   t   port_numberR   (   R   t   c(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   p_portcon|  s    c         C   sA   t  j   } |  d | _ |  d | _ |  d | _ | |  d <d S(   sa   nodecon : NODECON NUMBER NUMBER context
               | NODECON IPV6_ADDR IPV6_ADDR context
    i   i   i   i    N(   R   t   NodeCont   startt   endR   (   R   t   n(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   p_nodecon  s
    c         C   sA   t  j   } |  d | _ |  d | _ |  d | _ | |  d <d S(   s.   netifcon : NETIFCON IDENTIFIER context contexti   i   i   i    N(   R   t   NetifConRy   t   interface_contextt   packet_context(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_netifcon  s
    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s    pirqcon : PIRQCON NUMBER contexti   i   i    N(   R   t   PirqCont   pirq_numberR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt	   p_pirqcon  s    c         C   so   t  j   } t |   d k r; |  d | _ |  d | _ n& |  d d |  d | _ |  d | _ | |  d <d S(   sY   iomemcon : IOMEMCON NUMBER context
                | IOMEMCON NUMBER MINUS NUMBER contexti   i   i   R   i    N(   R   t   IomemConR   t
   device_memR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_iomemcon  s    c         C   so   t  j   } t |   d k r; |  d | _ |  d | _ n& |  d d |  d | _ |  d | _ | |  d <d S(   s\   ioportcon : IOPORTCON NUMBER context
                | IOPORTCON NUMBER MINUS NUMBER contexti   i   i   R   i    N(   R   t	   IoportConR   t   ioportR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_ioportcon  s    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s*   pcidevicecon : PCIDEVICECON NUMBER contexti   i   i    N(   R   t   PciDeviceCont   deviceR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_pcidevicecon  s    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s,   devicetreecon : DEVICETREECON NUMBER contexti   i   i    N(   R   t   DevicetTeeConR   R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_devicetreecon  s    c         C   sA   |  d |  d <t  |   d k r= |  d d |  d |  d <n  d S(   s[   mls_range_def : mls_level_def MINUS mls_level_def
                     | mls_level_def
    i   i    i   R   i   N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_mls_range_def  s    c         C   sJ   |  d |  d <t  |   d k rF |  d d d j |  d  |  d <n  d S(   sR   mls_level_def : IDENTIFIER COLON comma_list
                     | IDENTIFIER
    i   i    i   t   :t   ,i   N(   R   t   join(   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_mls_level_def  s    c         C   s   t  j |  d  } t |   d k r\ |  d d k rL | j j |  d  q |  d | _ nK t |   d k r |  d | _ t |   d k r | j j |  d  q n  | |  d <d S(	   s   type_def : TYPE IDENTIFIER COMMA comma_list SEMI
                | TYPE IDENTIFIER SEMI
                | TYPE IDENTIFIER ALIAS names SEMI
                | TYPE IDENTIFIER ALIAS names COMMA comma_list SEMI
    i   i   i   R  i   i   i    N(   R   t   TypeR   t
   attributesR   t   aliases(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_type_def  s    c         C   s!   t  j |  d  } | |  d <d S(   s)   attribute_def : ATTRIBUTE IDENTIFIER SEMIi   i    N(   R   t	   Attribute(   R   t   a(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_attribute_def  s    c         C   s!   t  j |  d  } | |  d <d S(   s3   attribute_role_def : ATTRIBUTE_ROLE IDENTIFIER SEMIi   i    N(   R   t   Attribute_Role(   R   R  (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_attribute_role_def  s    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s5   typealias_def : TYPEALIAS IDENTIFIER ALIAS names SEMIi   i   i    N(   R   t	   TypeAliasRa   R
  (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_typealias_def  s    c         C   sP   t  j   } |  d | _ t |   d k rB | j j |  d  n  | |  d <d S(   sW   role_def : ROLE IDENTIFIER TYPES comma_list SEMI
                | ROLE IDENTIFIER SEMIi   i   i    N(   R   t   RoleRk   R   Rl   R   (   R   t   r(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_role_def  s
    c         C   s4   t  j   } |  d | _ |  d | _ | |  d <d S(   s#   role_allow : ALLOW names names SEMIi   i   i    N(   R   t	   RoleAllowt	   src_rolest	   tgt_roles(   R   R  (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_role_allow  s    c         C   s   t  j d  d S(   s"   permissive : PERMISSIVE names SEMIi   N(   R   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_permissive  s    c         C   s   t  j   } |  d d k r. t  j j | _ nD |  d d k rP t  j j | _ n" |  d d k rr t  j j | _ n  |  d | _ |  d | _ |  d | _ |  d | _	 | |  d	 <d
 S(   s   avrule_def : ALLOW names names COLON names names SEMI
                  | DONTAUDIT names names COLON names names SEMI
                  | AUDITALLOW names names COLON names names SEMI
                  | NEVERALLOW names names COLON names names SEMI
    i   Rn   Ro   Rp   i   i   i   i   i    N(
   R   t   AVRuleR:   t	   rule_typeR;   R<   t	   src_typest	   tgt_typest   obj_classesR   (   R   R  (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_avrule_def  s    c         C   s   t  j   } |  d d k r. t  j j | _ n" |  d d k rP t  j j | _ n  |  d | _ |  d | _ |  d | _ |  d | _ |  d | _	 | |  d	 <d
 S(   s  typerule_def : TYPE_TRANSITION names names COLON names IDENTIFIER SEMI
                    | TYPE_TRANSITION names names COLON names IDENTIFIER FILENAME SEMI
                    | TYPE_TRANSITION names names COLON names IDENTIFIER IDENTIFIER SEMI
                    | TYPE_CHANGE names names COLON names IDENTIFIER SEMI
                    | TYPE_MEMBER names names COLON names IDENTIFIER SEMI
    i   Rt   Ru   i   i   i   i   i   i    N(
   R   t   TypeRuleR@   R  RA   R  R  R  t	   dest_typet	   file_name(   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_typerule_def*  s    c         C   s;   t  j   } |  d | _ | j j |  d  | |  d <d S(   s5   typebound_def : TYPEBOUNDS IDENTIFIER comma_list SEMIi   i   i    N(   R   t	   TypeBoundRa   R  R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_typebound_def=  s    c         C   sL   t  j   } |  d | _ |  d d k r5 t | _ n	 t | _ | |  d <d S(   sI   bool : BOOL IDENTIFIER TRUE SEMI
            | BOOL IDENTIFIER FALSE SEMIi   i   Rg   i    N(   R   t   BoolR   R   t   stateR   (   R   t   b(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_boolD  s    	c         C   sm   t  j   } |  d | _ t |  d | d t t |   d k r\ t |  d | d t n  | g |  d <d S(   s    conditional : IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE
                    | IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE ELSE OBRACE interface_stmts CBRACE
    i   i   R   i   i
   i    N(   R   t   ConditionalR   R   R   R   R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_conditionalO  s    c         C   s;   t  j   } |  d | _ | j j |  d  | |  d <d S(   s<   typeattribute_def : TYPEATTRIBUTE IDENTIFIER comma_list SEMIi   i   i    N(   R   t   TypeAttributeRa   R	  R   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_typeattribute_defZ  s    c         C   s;   t  j   } |  d | _ | j j |  d  | |  d <d S(   s<   roleattribute_def : ROLEATTRIBUTE IDENTIFIER comma_list SEMIi   i   i    N(   R   t   RoleAttributeRk   t   roleattributesR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_roleattribute_defa  s    c         C   s   d S(   s   range_transition_def : RANGE_TRANSITION names names COLON names mls_range_def SEMI
                            | RANGE_TRANSITION names names names SEMIN(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_range_transition_defh  s    c         C   s   d S(   s<   role_transition_def : ROLE_TRANSITION names names names SEMIN(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_role_transition_defm  s    c         C   s   t  |   } | d k r, |  d g |  d <nQ | d k rT |  d g |  d |  d <n) |  d |  d |  d g |  d |  d <d S(   s   cond_expr : IDENTIFIER
                 | EXPL cond_expr
                 | cond_expr AMP AMP cond_expr
                 | cond_expr BAR BAR cond_expr
                 | cond_expr EQUAL EQUAL cond_expr
                 | cond_expr EXPL EQUAL cond_expr
    i   i   i    i   i   N(   R   (   R   t   l(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_cond_exprq  s    c         C   s   t  j   } t |   d k  r2 t |  d |  nU t |   d k ra t |  d |  t | _ n& t |  d g  | j d |  d  | |  d <d S(   s   names : identifier
             | nested_id_set
             | asterisk
             | TILDE identifier
             | TILDE nested_id_set
             | IDENTIFIER MINUS IDENTIFIER
    i   i   i   R   i    N(   R   t   IdSetR   R   R   t
   complimentR   (   R   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_names  s    c         C   s   |  d g |  d <d S(   s   identifier : IDENTIFIERi   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_identifier  s    c         C   s   |  d g |  d <d S(   s   asterisk : ASTERISKi   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt
   p_asterisk  s    c         C   s   |  d |  d <d S(   s1   nested_id_set : OBRACE nested_id_list CBRACE
    i   i    N(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_nested_id_set  s    c         C   s=   t  |   d k r# |  d |  d <n |  d |  d |  d <d S(   s`   nested_id_list : nested_id_element
                      | nested_id_list nested_id_element
    i   i   i    N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_nested_id_list  s    c         C   sB   t  |   d k r# |  d |  d <n d |  d } | g |  d <d S(   sx   nested_id_element : identifier
                         | MINUS IDENTIFIER
                         | nested_id_set
    i   i   i    R   N(   R   (   R   t   str(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_nested_id_element  s    c         C   s=   t  |   d k r+ |  d |  d |  d <n  |  d |  d <d S(   sT   comma_list : nested_id_list
                  | comma_list COMMA nested_id_list
    i   i   i   i    N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_comma_list  s    c         C   s   d S(   s/   optional_semi : SEMI
                   | emptyN(    (   R   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_optional_semi  s    c         C   s.   d t  |  j |  j |  j f a t GHt a d  S(   Ns(   %s: Syntax error on line %d %s [type=%s](   t
   parse_fileR   R   Ra   t   errorR   t   success(   t   tok(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   p_error  s    c         C   s2   |  s
 i  Si  } x |  D] } | | | j  <q Wd  S(   N(   R   (   R   t   mapR   (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   prep_spt  s
    c         C   ss   t  s3 t j   a t j d d d | d d  a  n  |  d  k	 rH |  a n t j   a | si t j   a	 n | a	 d  S(   Nt   methodt   LALRt   debugt   write_tablesi    (
   t   parserR   R   R   R   R   R   t   Modulet   SupportMacrosR   (   RN   t   supportRJ  (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   create_globals  s    !	c         C   s   t  | | |  d t _ t a y t j |  d | d t Wn= t k
 r{ } d  a d  a d t	 |  d t
 j   a n Xt s d  a d t } t |   n  t S(   Ni   RJ  R   s   internal parser error: %ss   
s   could not parse text: "%s"(   RP  R   R   R   RC  RL  t   parset	   ExceptionR   R=  t	   tracebackt
   format_excRB  t
   ValueErrorR   (   t   textRN   RO  RJ  t   et   msg(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyRQ    s    	"
c   	      C   s   g  } d  } x t j |   D] \ } } } x | D] } t j j |  } t j j | |  } | d d k r | d k r | } q t t j d | d   r | j	 | d | f  q q2 | d d k r2 | j	 | d | f  q2 q2 Wq W| | f S(   Ni   s   .spts   obj_perm_sets.sptt   patternsi    s   .if(
   R   t   ost   walkR   t   splitextR  R   t   ret   findallR   (	   t   roott   modulest   support_macrost   dirpatht   dirnamest	   filenamesR   t   modnamet   filename(    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   list_headers
  s    	"c            s  d d l  m } t j   } g  } d  } t j j |   r t j j |   d } | d k ro t	 d |    n  t j j
 |  }	 | j |	 d |  f  t t j    \ }
 } n t |   \ } } | r | r t	 d   n   f d    d     f d  } d  } | r d	 |  t j   } | | |  | j j |  t j d
  } t j d d d d d d d d d d g
  } | j j t j |   | j j |   d  n   r  r| j t j d t |  } | j d  n  g  } x | D] } t j   } | d | _ y2 | rA| | d | |  n | | d |  Wn; t	 k
 r}  t |  d  | j | d  qn X| j j |   r  r| j   qqWt |  r d d j |   n  | S(   Ni   (   t   utilR   s   Invalid file name %si    s1   could not find support macros (obj_perm_sets.spt)c            s     r   j  |   n  d  S(   N(   t   write(   RX  (   t   output(    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyR   3  s    c            s     r  d |   n  y? t  |   } | j   } | j   |  a t | | |    WnB t k
 rl } d  St k
 r } t d |  t |  f   n Xd  S(   Ns   parsing file %s
s   error parsing file %s: %s(   t   opent   readt   closeRA  RQ  t   IOErrorRU  R=  (   R   RN   R   t   fdt   txtRW  (   RJ  R   (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyRA  7  s    
s   Parsing support macros (%s): t   can_execs   $1s   $2t   filet   execute_no_transRk  Rl  t   getattrt   lockt   executet   ioctls   done.
t   stepss   Parsing interface filess   
s    failed to parse some headers: %ss   , (   R   Rh  R   t   HeadersR   RZ  R   t   isfilet   splitRU  R\  R   Rg  R   t   headersRN  R   R   R    t   AccessVectorR  t   ConsoleProgressBart   syst   stdoutR   R   RM  R   R=  t   stepR  (   R_  Rj  R   RJ  Rh  R|  R`  Ra  R   Re  t   all_modulesRA  R   Rq  t   avt   statust   failuresR   R   RW  (    (   RJ  R   Rj  s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   parse_headers  sb    (I   R   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   s   FILENAMEs
   IDENTIFIERR   s   PATHR   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   s	   DONTAUDITs
   AUDITALLOWs
   NEVERALLOWR=   R>   R?   s   TYPE_CHANGEs   TYPE_MEMBERRB   RC   RD   RE   RF   RG   s   TEMPLATERI   RJ   RK   RL   RM   (y   R  RZ  R]  RS  R   R    R   R   R   R   t   tokensR   t   t_TICKt   t_SQUOTEt   t_OBRACEt   t_CBRACEt   t_SEMIt   t_COLONt   t_OPARENt   t_CPARENt   t_COMMAt   t_MINUSt   t_TILDEt
   t_ASTERISKt   t_AMPt   t_BARt   t_EXPLt   t_EQUALt   t_NUMBERt   t_PATHt   t_ignoreR   R   R   R   R   R   R   R   R   R   R   RB  RA  R   R   RC  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*  R,  R.  R1  R2  R3  R5  R8  R9  R:  R;  R<  R>  R?  R@  RE  RG  RL  R   RP  R   RQ  Rg  R  (    (    (    s8   /usr/lib64/python2.7/site-packages/sepolgen/refparser.pyt   <module>    s  
                                                                        
											
	
							
				
		
	
	
	"				
					
																																							
				