MOON
Server: Apache
System: Linux s5.yayogua.com.py 6.12.0-124.55.3.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:54:02 EDT 2026 x86_64
User: w3com (1005)
PHP: 8.2.32
Disabled: NONE
Upload Files
File: //usr/lib/python3.12/site-packages/sepolgen/__pycache__/refparser.cpython-312.pyc
�

/�i�~���ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	dZ
id	d
�dd�d
d�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d$�d%d&�d'd(�d)d*�id+d,�d-d.�d/d0�d1d2�d3d4�d5d6�d7d8�d9d:�d;d<�d=d>�d?d@�dAdB�dCdD�dEdF�dGdH�dIdJ�dKdL��idMdN�dOdP�dQdR�dSdT�dUdV�dWdX�dYdZ�d[d\�d]d^�d_d`�dadb�dcdd�dedf�dgdh�didj�dkdl�dmdn��dodpdq��ZdrZdsZ
dtZduZdvZdwZdxZdyZdzZd{Zd|Zd}Zd~ZdZd�Zd�Zd�Zd�Zd�Zd��Zd��Z d��Z!d��Z"d��Z#d��Z$d��Z%d��Z&d��Z'da(da)d�a*da+d�a,d�d��Z-d��Z.d��Z/d��Z0d��Z1d��Z2d��Z3d��Z4d��Z5d��Z6d��Z7d��Z8d��Z9d��Z:d��Z;d��Z<d��Z=d��Z>d��Z?d��Z@d��ZAd��ZBd��ZCd��ZDd��ZEd��ZFd��ZGd��ZHd��ZId��ZJd��ZKd��ZLd��ZMd��ZNd��ZOd��ZPd��ZQd��ZRd��ZSd��ZTd��ZUd��ZVd��ZWd��ZXd��ZYd��ZZd��Z[d��Z\d��Z]d��Z^d„Z_dÄZ`dĄZadńZbdƄZcdDŽZddȄZedɄZfdʄZgd˄Zhd̄Zid̈́Zjd΄ZkdτZldЄZmdфZnd҄ZodӄZpdԄZqdՄZrdքZsdׄZtdaudavd؄Zwd�dلZxdڄZyd�dۄZzy)��N�)�access)�defaults)�lex)�	refpolicy)�yacc)J�TICK�SQUOTE�OBRACE�CBRACE�SEMI�COLON�OPAREN�CPAREN�COMMA�MINUS�TILDE�ASTERISK�AMP�BAR�EXPL�EQUAL�FILENAME�
IDENTIFIER�NUMBER�PATH�	IPV6_ADDR�MODULE�
POLICY_MODULE�REQUIRE�SID�GENFSCON�FS_USE_XATTR�FS_USE_TRANS�FS_USE_TASK�PORTCON�NODECON�NETIFCON�PIRQCON�IOMEMCON�	IOPORTCON�PCIDEVICECON�
DEVICETREECON�CLASS�
TYPEATTRIBUTE�
ROLEATTRIBUTE�TYPE�	ATTRIBUTE�ATTRIBUTE_ROLE�ALIAS�	TYPEALIAS�BOOL�TRUE�FALSE�IF�ELSE�ROLE�TYPES�ALLOW�	DONTAUDIT�
AUDITALLOW�
NEVERALLOW�
PERMISSIVE�
TYPEBOUNDS�TYPE_TRANSITION�TYPE_CHANGE�TYPE_MEMBER�RANGE_TRANSITION�ROLE_TRANSITION�
OPT_POLICY�	INTERFACE�TUNABLE_POLICY�GEN_REQ�TEMPLATE�GEN_CONTEXT�GEN_TUNABLE�IFELSE�IFDEF�IFNDEF�DEFINE�moduler�
policy_moduler�requirer �sidr!�genfsconr"�fs_use_xattrr#�fs_use_transr$�fs_use_taskr%�portconr&�nodeconr'�netifconr(�pirqconr)�iomemconr*�	ioportconr+�pcideviceconr,�
devicetreeconr-�classr.�
typeattributer/�
roleattributer0�typer1�	attributer2�attribute_roler3�aliasr4�	typealiasr5�boolr6�truer7�falser8�ifr9�elser:�roler;�typesr<�allowr=�	dontauditr>�
auditallowr?�
neverallowr@�
permissiverA�
typeboundsrB�type_transitionrC�type_changerD�type_memberrE�range_transitionrF�role_transitionrG�optional_policyrH�	interfacerI�tunable_policyrJ�gen_requirerK�templaterL�gen_contextrM�gen_tunablerN�ifelserO�ifndefrQrPrR)�ifdef�definez\`z\'z\{z\}z\;+z\:z\(z\)z\,z\-z\~z\*z\&z\|z\!z\=z[0-9\.]+z/[a-zA-Z0-9)_\.\*/\$]*z 	c��|S)z2[a-fA-F0-9]{0,4}:[a-fA-F0-9]{0,4}:([a-fA-F0-9]|:)*���ts �7/usr/lib/python3.12/site-packages/sepolgen/refparser.py�t_IPV6_ADDRr��s	��
�H�c�B�|jxjdz
c_y)zdnl.*\nrN��lexer�linenor�s r��t_m4commentr������G�G�N�N�a��Nr�c�&�|jd�y)zdefine.*refpolicywarn\(.*\nrN)�skipr�s r��t_refpolicywarn1r��s���F�F�1�Ir�c�B�|jxjdz
c_y)zrefpolicywarn\(.*\nrNr�r�s r��t_refpolicywarnr��s���G�G�N�N�a��Nr�c�P�tj|jd�|_|S)z#[a-zA-Z_\$][a-zA-Z0-9_\-\+\.\$\*~]*r��reserved�get�valuerfr�s r��t_IDENTIFIERr�s���\�\�!�'�'�,�
/�A�F��Hr�c�P�tj|jd�|_|S)z"\"[a-zA-Z0-9_\-\+\.\$\*~ :\[\]]+\"rr�r�s r��
t_FILENAMEr�s���\�\�!�'�'�*�
-�A�F��Hr�c�B�|jxjdz
c_y)z\#.*\nrNr�r�s r��	t_commentr�
r�r�c�\�td|jdz�|jd�y)NzIllegal character '%s'rr)�printr�r�r�s r��t_errorr�s#��	�
"�Q�W�W�Q�Z�
/�0��F�F�1�Ir�c�h�|jxjt|j�z
c_y)z\n+N)r�r��lenr�r�s r��	t_newliner�s���G�G�N�N�c�!�'�'�l�"�Nr��Tc��|�y|D]I}|��||_|�|jjd||f��.|jjd|��Ky)Nr)�parent�children�insert)�stmtsr��val�ss    r��collectr�/sT���}��
���9������?��O�O�"�"�1�s�A�h�/��O�O�"�"�1�a�(�r�c��|D]M}tj|�r%|jtj|���=|j	|��Oy�N)�spt�has_key�update�by_name�add)�idsr��ids   r��expandr�;s6�����;�;�r�?�
�H�H�S�[�[��_�%�
�E�E�"�I�	r�c���t|�dk(r(|dr#tjj|d�yt|�dkDr)|dr#tjj|d�yyy)z^statements : statement
                  | statements statement
                  | empty
    �rN)r��mr��append��ps r��p_statementsr�CsY��
�1�v��{�q��t�	�
�
���!�A�$��	�Q��!���!��	�
�
���!�A�$���r�c��|d|d<y)z�statement : interface
                 | template
                 | obj_perm_set
                 | policy
                 | policy_module_stmt
                 | module_stmt
    rrNr�r�s r��p_statementr�M���
�Q�4�A�a�Dr�c��y)zempty :Nr�r�s r��p_emptyr�W���r�c�l�tj�}|d|_|d|_d|_||d<y)zHpolicy_module_stmt : POLICY_MODULE OPAREN IDENTIFIER COMMA NUMBER CPAREN��TrN�r�ModuleDeclaration�name�version�r�r�s  r��p_policy_module_stmtr�bs6���#�#�%�A�
�q�T�A�F��!��A�I��A�K��A�a�Dr�c�\�tj|d�}t|d|�||d<y)zainterface : INTERFACE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    ��rN)r�	Interfacer��r��xs  r��p_interfacer�js/��	���A�a�D�!�A��A�a�D�!���A�a�Dr�c�\�tj|d�}t|d|�||d<y)z�template : TEMPLATE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
                | DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    r�r�rN)r�Templater�r�s  r��
p_templater�qs/��	���1�Q�4� �A��A�a�D�!���A�a�Dr�c��d|d<y)z4define : DEFINE OPAREN TICK IDENTIFIER SQUOTE CPARENNrr�r�s r��p_definer�ys
��
�A�a�Dr�c��t|�dk(r|dr	|d|d<yt|�dkDr1|ds|dr	|d|d<yy|ds	|d|d<y|d|dz|d<yy)zlinterface_stmts : policy
                       | interface_stmts policy
                       | empty
    r�rrN�r�r�s r��p_interface_stmtsr��s{��
�1�v��{�q��t���t��!��	�Q��!����t���t���t��!����1���Q�4�A�a�D��Q�4�!�A�$�;�A�a�D�
r�c��tj�}t|d|d��t|�dkDrt|d|d��|g|d<y)	z�optional_policy : OPT_POLICY OPAREN TICK interface_stmts SQUOTE CPAREN
                       | OPT_POLICY OPAREN TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
    r�T�r��r�FrN)r�OptionalPolicyr�r�)r��os  r��p_optional_policyr��sH��	� � �"�A��A�a�D�!���
�1�v��z���!��a�U�#�
�3�A�a�Dr�c��tj�}|d|_t|d|d��t	|�dkDrt|d|d��|g|d<y	)
z�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
    r�r�Tr���FrN)r�
TunablePolicy�	cond_exprr�r�r�s  r��p_tunable_policyr��sS��	���!�A��A�$�A�K��A�a�D�!���
�1�v��{���"��q�e�$�
�3�A�a�Dr�c�<�t|�dk(r	|d|d<yd|d<y)z�ifelse_compare_value : TICK IDENTIFIER SQUOTE
                            | TICK TRUE       SQUOTE
                            | TICK FALSE      SQUOTE
                            | TICK            SQUOTE
                            | empty
    r�r�rNr�r�s r��p_ifelse_compare_valuer��s%���1�v��{���t��!����!�r�c�b�tj|d�}t|d|d��|g|d<y)ziifelse_section : TICK IDENTIFIER SQUOTE COMMA ifelse_compare_value COMMA TICK interface_stmts SQUOTE
    r�r�Tr�rN�r�IfElser�r�s  r��p_ifelse_sectionr��s3��	����1���A��A�a�D�!���
�3�A�a�Dr�c�N�t|�dk(r|d|dz|d<y|d|d<y)zcifelse_sections : ifelse_sections COMMA ifelse_section
                       | ifelse_section
    r�rr�rNr�r�s r��p_ifelse_sectionsr��s1���1�v��{���t�a��d�{��!����t��!�r�c��tj|d�}t|d|d��t|d|d��|g|d<y)zbifelse : IFELSE OPAREN ifelse_sections COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
    r�Tr��FrNr�r�s  r��p_ifelser��sC��	����1���A��A�a�D�!����A�a�D�!���
�3�A�a�Dr�c��tj|d�}|ddk(rd}nd}t|d||��t|�dkDrt|d|d��|g|d	<y
)aJifdef : IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
             | IFNDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
             | IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK statements SQUOTE COMMA TICK statements SQUOTE CPAREN optional_semi
    r�rr�TFr�r�r�rN)r�IfDefr�r�)r�r��vs   r��p_ifdefr��sa��
	����!���A���t�w�������A�a�D�!���
�1�v��{���"��q�e�$�
�3�A�a�Dr�c��tj|d��}t|�dkDr|jj	|d�||d<y)z�interface_call : IDENTIFIER OPAREN interface_call_param_list CPAREN
                      | IDENTIFIER OPAREN CPAREN
                      | IDENTIFIER OPAREN interface_call_param_list CPAREN SEMIr)�ifnamer�r�rN)r�
InterfaceCallr��args�extend)r��is  r��p_interface_callr�s@��
	���q��t�,�A�
�1�v��z�	���
�
�a��d���A�a�Dr�c��t|�dk(r	|d|d<yt|�dk(rd|dz|d<y|dd|dzg|d<y)a0interface_call_param : IDENTIFIER
                            | IDENTIFIER MINUS IDENTIFIER
                            | MINUS IDENTIFIER
                            | nested_id_set
                            | TRUE
                            | FALSE
                            | quoted_filename
    r�rrr��-Nr�r�s r��p_interface_call_paramr�sR���1�v��{���t��!��	�Q��1���Q�q�T�z��!���!��c�A�a�D�j�!��!�r�c�R�t|�dk(r
|dg|d<y|d|dgz|d<y)z�interface_call_param_list : interface_call_param
                                 | interface_call_param_list COMMA interface_call_param
    r�rrr�Nr�r�s r��p_interface_call_param_listr�s5���1�v��{��!��v��!����t�q��t�f�}��!�r�c�R�tj|d�}|d|_||d<y)zRobj_perm_set : DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK names SQUOTE CPARENr�r�rN)r�
ObjPermSet�perms�r�r�s  r��p_obj_perm_setr
�s*�����Q�q�T�"�A���d�A�G��A�a�Dr�c��|d|d<y)z�policy : policy_stmt
              | optional_policy
              | tunable_policy
              | ifdef
              | ifelse
              | conditional
    rrNr�r�s r��p_policyrr�r�c�"�|dr
|dg|d<yy)a�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
                   | gen_tunable
                   | define
                   | initial_sid
                   | genfscon
                   | fs_use
                   | portcon
                   | nodecon
                   | netifcon
                   | pirqcon
                   | iomemcon
                   | ioportcon
                   | pcidevicecon
                   | devicetreecon
    rrNr�r�s r��
p_policy_stmtrs ��@	��t��!��v��!��r�c�l�tj�}|d|_|d|_d|_||d<y)z+module_stmt : MODULE IDENTIFIER NUMBER SEMIr�r�FrNr�r�s  r��
p_module_stmtr5s6���#�#�%�A�
�q�T�A�F��!��A�I��A�K��A�a�Dr�c��y)zlgen_require : GEN_REQ OPAREN TICK requires SQUOTE CPAREN
                   | REQUIRE OBRACE requires CBRACENr�r�s r��
p_gen_requirer=s��	r�c��y)z�requires : require
                | requires require
                | ifdef
                | requires ifdef
                | ifelse
                | requires ifelse
    Nr�r�s r��
p_requiresrE���	r�c��y)z�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
    Nr�r�s r��	p_requirerOrr�c��tj�}|d|_|d|_|d|_t|�dkDr
|d|_||d<y)z�security_context : IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER
                        | IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER COLON mls_range_defrr�r�r�r�rN)r�SecurityContext�userrprfr��levelrs  r��p_security_contextrYsR��	�!�!�#�A�
�q�T�A�F�
�q�T�A�F�
�q�T�A�F�
�1�v��z��A�$����A�a�Dr�c�,�|d}|d|_||d<y)zQgen_context : GEN_CONTEXT OPAREN security_context COMMA mls_range_def CPAREN
    r�r�rN)rrs  r��
p_gen_contextr!fs!��	
�!��A���d�A�G��A�a�Dr�c��|d|d<y)z<context : security_context
               | gen_context
    rrNr�r�s r��	p_contextr#q���
�Q�4�A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z$initial_sid : SID IDENTIFIER contextr�r�rN)r�
InitialSidr��contextrs  r��
p_initial_sidr(ws/������A�
�q�T�A�F��!��A�I��A�a�Dr�c��tj�}|d|_|d|_t	|�dk(r|d|_n
|d|_||d<y)z�genfscon : GENFSCON IDENTIFIER PATH context
                | GENFSCON IDENTIFIER PATH MINUS IDENTIFIER context
                | GENFSCON IDENTIFIER PATH MINUS MINUS context
    r�r�r�r�r�rN)r�GenfsCon�
filesystem�pathr�r')r��gs  r��
p_genfsconr.~sR��
	����A��Q�4�A�L�
�q�T�A�F�
�1�v��{��a�D��	��a�D��	��A�a�Dr�c�L�tj�}|ddk(r tjj|_nO|ddk(r tjj|_n'|ddk(rtjj
|_|d|_|d|_||d<y)	z�fs_use : FS_USE_XATTR IDENTIFIER context SEMI
              | FS_USE_TASK IDENTIFIER context SEMI
              | FS_USE_TRANS IDENTIFIER context SEMI
    rrXrZrYr�r�rN)r�
FilesystemUse�XATTRrf�TASK�TRANSr+r')r��fs  r��p_fs_user5�s���
	���!�A���t�~���(�(�.�.���	
�1���	��(�(�-�-���	
�1���	��(�(�.�.����Q�4�A�L��!��A�I��A�a�Dr�c���tj�}|d|_t|�dk(r|d|_|d|_n|ddz|dz|_|d|_||d<y)zkportcon : PORTCON IDENTIFIER NUMBER context
               | PORTCON IDENTIFIER NUMBER MINUS NUMBER contextr�r�r�r�rrN)r�PortCon�	port_typer��port_numberr'�r��cs  r��	p_portconr<�sj��	����A��A�$�A�K�
�1�v��{��!���
��a�D��	��!��s�
�Q�q�T�)��
��a�D��	��A�a�Dr�c�r�tj�}|d|_|d|_|d|_||d<y)zanodecon : NODECON NUMBER NUMBER context
               | NODECON IPV6_ADDR IPV6_ADDR context
    r�r�r�rN)r�NodeCon�start�endr'�r��ns  r��	p_nodeconrC�s<��	����A���d�A�G�
�a�D�A�E��!��A�I��A�a�Dr�c�r�tj�}|d|_|d|_|d|_||d<y)z.netifcon : NETIFCON IDENTIFIER context contextr�r�r�rN)r�NetifConr~�interface_context�packet_contextrAs  r��
p_netifconrH�s<������A��A�$�A�K��A�$�A����t�A���A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z pirqcon : PIRQCON NUMBER contextr�r�rN)r�PirqCon�pirq_numberr'r:s  r��	p_pirqconrL�s/������A��a�D�A�M��!��A�I��A�a�Dr�c��tj�}t|�dk(r|d|_|d|_n|ddz|dz|_|d|_||d<y)zYiomemcon : IOMEMCON NUMBER context
                | IOMEMCON NUMBER MINUS NUMBER contextr�r�r�rrN)r�IomemConr��
device_memr'r:s  r��
p_iomemconrP�s_��	����A�
�1�v��{���t����a�D��	���t�c�z�A�a�D�(����a�D��	��A�a�Dr�c��tj�}t|�dk(r|d|_|d|_n|ddz|dz|_|d|_||d<y)z\ioportcon : IOPORTCON NUMBER context
                | IOPORTCON NUMBER MINUS NUMBER contextr�r�r�rrN)r�	IoportConr��ioportr'r:s  r��p_ioportconrT�s_��	����A�
�1�v��{��Q�4����a�D��	��Q�4�#�:��!��$����a�D��	��A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z*pcidevicecon : PCIDEVICECON NUMBER contextr�r�rN)r�PciDeviceCon�devicer'r:s  r��p_pcideviceconrX�s/����� �A���t�A�H��!��A�I��A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z,devicetreecon : DEVICETREECON NUMBER contextr�r�rN)r�
DevicetTeeConr,r'r:s  r��p_devicetreeconr[�s/�����!�A�
�q�T�A�F��!��A�I��A�a�Dr�c�T�|d|d<t|�dkDr|ddz|dz|d<yy)z[mls_range_def : mls_level_def MINUS mls_level_def
                     | mls_level_def
    rrr�rr�Nr�r�s r��p_mls_range_defr]�s;��
�Q�4�A�a�D�
�1�v��z���t�c�z�A�a�D� ��!��r�c�r�|d|d<t|�dkDr!|ddzdj|d�z|d<yy)zRmls_level_def : IDENTIFIER COLON comma_list
                     | IDENTIFIER
    rrr��:�,r�N)r��joinr�s r��p_mls_level_defrb�sC��
�Q�4�A�a�D�
�1�v��z���t�c�z�C�H�H�Q�q�T�N�*��!��r�c�F�tj|d�}t|�dk(r2|ddk(r|jj	|d�nO|d|_nDt|�dkDr6|d|_t|�dk(r|jj	|d�||d<y)	z�type_def : TYPE IDENTIFIER COMMA comma_list SEMI
                | TYPE IDENTIFIER SEMI
                | TYPE IDENTIFIER ALIAS names SEMI
                | TYPE IDENTIFIER ALIAS names COMMA comma_list SEMI
    r�r�r�r`r�r�rN)r�Typer��
attributesr��aliases�r�r�s  r��
p_type_defrhs���	���q��t��A�
�1�v��{��Q�4�3�;�
�L�L����!��%��!��A�I�	�Q��!���a�D��	��q�6�Q�;�
�L�L����!��%��A�a�Dr�c�>�tj|d�}||d<y)z)attribute_def : ATTRIBUTE IDENTIFIER SEMIr�rN)r�	Attribute�r��as  r��p_attribute_defrms�����A�a�D�!�A��A�a�Dr�c�>�tj|d�}||d<y)z3attribute_role_def : ATTRIBUTE_ROLE IDENTIFIER SEMIr�rN)r�Attribute_Rolerks  r��p_attribute_role_defrps��� � ��1��&�A��A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z5typealias_def : TYPEALIAS IDENTIFIER ALIAS names SEMIr�r�rN)r�	TypeAliasrfrfrgs  r��p_typealias_defrss/������A�
�q�T�A�F��!��A�I��A�a�Dr�c��tj�}|d|_t|�dkDr|jj|d�||d<y)zWrole_def : ROLE IDENTIFIER TYPES comma_list SEMI
                | ROLE IDENTIFIER SEMIr�r�rN)r�Rolerpr�rqr��r��rs  r��
p_role_defrx&sC��	����A�
�q�T�A�F�
�1�v��z�	�����q��t���A�a�Dr�c�^�tj�}|d|_|d|_||d<y)z#role_allow : ALLOW names names SEMIr�r�rN)r�	RoleAllow�	src_roles�	tgt_rolesrvs  r��p_role_allowr}/s/������A��A�$�A�K��A�$�A�K��A�a�Dr�c��y)z"permissive : PERMISSIVE names SEMINr�r�s r��p_permissiver6r�r�c�t�tj�}|ddk(r tjj|_nO|ddk(r tjj|_n'|ddk(rtjj
|_|d|_|d|_|d|_|d|_	||d	<y
)z�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
    rrsrtrur�r�r�r�rN)
r�AVRuler>�	rule_typer?r@�	src_types�	tgt_types�obj_classesrrks  r��p_avrule_defr�:s���	����A���t�{���&�&�0�0���	
�1���	��&�&�1�1���	
�1���	��&�&�1�1����A�$�A�K��A�$�A�K��a�D�A�M���d�A�G��A�a�Dr�c�8�tj�}|ddk(r tjj|_n'|ddk(rtjj|_|d|_|d|_|d|_|d|_|d|_	||d	<y
)a�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
    rryrzr�r�r�r�r�rN)
r�TypeRulerDr�rEr�r�r��	dest_type�	file_namergs  r��p_typerule_defr�Ms���	����A���t�}���(�(�4�4���	
�1���	��(�(�4�4����A�$�A�K��A�$�A�K��a�D�A�M��A�$�A�K��A�$�A�K��A�a�Dr�c��tj�}|d|_|jj	|d�||d<y)z5typebound_def : TYPEBOUNDS IDENTIFIER comma_list SEMIr�r�rN)r�	TypeBoundrfr�r�rgs  r��p_typebound_defr�`s:������A�
�q�T�A�F��K�K���q��t���A�a�Dr�c�x�tj�}|d|_|ddk(rd|_nd|_||d<y)zIbool : BOOL IDENTIFIER TRUE SEMI
            | BOOL IDENTIFIER FALSE SEMIr�r�rlTFrN)r�Boolr��state)r��bs  r��p_boolr�gs=��	����A�
�q�T�A�F���t�v�~��������A�a�Dr�c��tj�}t|�dk(rd}d}nd}d}|||_||dk(rd|_nd|_||d<y	)
a&gen_tunable : GEN_TUNABLE OPAREN IDENTIFIER COMMA TRUE CPAREN
                   | GEN_TUNABLE OPAREN IDENTIFIER COMMA FALSE CPAREN
                   | GEN_TUNABLE OPAREN TICK IDENTIFIER SQUOTE COMMA TRUE CPAREN
                   | GEN_TUNABLE OPAREN TICK IDENTIFIER SQUOTE COMMA FALSE CPARENr�r�r�r�rlTFrN)rr�r�r�r�)r�r��id_pos�	state_poss    r��
p_gen_tunabler�rs]��
	����A�
�1�v��{����	����	�
�v�Y�A�F���|�v���������A�a�Dr�c��tj�}|d|_t|d|d��t	|�dkDrt|d|d��|g|d<y	)
z� conditional : IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE
                    | IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE ELSE OBRACE interface_stmts CBRACE
    r�r�Tr�r��
FrN)r�Conditionalr�r�r�r:s  r��
p_conditionalr��sS��	����A��A�$�A�K��A�a�D�!���
�1�v��z���"��q�e�$�
�3�A�a�Dr�c��tj�}|d|_|jj	|d�||d<y)z<typeattribute_def : TYPEATTRIBUTE IDENTIFIER comma_list SEMIr�r�rN)r�
TypeAttributerfrer�rgs  r��p_typeattribute_defr��s:�����!�A�
�q�T�A�F��L�L����!����A�a�Dr�c��tj�}|d|_|jj	|d�||d<y)z<roleattribute_def : ROLEATTRIBUTE IDENTIFIER comma_list SEMIr�r�rN)r�
RoleAttributerp�roleattributesr�rgs  r��p_roleattribute_defr��s<�����!�A�
�q�T�A�F������A�a�D�!��A�a�Dr�c��y)z�range_transition_def : RANGE_TRANSITION names names COLON names mls_range_def SEMI
                            | RANGE_TRANSITION names names names SEMINr�r�s r��p_range_transition_defr�����	r�c��y)z<role_transition_def : ROLE_TRANSITION names names names SEMINr�r�s r��p_role_transition_defr��r�r�c��t|�}|dk(r
|dg|d<y|dk(r|dg|dz|d<y|d|d|dzgz|dz|d<y)acond_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
    r�rrr�r�Nr�)r��ls  r��p_cond_exprr��sj��	�A��A��A�v��!��v��!��	
�a���!��v��!��}��!����t�q��t�a��d�{�m�#�a��d�*��!�r�c��tj�}t|�dkrt|d|�nKt|�dk(rt|d|�d|_n&t|dg�|jd|dz�||d<y)z�names : identifier
             | nested_id_set
             | asterisk
             | TILDE identifier
             | TILDE nested_id_set
             | IDENTIFIER MINUS IDENTIFIER
    r�rr�TrrN)r�IdSetr�r��
complimentr�rs  r��p_namesr��sq��	����A�
�1�v��z��q��t�Q��	�Q��1���q��t�Q�������!��v��	���c�A�a�D�j���A�a�Dr�c��|dg|d<y)zidentifier : IDENTIFIERrrNr�r�s r��p_identifierr�����
�a�D�6�A�a�Dr�c��|dg|d<y)zasterisk : ASTERISKrrNr�r�s r��
p_asteriskr��r�r�c��|d|d<y)z1nested_id_set : OBRACE nested_id_list CBRACE
    r�rNr�r�s r��p_nested_id_setr��s��
�Q�4�A�a�Dr�c�N�t|�dk(r	|d|d<y|d|dz|d<y)z`nested_id_list : nested_id_element
                      | nested_id_list nested_id_element
    r�rrNr�r�s r��p_nested_id_listr��s1���1�v��{���t��!����t�a��d�{��!�r�c�N�t|�dk(r	|d|d<yd|dz}|g|d<y)zxnested_id_element : identifier
                         | MINUS IDENTIFIER
                         | nested_id_set
    r�rrrNr�)r��strs  r��p_nested_id_elementr��s6��
�1�v��{���t��!���A�a�D�j���u��!�r�c�L�t|�dkDr|d|dz|d<|d|d<y)zTcomma_list : nested_id_list
                  | comma_list COMMA nested_id_list
    r�rr�rNr�r�s r��p_comma_listr��s1���1�v��z���t�a��d�{��!���Q�4�A�a�Dr�c��y)z/optional_semi : SEMI
                   | emptyNr�r�s r��p_optional_semir�r�r�c��|d|d<y)zTquoted_filename : TICK quoted_filename SQUOTE
                       | FILENAME
    rrNr�r�s r��p_quoted_filenamer�r$r�c�|�dt|j|j|jfzatt�day)Nz(%s: Syntax error on line %d %s [type=%s]F)�
parse_filer�r�rf�errorr��success)�toks r��p_errorr�s3��6�*�c�j�j�RU�R[�R[�]`�]e�]e�9f�f�E�	�%�L��Gr�c�<�|siSi}|D]}|||j<�yr�)r�)r��mapr�s   r��prep_sptr�s&����
�
�C�
����A�F�F��r�c���ts,tj�atjd|d��a|�|antj�a|stj�ay|ay)N�LALRr)�method�debug�write_tables)	�parserrr�rr�r�Module�
SupportMacrosr�)rS�supportr�s   r��create_globalsr�sS������	�����&��A�F��
�����������%�%�'���r�c�4�t|||�dt_da	tj||t��tsdadtz}t|��tS#t$r4}dadadt|�zdztj�za
Yd}~�Zd}~wwxYw)NrT)r�r�zinternal parser error: %s�
zcould not parse text: "%s")
r�r�r�r�r��parse�	Exceptionr��	traceback�
format_excr��
ValueErrorr�)�textrSr�r��e�msgs      r�r�r�0s����6�7�E�*��E�L��G�U����T��e��4����*�U�2����o���H���U�����+�c�!�f�4�t�;�i�>R�>R�>T�T���U�s�A�	B�#*B�Bc	��g}d}tj|�D]�\}}}|D]�}tjj|�}tjj	||�}|ddk(rB|dk(r|}�Rtt
jd|d��s�u|j|d|f���|ddk(s��|j|d|f�����||fS)Nrz.sptzobj_perm_sets.spt�patternsrz.if)	�os�walkr,�splitextrar��re�findallr�)	�root�modules�support_macros�dirpath�dirnames�	filenamesr��modname�filenames	         r��list_headersr�Es����G��N�(*����
�$���9��D��g�g�&�&�t�,�G��w�w�|�|�G�T�2�H��q�z�V�#��.�.�%-�N�����J���
�;�<��N�N�G�A�J��#9�:����u�$������
�H�5�6��)6�
�^�$�$r�c�����ddlm}tj�}g}d}tj
j
|�r�tj
j|�d}|dk(rtd|z��tj
j|�}	|j|	d|f�ttj��\}
}nt|�\}}|r
|std���fd��d��fd�	}d}|r��d	|z�tj�}|||�|jj|�tj d
�}
t#j$gd��}|
jjtj&|��|jj|
��d��r=�s;|j)t*j,t/|��
�}|j1d�g}|D]n}tj2�}|d|_	|r||d||�n||d|�|jj|��s�\�r�_j9��pt/|�r�ddj;|�z�|S#t$r2}�t7|�dz�|j|d�Yd}~��d}~wwxYw)Nr)�utilr�zInvalid file name %srz1could not find support macros (obj_perm_sets.spt)c�.���r�j|�yyr�)�write)r��outputs �r�r�zparse_headers.<locals>.ons�����L�L���r�c	����r�d|z�	t|�}|j�}|j�|at	|||��y#t
$r
}Yd}~yd}~wt$r}t
d|�dt|�����d}~wwxYw)Nzparsing file %s
zerror parsing file z: )�open�read�closer�r��IOErrorr�r�)r4rSr��fd�txtr�r�r�s      ��r�r�z!parse_headers.<locals>.parse_filers|����
�!�A�%�&�		H��a��B��'�'�)�C��H�H�J��J��#�v�s�E�*���	����	H��A�s�1�v�F�G�G��	H�s�;A�	B�B�&B�BzParsing support macros (%s): �can_exec)
z$1z$2�file�execute_no_transr�r��getattr�lock�execute�ioctlzdone.
)�stepszParsing interface filesr�z!failed to parse some headers: %s
z, r�)r�r�r�Headersr�r,�isfile�splitr�r�r�r�r�headersr�r�r�r�AccessVectorr��ConsoleProgressBar�sys�stdoutr�r?r�r�r��stepra)r�r�r�r�r�rr�r�r�r��all_modulesr�r�r��av�status�failuresr�r�r�r�s ` `                @r��
parse_headersrYsm�������!�G��G��N�	�w�w�~�~�d���w�w�}�}�T�"�1�%���2�:��3�d�:�;�;��'�'�"�"�4�(�������
�D�)�*�&2�8�3C�3C�3E�&F�#��^�".�t�"4����
�n��L�M�M��
H��C��	�
)�N�
:�;��%�%�'���>�3�'�������$�
�&�&�z�2��
�
 �
 �"F�G��	��� � ��!1�!1�"�!5�6�������)�	�)��
�e��(�(����3�w�<�(�H�����.�/��H�
��������1����	���1�Q�4��C�(��1�Q�4��#�	������"��%��K�K�M��"�8�}�	�
.����8�1D�
D�E��N���	�
�c�!�f�t�m���O�O�A�a�D�!���	�s�J�	K�(K
�
Kr�)NNF)NTF){rr�r�r�r�rrrrr�tokensr��t_TICK�t_SQUOTE�t_OBRACE�t_CBRACE�t_SEMI�t_COLON�t_OPAREN�t_CPAREN�t_COMMA�t_MINUS�t_TILDE�
t_ASTERISK�t_AMP�t_BAR�t_EXPL�t_EQUAL�t_NUMBER�t_PATH�t_ignorer�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�rrrr
rrrrrrrr!r#r(r.r5r<rCrHrLrPrTrXr[r]rbrhrmrprsrxr}rr�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�rr�r�r��<module>r$s��@�	�	�������V
��t?��x�?��o�?��	�	?�
�E�
?���?��^�?��^�?��M�?��	�?��	�?���?��	�?���?� �+�!?�"�^�#?�$�o�%?�(�g�)?�,�o�-?�.�o�/?�0�V�1?�2�+�3?�4�'�5?�6�g�7?�8�+�9?�<�V�=?�>�V�??�@�g�A?�B	�4�C?�D�V�E?�H�V�I?�J�g�K?�N�g�O?�P�+�Q?�R�<�S?�T�<�U?�V�<�W?�X�<�Y?�Z�)�[?�\�M�]?�^�M�_?�`�+�a?�b�)�c?�f��g?�h�+�i?�j�'�k?�l�I�m?�n��o?�p�M�q?�r�M�s?�v
�x�w?�x
�x�y?�z��}?��J�����������������������
�����������'��
��
��
��
�
��
�#�	����
�
���
��
)�� ��	�
�
�
��� �	�
����
�
�"�$�
��!�F
�	�	�	�
�	
��
�

�
�$
�	
�
�
�
�
�
�
�!�+�
�$
�

�

�
�
�	�
�&
�&
�	
�
�&	�
�
�	�
	�+�:
�&���
�
��	�
���
�����"
�*%�(Ur�