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/__pycache__/seobject.cpython-312.pyc
�

/�i���
�n�ddlZddlZddlZddlZddlZddlZddlZddlZddl�dZ	ddl
Z
ddlmZddl
mZddlZ	ddlZiZej$dkrded<ej&e	fd	d
ie�ddi��Zej ZddlZiZeed
<eed<eed<eed<eed<eed<e ed<e ed<e ed<e!ed<e!ed<e!ed<e"ed<e"ed<e"ed<e#ed<e#ed<e#ed<e$ed<e$ed <e$ed!<e%ed"<e%ed#<e%ed$<ddddddd d"d%�Z&d&d&d'd(d)d*d+d,dd-�	Z'	ddl(Z(e(jRe(jT��Gd.�d/�Z+Gd1�d2�Z-d3�Z.dPd4�Z/dPd5�Z0Gd6�d7�Z1Gd8�d9e1�Z2Gd:�d;e1�Z3Gd<�d=e1�Z4Gd>�d?e1�Z5Gd@�dAe1�Z6GdB�dCe1�Z7GdD�dEe1�Z8GdF�dGe1�Z9GdH�dIe1�Z:GdJ�dKe1�Z;GdL�dMe1�Z<GdN�dOe1�Z=y#	ddlZeej0d<n#e$rddlZeej0d<YnwxYwY���xYw#e,ef$r
Gd0�d/�Z+Y��wxYw)Q�N)�*zselinux-python)�
SELinuxPolicy)�	TypeQuery)�T�unicode�	localedirz/usr/share/locale�fallback�_��	all files�a�regular filez--�fz-d�	directory�dz-c�character device�cz-b�block device�bz-s�socket�sz-l�l�
symbolic link�pz-p�
named pipe)rrrrrrrr�any�block�char�dir�file�symlink�pipe)	rr
rrrrrrrc�.�eZdZd�Zdd�Zdd�Zd�Zd�Zy)�loggerc�R�tj�|_g|_g|_y�N)�audit�
audit_open�audit_fd�log_list�log_change_list��selfs �-/usr/lib/python3.12/site-packages/seobject.py�__init__zlogger.__init__ns!��!�,�,�.�D�M��D�M�#%�D� �c	��d}	||k7r
||	dzz
}d}	||k7r
||	dzz
}d}	||k7r
||	dzz
}d}	|jj|jtjt
jdt|�|d||||||dddg�y)N�-�sename�,�role�rangerr)r*�appendr)r'�AUDIT_ROLE_ASSIGN�sys�argv�str)
r-�msg�namer3�serole�serange�	oldsename�	oldserole�
oldserange�seps
          r.�logz
logger.logss����C���"��s�X�~�%������"��s�V�|�#�����*�$��s�W�}�$�����M�M� � �$�-�-��1H�1H�#�(�(�ST�+�WZ�[^�W_�ae�gh�jp�rx�{B�DM�OX�Zd�fh�jl�np�"q�
rr0c	��|jj|jtjt
jdt|�|d||||||dddg�y)Nrr)r*r7r)r'�AUDIT_ROLE_REMOVEr9r:r;�	r-r<r=r3r>r?r@rArBs	         r.�
log_removezlogger.log_remove�sz���M�M� � �$�-�-��1H�1H�#�(�(�ST�+�WZ�[^�W_�ae�gh�jp�rx�{B�DM�OX�Zd�fh�jl�np�"q�
rr0c	��|jj|jtjt|�ddddg�y)N�semanager)r+r7r)r'�AUDIT_USER_MAC_CONFIG_CHANGEr;�r-r<s  r.�
log_changezlogger.log_change�s:��� � �'�'�����8Z�8Z�\_�`c�\d�fp�rt�vx�z|�(}�~r0c��|jD]}tj||gz��|jD]}tj||gz��g|_g|_yr&)r*r'�audit_log_semanage_messager+�audit_log_user_comm_message)r-�successrs   r.�commitz
logger.commit�sY���]�]���0�0�1��y�=�B�#��)�)���1�1�A��	�M�C�*��D�M�#%�D� r0N�rrrrrrr��__name__�
__module__�__qualname__r/rDrHrMrR�r0r.r$r$ls��	&�

	r�	r�	�	&r0r$c�.�eZdZd�Zdd�Zdd�Zd�Zd�Zy)r$c��g|_yr&)r*r,s r.r/zlogger.__init__�s	���D�Mr0c	���d|�d|��}	|dk7r|	d|zz
}	|dk7r|	d|zz
}	|dk7r|	d|zz
}	|dk7r|	d|zz
}	|dk7r
|�|	d|zz
}	|dk7r
|�|	d	|zz
}	|jj|	�y)
N� z name=rz sename=z oldsename=z role=z
 old_role=z
 MLSRange=z old_MLSRange=�r*r7)
r-r<r=r3r>r?r@rArB�messages
          r.rDz
logger.log�s���'*�D�1�G���|��:��.�.���B���=�9�4�4����|��8�f�,�,���B���<�)�3�3���"�}��!4��<�'�1�1���R��J�$:��+�j�8�8���M�M� � ��)r0c	
�4�|j||||||||�yr&)rDrGs	         r.rHzlogger.log_remove�s���H�H�S�$�����I�z�Zr0c�@�|jjd|z�y)Nz %sr]rLs  r.rMzlogger.log_change�s���M�M� � ����-r0c��|dk(rd}nd}|jD])}tjtj||z��+y)N�zSuccessful: zFailed: )r*�syslog�LOG_INFO)r-rQr^rs    r.rRz
logger.commit�s7���!�|�(��$���]�]���
�
�f�o�o�w��{�;�#r0NrSrTrXr0r.r$r$�s��	�	*� 	[�	.�	<r0c�(�eZdZdd�Zdd�Zd�Zd�Zy)�
nullloggerc	��yr&rXrGs	         r.rDznulllogger.log����r0c	��yr&rXrGs	         r.rHznulllogger.log_remove�rhr0c��yr&rXrLs  r.rMznulllogger.log_change�rhr0c��yr&rX)r-rQs  r.rRznulllogger.commit�rhr0NrS)rUrVrWrDrHrMrRrXr0r.rfrf�s��
�
�
�
r0rfc��d}d}|dz|zdz}|dz|zdz}|dz|zdzdz|zdz}tjd	|zd
z|�S)Nzs[0-9]*zc[0-9]*z(\.z)?z(\,z)*z(-z(:�^�$)�re�search)�raw�sensitivity�category�	cat_range�
categories�regs      r.�validate_levelrw�sp���K��H��6�!�H�,�t�3�I��V�#�i�/�$�6�J�
��
�{�
*�T�
1�D�
8�:�
E��
L�C�
�9�9�S�3�Y��_�c�*�*r0c��d}|dk(r|�|��}n|}tj|�\}}|dk7r|S|r|t|�d}|dk(r|S|S�Nza:b:c:rbrr)�selinux�selinux_raw_to_trans_context�len)rq�prepend�filler�context�rc�transs      r.�	translater��sa��
�F��!�|�"�C�(�����6�6�w�?�K�R��	�Q�w��
���c�&�k�l�#����{��
��r0c��d}|dk(r|�|��}n|}tj|�\}}|dk7r|S|r|t|�d}|dk(r|S|Sry)rz�selinux_trans_to_raw_contextr|)r�r}r~rr�rqs      r.�untranslater��sa��
�F��!�|�"�E�*�����4�4�W�=�I�R��	�Q�w�����#�f�+�,���
�b�y����
r0c�T�eZdZdZdZdZdZdd�Zd�Zd�Z	d�Z
d�Zd�Zd	�Z
d
�Zd�Zy)
�semanageRecordsFNc�6�|rt|t�r||_n||_t	|dd�|_|jst	|dd�|_|j
|j�|_tj�\}}|jdk(s|j|k(rt�|_ytj|j�tjtj��|j���t!�|_y)N�noreloadF�storer)�
isinstancer;r��args�getattrr��
get_handle�shrz�selinux_getpolicytyper$�mylog�sepolicy�load_store_policy�selinux_set_policy_root�selinux_pathrf)r-r�r��
localstores    r.r/zsemanageRecords.__init__�s�����$��$�!��
� ��	���j�%�8��
��z�z� ��w��3�D�J��/�/�$�*�*�-��� �6�6�8���J��:�:���t�z�z�Z�7���D�J��&�&�t�z�z�2��+�+�g�6J�6J�6L�d�j�j�,Y�Z�#��D�Jr0c��||_yr&)r�)r-�loads  r.�
set_reloadzsemanageRecords.set_reloads�� ���
r0c��tjrtjSt�}|stt	d���tj
s!|dk7rt
||t�|t_t|�st|�tt	d���t|�}|tkrt|�tt	d���t|�}|dkrt|�tt	d���t|�atdkrt|�tt	d���|t_tjS)Nz Could not create semanage handlerz:SELinux policy is not managed or store cannot be accessed.zCannot read policy store.rz'Could not establish semanage connectionz!Could not test MLS enabled status)r��handle�semanage_handle_create�
ValueErrorr
�transaction�semanage_select_store�SEMANAGE_CON_DIRECTr��semanage_is_managed�semanage_handle_destroy�semanage_access_check�SEMANAGE_CAN_READ�semanage_connect�semanage_mls_enabled�is_mls_enabled)r-r�r�r�s    r.r�zsemanageRecords.get_handles���!�!�"�)�)�)�'�)����Q�A�B�C�C��*�*�u��{�!�&�%�1D�E�$)�O�!�"�6�*�#�F�+��Q�[�\�]�]�
"�6�
*��
�!�!�#�F�+��Q�:�;�<�<�
�f�
%��
��6�#�F�+��Q�H�I�J�J�-�f�5���A��#�F�+��Q�B�C�D�D�!'����%�%�%r0c�*�ttd����NzNot yet implemented�r�r
r,s r.�	deleteallzsemanageRecords.deleteall2�����0�1�2�2r0c��tjrttd���|j	�dt_y)Nz(Semanage transaction already in progressT)r�r�r�r
�beginr,s r.�startzsemanageRecords.start5s-���&�&��Q�I�J�K�K��
�
��&*��#r0c��tjryt|j�}|dkrt	td���y)Nrz$Could not start semanage transaction)r�r��semanage_begin_transactionr�r�r
�r-r�s  r.r�zsemanageRecords.begin;s9���&�&��
'����
0��
��6��Q�E�F�G�G�r0c�*�ttd���r�r�r,s r.�
customizedzsemanageRecords.customizedBr�r0c�2�tjry|jrt|jd�t|j�}|dkr/|jjd�ttd���|jjd�y)Nrz%Could not commit semanage transactionrb)
r�r�r��semanage_set_reloadr��semanage_commitr�rRr�r
r�s  r.rRzsemanageRecords.commitEsm���&�&���=�=������+�
�T�W�W�
%��
��6��J�J���a� ��Q�F�G�H�H��
�
���!�r0c��tjsttd���dt_|j	�y)Nz$Semanage transaction not in progressF)r�r�r�r
rRr,s r.�finishzsemanageRecords.finishQs-���*�*��Q�E�F�G�G�&+��#����
r0r&)rUrVrWr�r�r�r�r/r�r�r�r�r�r�rRr�rXr0r.r�r��sE���K�
�F��E��D�&�*!�"&�H3�+�H�3�
�r0r�c�@�eZdZd
d�Zd�Zd�Zdd�Zd�Zd�Zd�Z	d	�Z
y)�
moduleRecordsNc�0�tj||�yr&�r�r/�r-r�s  r.r/zmoduleRecords.__init__Z���� � ��t�,r0c��g}t|j�\}}}|dkrttd���t	|�D]�}t||�}t
|j|�\}}|dkrttd���t|j|�\}}|dkrttd���t|j|�\}}	|dkrttd���t|j|�\}}
|dkrttd���|j|||	|
f���|jd�d�	�|jd
���|S)Nr�Could not list SELinux moduleszCould not get module namezCould not get module enabledzCould not get module priorityzCould not get module lang_extc��|dS)NrrX��ts r.�<lambda>z'moduleRecords.get_all.<locals>.<lambda>y���Q�q�Tr0T)�key�reversec��|dS�NrrXr�s r.r�z'moduleRecords.get_all.<locals>.<lambda>zr�r0)r�)�semanage_module_list_allr�r�r
r6�semanage_module_list_nth�semanage_module_info_get_name� semanage_module_info_get_enabled�!semanage_module_info_get_priority�!semanage_module_info_get_lang_extr7�sort)r-rr��mlist�number�i�modr=�enabled�priority�lang_exts           r.�get_allzmoduleRecords.get_all]s8����6�t�w�w�?���U�F�
��6��Q�?�@�A�A��v��A�*�5�!�4�C�4�T�W�W�c�B�H�B���A�v� ��#>�!?�@�@�:�4�7�7�C�H�K�B���A�v� ��#A�!B�C�C�<�T�W�W�c�J�L�B���A�v� ��#B�!C�D�D�<�T�W�W�c�J�L�B���A�v� ��#B�!C�D�D�
�H�H�d�G�X�x�8�9�'�,	
���>�4��0�	���>��"��r0c��|j�}t|�dk(rgS|D�cgc]
}|ddk(s�|��c}D�cgc]
}d|dz��c}Scc}wcc}w)Nrrbz-d %s)r�r|)r-�allr��xs    r.r�zmoduleRecords.customized}s[���l�l�n���s�8�q�=��I�47�(E�C�q�1�Q�4�1�9��C�(E�F�(E�1��!�A�$��(E�F�F��(E��Fs�
A�A�Ac
�.�|j�}t|�dk(ry|r2tdtd�d�dtd�d�dtd��d��|D]=}|d	dk(rtd
�}n|r�d}t|dd�d|dd�d|d
d�d|����?y)Nr�
zModule Name�25r\�Priority�9�Languagerb�Disabledr�r�5)r�r|�printr
)r-�heading�	locallistr�r��disableds      r.�listzmoduleRecords.list�s����l�l�n���s�8�q�=�����=�)9�1�Z�=�!�J�-�X�Y��A���t�q�y��Z�=�������!�A�$��!��a��d�H�E�F�r0c�,�tjj|�stt	d�|z��t|j|�}|dkrtt	d�|z��t|j|�}|dk\r|j�yy)NzModule does not exist: %s r�3Invalid priority %d (needs to be between 1 and 999))	�os�path�existsr�r
�semanage_set_default_priorityr��semanage_module_install_filerR)r-r r�r�s    r.�addzmoduleRecords.add�s{���w�w�~�~�d�#��Q�;�<�t�C�D�D�
*�4�7�7�H�
=��
��6��Q�T�U�X`�`�a�a�
)�$�'�'�4�
8��
��7��K�K�M�r0c��|j�D]�}t|j�\}}|dkrtt	d���t|j||�}|dkrtt	d���t
|j||�}|dks��|rtt	d�|z��tt	d�|z��|j�y)NrzCould not create module keyzCould not set module key namezCould not enable module %szCould not disable module %s)�split�semanage_module_key_creater�r�r
�semanage_module_key_set_name�semanage_module_set_enabledrR)r-�module�enable�mr�r�s      r.�set_enabledzmoduleRecords.set_enabled�s�������A�0����9�G�B���A�v� ��#@�!A�B�B�-�d�g�g�s�A�>�B��A�v� ��#B�!C�D�D�,�T�W�W�c�6�B�B��A�v��$�Q�'C�%D�q�%H�I�I�$�Q�'D�%E��%I�J�J� �	
���
r0c�"�t|j|�}|dkrttd�|z��|j	�D]:}t|j|�}|dks�|dk7s�%ttd�|z��|j
�y)Nrr����z*Could not remove module %s (remove failed))r�r�r�r
r��semanage_module_removerR)r-r�r�r�r�s     r.�deletezmoduleRecords.delete�s��
*�4�7�7�H�
=��
��6��Q�T�U�X`�`�a�a�����A�'�����3�B��A�v�"��(� ��#O�!P�ST�!T�U�U� �
	
���
r0c��|j�D�cgc]
}|ddk(s�|��c}D�cgc]}|d��	}}|D]}|j|d��ycc}wcc}w)NrbrT)r�r�)r-r�r�rr�s     r.r�zmoduleRecords.deleteall�s^��'+�|�|�~�C�~�!��1����A�~�C�D�C�a�Q�q�T�C��D��A����Q��%���D��Ds�
A�A�Ar&�rbr)rUrVrWr/r�r�r�r�r�r�r�rXr0r.r�r�Xs-��-��@G�G� 
��$
�&r0r�c��eZdZdd�Zd�Zy)�dontauditClassNc�0�tj||�yr&r�r�s  r.r/zdontauditClass.__init__�r�r0c��|dvrttd���|j�t|j|dk(�|j�y)N)�on�offz'dontaudit requires either 'on' or 'off'r)r�r
r��semanage_set_disable_dontauditr�rR)r-�	dontaudits  r.�togglezdontauditClass.toggle�s@���M�)��Q�H�I�J�J��
�
��&�t�w�w�	�U�0B�C����
r0r&)rUrVrWr/r
rXr0r.rr�s��-�r0rc�:�eZdZd	d�Zd�Zd�Zd
d�Zd�Zd�Zd�Z	y)�permissiveRecordsNc�0�tj||�yr&r�r�s  r.r/zpermissiveRecords.__init__�r�r0c�,�g}t|j�\}}}|dkrttd���t	|�D]Q}t||�}t
|�}|s�|jd�s�/|j|jd�d��S|S)Nrr��permissive_rb)
�semanage_module_listr�r�r
r6r��semanage_module_get_name�
startswithr7r�)r-rr�r�r�r�r�r=s        r.r�zpermissiveRecords.get_all�s�����2�4�7�7�;���U�F�
��6��Q�?�@�A�A��v��A�*�5�!�4�C�+�C�0�D�����
�6�������M�2�1�5�6�	�
�r0c�`�t|j��D�cgc]}d|z��	c}Scc}w)Nz-a %s)�sortedr�)r-r�s  r.r�zpermissiveRecords.customized�s+��%+�D�L�L�N�%;�<�%;���!��%;�<�<��<s�+c��tjtj�D�cgc]
}|ds�	|��c}D�cgc]}|d��	}}t|�dk(ry|rt	dtd�z�|j
�}|D]}||vs�t	|��t|�dk(ry|rt	dtd�z�|D]
}t	|��ycc}wcc}w)N�
permissiver=rz
%-25s
zBuiltin Permissive TypeszCustomized Permissive Types)r��info�TYPEr|r�r
r�)r-r�r�r��yr�r�r�s        r.r�zpermissiveRecords.list�s���.6�m�m�H�M�M�.J�"^�.J��a�P\�o�1�.J�"^�_�"^�Q�q��y�"^��_��s�8�q�=����+��#=�!>�?�@��\�\�^�
��A��
�"��a����z�?�a�����+��#@�!A�B�C��A��!�H���!#_��_s�
C�C�Cc��d|z}d|z}t|j|t|�|d�}|dk\r|j�|dkrt	td�|z��y)N�
permissive_%sz(typepermissive %s)�cilrz?Could not set permissive domain %s (module installation failed))�semanage_module_installr�r|rRr�r
)r-�typer=�modtxtr�s     r.r�zpermissiveRecords.add�sc����%��&��-��
$�T�W�W�f�c�&�k�4��
O��
��7��K�K�M�
��6��Q�`�a�dh�h�i�i�r0c��|j�D]7}t|jd|z�}|dks�"tt	d�|z��|j�y)Nrrz5Could not remove permissive domain %s (remove failed))r�r�r�r�r
rR)r-r=�nr�s    r.r�zpermissiveRecords.deletesP������A�'�����1�1D�E�B��A�v� ��#Z�![�^b�!b�c�c��
	
���
r0c��|j�}t|�dkDr#dj|�}|j|�yy)Nrr\)r�r|�joinr�)r-rr�s   r.r�zpermissiveRecords.deletealls6���L�L�N���q�6�A�:��(�(�1�+�C��K�K���r0r&r)
rUrVrWr/r�r�r�r�r�r�rXr0r.rr�s&��-��=��(	j��r0rc�d�eZdZdd�Zd�Zd�Zd�Zdd�Zdd�Zd�Z	d	�Z
d
�Zd�Zdd�Z
d
�Zdd�Zy)�loginRecordsNc�h�tj||�d|_d|_d|_d|_yr&)r�r/r@rBr3r?r�s  r.r/zloginRecords.__init__s.��� � ��t�,������������r0c���tj|�\}|_|_|dk(rd}t	|j
�}|j
|j�\}\}}|j
|�\}\}}	tdk(r|dk7rt|�}n|}t|j|�\}}
|dkrttd�|z��|ddk(r	tj|dd�n	tj |�t#|j�\}}|dkrttd	�|z��t%|j||�}|dkrttd
�|z��tdk(r8|dk7r3t'|j||�}|dkrttd�|z��t)|j||�}|dkrttd�|z��t+|j|
|�}|dkrttd
�|z��t-|
�t/|�y#ttd�|ddz��xYw#ttd�|z��xYw)Nr�user_urbr�Could not create a key for %s�%zLinux Group %s does not existzLinux User %s does not existz%Could not create login mapping for %s�Could not set name for %s�Could not set MLS range for %sz!Could not set SELinux user for %sz"Could not add login mapping for %s)rz�getseuserbynamer@rB�seluserRecordsr��getr�r��semanage_seuser_key_creater�r�r
�grp�getgrnam�pwd�getpwnam�semanage_seuser_create�semanage_seuser_set_name�semanage_seuser_set_mlsrange�semanage_seuser_set_sename�semanage_seuser_modify_local�semanage_seuser_key_free�semanage_seuser_free)r-r=r3r?�rec�userrecr6r�rAr>�k�us            r.�__addzloginRecords.__adds9��/6�/F�/F�t�/L�,��T�^�T�_��R�<��F� ����+��!(���T�^�^�!<�����I�%�k�k�&�1���|��F��Q���"�}�%�g�.����,�T�W�W�d�;���Q�
��6��Q�>�?�$�F�G�G���7�c�>�
P����T�!�"�X�&�
K����T�"�)����1���Q�
��6��Q�F�G�$�N�O�O�
%�d�g�g�q�$�
7��
��6��Q�:�;�d�B�C�C��a��g��m�-�d�g�g�q�'�B�B��A�v� ��#C�!D�t�!K�L�L�
'�����F�
;��
��6��Q�B�C�d�J�K�K�
)�$�'�'�1�a�
8��
��6��Q�C�D�t�K�L�L� ��#��Q���=
P� ��#B�!C�d�1�2�h�!N�O�O��
K� ��#A�!B�T�!I�J�J�s�H&�,I�&I�Ic�
�	|j�|j|�r+ttd�|z�|j	|||�n|j|||�|j
�y#t$r}|�d}~wwxYw)Nz:Login mapping for %s is already defined, modifying instead)r��_loginRecords__existsr�r
�_loginRecords__modify�_loginRecords__addrRr��r-r=r3r?�errors     r.r�zloginRecords.addRsn��
	��J�J�L��}�}�T�"��a�T�U�X\�\�]��
�
�d�F�G�4��
�
�4���1��K�K�M���	��K��	�s�A/A2�2	B�;A=�=Bc���t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��t|�|S)Nrr)�2Could not check if login mapping for %s is defined)r0r�r�r
�semanage_seuser_existsr:�r-r=r�r>r�s     r.�__existszloginRecords.__exists`sr��,�T�W�W�d�;���Q�
��6��Q�>�?�$�F�G�G�-�d�g�g�q�9���V�
��6��Q�S�T�W[�[�\�\� ��#��
r0c�`�tj|�\}|_|_|dk(r|dk(rt	td���t
|j�}|j|j�\}\}}|dk7r|j|�\}\}}	n|}	|dk7r||_	n||_	t|j|�\}}
|dkrt	td�|z��t|j|
�\}}|dkrt	td�|z��|st	td�|z��t|j|
�\}}|dkrt	td�|z��t|�|_t|�|_t dk(r%|dk7r t#|j|t%|��|dk7rt'|j||�||_n|j|_t+|j|
|�}|dkrt	td	�|z��t-|
�t/|�y)
NrzRequires seuser or serangerr)rH�#Login mapping for %s is not definedzCould not query seuser for %srbz%Could not modify login mapping for %s)rzr-r@rBr�r
r.r�r/r?r0r�rI�semanage_seuser_query�semanage_seuser_get_mlsrange�semanage_seuser_get_senamer�r7r�r8r3r9r:r;)
r-r=r3r?r<r=r6r�rAr>r>r�r?s
             r.�__modifyzloginRecords.__modifyls���/6�/F�/F�t�/L�,��T�^�T�_��R�<�G�r�M��Q�;�<�=�=� ����+��!(���T�^�^�!<�����I��R�<�")�+�+�f�"5��E�<�B���F��b�=�"�D�L� �D�L�,�T�W�W�d�;���Q�
��6��Q�>�?�$�F�G�G�-�d�g�g�q�9���V�
��6��Q�S�T�W[�[�\�\���Q�D�E��L�M�M�'�����3���Q�
��6��Q�>�?�$�F�G�G�6�q�9���3�A�6����a��g��m�(����!�[��5I�J��R�<�&�t�w�w��6�:� �D�K��.�.�D�K�
)�$�'�'�1�a�
8��
��6��Q�F�G�$�N�O�O� ��#��Q�r0c��	|j�|j|||�|j�y#t$r}|�d}~wwxYwr&)r�rCrRr�rEs     r.�modifyzloginRecords.modify�s>��	��J�J�L��M�M�$���0��K�K�M���	��K��	�s�36�	A�A�Ac�Z�tj|�\}|_|_t	|j
�}|j
|j�\}\}}t|j|�\}}|dkrttd�|z��t|j|�\}}|dkrttd�|z��|sttd�|z��t|j|�\}}|dkrttd�|z��|sttd�|z��t|j|�}|dkrttd�|z��t|�tjd�\}|_|_|j
|j�\}\}}	y)Nrr)rHrMz<Login mapping for %s is defined in policy, cannot be deletedz%Could not delete login mapping for %s�__default__)rzr-r@rBr.r�r/r0r�r�r
rI�semanage_seuser_exists_local�semanage_seuser_del_localr:r3r?)
r-r=r<r=r6r�rAr>r�r>s
          r.�__deletezloginRecords.__delete�sy��/6�/F�/F�t�/L�,��T�^�T�_� ����+��!(���T�^�^�!<�����I�,�T�W�W�d�;���Q�
��6��Q�>�?�$�F�G�G�-�d�g�g�q�9���V�
��6��Q�S�T�W[�[�\�\���Q�D�E��L�M�M�3�D�G�G�Q�?���V�
��6��Q�S�T�W[�[�\�\���Q�]�^�ae�e�f�f�
&�t�w�w��
2��
��6��Q�F�G�$�N�O�O� ��#�)0�)@�)@��)O�&��T�[�$�,�%�k�k�$�+�+�6���|��Fr0c��	|j�|j|�|j�y#t$r}|�d}~wwxYwr&)r��_loginRecords__deleterRr��r-r=rFs   r.r�zloginRecords.delete�s:��	��J�J�L��M�M�$���K�K�M���	��K��	�s�14�	A�?�Ac��t|j�\}}|dkrttd���	|j	�|D]}|jt
|���|j�y#t$r}|�d}~wwxYw�Nr�Could not list login mappings)�semanage_seuser_list_localr�r�r
r�rZ�semanage_seuser_get_namerR�r-r��ulistr?rFs     r.r�zloginRecords.deleteall�st��0����9���U�
��6��Q�>�?�@�@�	��J�J�L����
�
�6�q�9�:���K�K�M���	��K��	�s�AA5�5	B�>B�Bc��i}tj�dz|_tj|j�D]}\}}}||jk(s�|D]b}	t|dz|z�}|j
�j�jd�}|j�|d|d|df||<�d�|S#t$rY�twxYw)Nz/logins�/�:rbr�r)rz�selinux_policy_root�logins_pathr��walk�open�read�rstripr��close�
IndexError)r-�ddictr��dirs�filesr=�fdr<s        r.�get_all_loginszloginRecords.get_all_logins�s�����"�6�6�8�9�D���!#����)9�)9�!:��D�$���t�'�'�'�!�D��!�$��*�t�"3�4�� �g�g�i�.�.�0�6�6�s�;�����
�'*�1�v�s�1�v�s�1�v�&>��d��"�";����&����s�AC�	C�Cc�"�i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]'}t
|�}t|�t|�df||<�)|S)Nrr^r)	r_r�rb�semanage_seuser_listr�r
r`rPrO)r-r�rnr�r?r=s      r.r�zloginRecords.get_all�s������9�$�'�'�B��R���3�D�G�G�<��R���
��6��Q�>�?�@�@����A�+�A�.�D�5�a�8�:V�WX�:Y�[^�_�E�$�K���r0c	��g}|jd�}t|j��D]N}||dr'|jd||d�d||d�d|����2|jd||d�d|����P|S)NTrbz-a -s r� -r '�' r\�r�r�keysr7�r-rrnr>s    r.r�zloginRecords.customized��x�������T�"����
�
��%�A��Q�x��{����%��(�1�+�u�Q�x��{�A�N�O����%��(�1�+�q�9�:�	&�
�r0c�*�|j|�}|j�}t|j��}t|j��}t	|�dk(rt	|�dk(ryt
dk(r�|r?t
dtd�d�dtd�d�dtd�d�dtd	��d�	�|D]2}||}t
|d�d|dd�dt|d�d�d|d
����4t	|�rt
d|jz�|D]2}||}t
|d�d|dd�dt|d�d�d|d
����4y|r&t
dtd�d�dtd�d�d��|D]}t
|d�d||dd����y)
Nrrbr�z
Login Name�20r\�SELinux Userz
MLS/MCS Range�Servicer�z
Local customization in %sr�)
r�rrrryr|r�r�r
r�rg)	r-r�r�rn�ldict�lkeysryr>r?s	         r.r�zloginRecords.listsH�����Y�'���#�#�%���u�z�z�|�$���e�j�j�l�#���t�9��>�c�%�j�A�o���Q����A�l�O�Q�~�EV�XY�Zi�Xj�lm�nw�lx�y�z����!�H����1�Q�4��1�Q�4��!�A�$�O�P���5�z��3�d�6F�6F�F�G����!�H����1�Q�4��1�Q�4��!�A�$�O�P����1�\�?�A�n�<M�N�O����q�%��(�1�+�6�7�r0r&)rr�rr)rUrVrWr/rDr�rBrCrSrZr�r�rrr�r�r�rXr0r.r%r%sE���4 �l�
�0 �d�7�<��
���8r0r%c�t�eZdZdd�Zd�Zd�Zd�Zd�Zgdddfd�Zgdddfd	�Z	d
�Z
d�Zd�Zdd
�Z
d�Zdd�Zy)r.Nc�0�tj||�yr&r�r�s  r.r/zseluserRecords.__init__r�r0c��t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��t|j|�\}}|dkrttd�|z��t
|�}t|j|�}t|�t|�||fS)Nrr)�-Could not check if SELinux user %s is defined�Could not query user for %s)
�semanage_user_key_creater�r�r
�semanage_user_exists�semanage_user_query�semanage_user_get_mlsrange�semanage_user_get_roles�semanage_user_key_free�semanage_user_free)r-r=r�r>r�r?r?r>s        r.r/zseluserRecords.get!s���*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�N�O�RV�V�W�W�%�d�g�g�q�1���Q�
��6��Q�<�=��D�E�E�,�Q�/��(����!�4���q�!��1�����r0c�,�tdk(r&|dk(rd}nt|�}|dk(rd}nt|�}t|�dkrtt	d�|z��t|j|�\}}|dkrtt	d�|z��t|j�\}}|dkrtt	d�|z��t|j||�}|dkrtt	d�|z��|D]C}	t|j||	�}|dks� tt	d	�j|	|�
���tdk(rft|j||�}|dkrtt	d�|z��t|j||�}|dkrtt	d�|z��t|j||�}|dkr%tt	d
�j	|����t|j|�\}}
|dkrtt	d�|z��t|j||�}|dkrtt	d�|z��t!|�t#|�|j$j'd|dj)|�|��y)Nrbr�s0z%You must add at least one role for %srr)z$Could not create SELinux user for %sr+z$Could not add role {role} for {name})r5r=r,zCould not set MLS level for %sz(Could not add prefix {prefix} for {role})r5�prefixzCould not extract key for %szCould not add SELinux user %s�seuserr4)r3r>r?)r�r�r|r�r
r�r��semanage_user_create�semanage_user_set_name�semanage_user_add_role�format�semanage_user_set_mlsrange�semanage_user_set_mlslevel�semanage_user_set_prefix�semanage_user_key_extract�semanage_user_modify_localr�r�r�rDr#)r-r=�roles�selevelr?r�r�r>r?�rr�s           r.r@zseluserRecords.__add1s`���Q���"�}���%�g�.���"�}���%�g�.���u�:��>��Q�F�G�$�N�O�O�*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�&�t�w�w�/���Q�
��6��Q�E�F��M�N�N�
#�D�G�G�Q��
5��
��6��Q�:�;�d�B�C�C��A�'�����A�6�B��A�v� ��#I�!J�!Q�!Q�WX�_c�!Q�!d�e�e��
�Q��+�D�G�G�Q��@�B��A�v� ��#C�!D�t�!K�L�L�+�D�G�G�Q��@�B��A�v� ��#C�!D�t�!K�L�L�
%�d�g�g�q�&�
9��
��6��Q�I�J�Q�Q�WX�ag�Q�h�i�i�-�d�g�g�q�9�	��S�
��6��Q�=�>��E�F�F�
'�����A�
6��
��6��Q�>�?�$�F�G�G��q�!��1���
�
���x��S�X�X�e�_�g��Vr0c�H�	|j�|j|�r-ttd�|z�|j	|||||�n|j|||||�|j
�y#t$r"}|jj
d�|�d}~wwxYw)Nz5SELinux user %s is already defined, modifying insteadr)	r��_seluserRecords__existsr�r
�_seluserRecords__modify�_seluserRecords__addrRr�r��r-r=r�r�r?r�rFs       r.r�zseluserRecords.addhs���
	��J�J�L��}�}�T�"��a�O�P�SW�W�X��
�
�d�E�7�G�V�D��
�
�4����&�A��K�K�M���	��J�J���a� ��K��	�s�A3A6�6	B!�?B�B!c���t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��t|�|S)Nrr)r�)r�r�r�r
r�r�rJs     r.rKzseluserRecords.__existsusr��*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�N�O�RV�V�W�W��q�!��
r0rc	��d}d}dj|�}|dk(rIt|�dk(r;|dk(r6|dk(r1tdk(rtt	d���tt	d���t|j|�\}	}
|	dkrtt	d�|z��t|j|
�\}	}|	dkrtt	d�|z��|stt	d	�|z��t|j|
�\}	}|	dkrtt	d
�|z��t|�}t|j|�\}	}
|	dk\rdj|
�}tdk(r%|dk7r t|j|t|��tdk(r%|dk7r t|j|t|��|dk7rt|j||�t|�dk7r;|
D]}||vs�t||��|D]}||
vs�t!|j||�� t#|j|
|�}	|	dkrtt	d�|z��t%|
�t'|�dj|j)��}dj|j)��}|j*j-d
||||||��y)Nrr\rrbz&Requires prefix, roles, level or rangezRequires prefix or rolesr)r��SELinux user %s is not definedr�z Could not modify SELinux user %sr4r�)r3r@r>r?rArB)r#r|r�r�r
r�r�r�r�r�r�r�r�r�r��semanage_user_del_roler�r�r�r�r�r�rD)r-r=r�r�r?r�rArB�newrolesr�r>r�r?�rlistr�r5s                r.rQzseluserRecords.__modify�sx���	��
��8�8�E�?���R�<�C��J�!�O��2�
�'�R�-���"� ��#K�!L�M�M� ��#=�!>�?�?�*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�N�O�RV�V�W�W���Q�?�@�4�G�H�H�%�d�g�g�q�1���Q�
��6��Q�<�=��D�E�E�/��2�
�-�d�g�g�q�9���U�
��7������I��a��g��m�&�t�w�w��;�w�3G�H��a��g��m�&�t�w�w��;�w�3G�H��R�<�$�T�W�W�a��8��u�:��?����E�>�*�1�a�0�����E�>�*�4�7�7�A�q�9��(�����A�
6��
��6��Q�A�B�T�I�J�J��q�!��1���x�x����(�)���H�H�Y�_�_�.�/�	��
�
���x���T�SZ�fo�}G��	Hr0c���	|j�|j|||||�|j�y#t$r"}|jjd�|�d}~wwxYwr�)r�r�rRr�r�r�s       r.rSzseluserRecords.modify�sT��	��J�J�L��M�M�$��w���@��K�K�M���	��J�J���a� ��K��	�s�58�	A#�A�A#c�H�t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��|sttd�|z��t|j|�\}}|dkrttd�|z��|sttd�|z��t
|j|�\}}|dkrttd�|z��t|�}t|j|�\}}dj|�}t|j|�}|dkrttd�|z��t|�t|�|jjd	|||�
�y)Nrr)r�r�z7SELinux user %s is defined in policy, cannot be deletedr�r4z Could not delete SELinux user %sr�)r@rBrA)r�r�r�r
r��semanage_user_exists_localr�r�r�r#�semanage_user_del_localr�r�r�rH)	r-r=r�r>r�r?rBr�rAs	         r.rXzseluserRecords.__delete�s��*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�N�O�RV�V�W�W���Q�?�@�4�G�H�H�1�$�'�'�1�=���V�
��6��Q�N�O�RV�V�W�W���Q�X�Y�\`�`�a�a�%�d�g�g�q�1���Q�
��6��Q�<�=��D�E�E�/��2�
�-�d�g�g�q�9���U��H�H�U�O�	�
$�T�W�W�a�
0��
��6��Q�A�B�T�I�J�J��q�!��1���
�
���h�$�:�Yb��cr0c���	|j�|j|�|j�y#t$r"}|jjd�|�d}~wwxYwr�)r��_seluserRecords__deleterRr�r�r[s   r.r�zseluserRecords.delete�sL��	��J�J�L��M�M�$���K�K�M���	��J�J���a� ��K��	�s�14�	A�A�Ac�F�t|j�\}}|dkrttd���	|j	�|D]}|jt
|���|j�y#t$r"}|jjd�|�d}~wwxYwr])	�semanage_user_list_localr�r�r
r�r��semanage_user_get_namerRr�ras     r.r�zseluserRecords.deleteall�s���.�t�w�w�7���U�
��6��Q�>�?�@�@�	��J�J�L����
�
�4�Q�7�8���K�K�M���	��J�J���a� ��K��	�s�AA5�5	B �>B�B c���i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]�}t
|�}t|j|�\}}|dkrt	td�|z��dj|�}t|�t|�t|�|f|t
|�<��|S)NrzCould not list SELinux usersz Could not list roles for user %sr\)r�r�rb�semanage_user_listr�r
r�r�r#�semanage_user_get_prefix�semanage_user_get_mlslevelr�)r-r�rnr�r?r=r�r�s        r.r�zseluserRecords.get_all�s������7����@��R���1�$�'�'�:��R���
��6��Q�=�>�?�?����A�)�!�,�D�1�$�'�'�1�=�K�R���A�v� ��#E�!F��!M�N�N��H�H�U�O�E�0H��0K�Mg�hi�Mj�mG�HI�mJ�LQ�0R�E�(��+�,���r0c�"�g}|jd�}t|j��D]_}||ds||dr0|jd||d�d||d�d||d�d|����C|jd	||d�d|����a|S)
NTrbr�z-a -L z -r z -R 'rrwz-a -R 'rxrzs    r.r�zseluserRecords.customizeds��������T�"����
�
��%�A��Q�x��{�e�A�h�q�k�����a����U�1�X�a�[�RW�XY�RZ�[\�R]�_`�a�b����E�!�H�Q�K��;�<�	&�
�r0c
��|j|�}t|�dk(ryt|j��}tdk(r�|r�tddd�dt
d�d�dt
d	�d�dt
d	�d
���tt
d�d�dt
d�d�dt
d
�d�dt
d�d
�dt
d��d�
�|D]I}t|d�d||dd�dt||d�d�dt||d�d
�d||d��	��Ky|r$tt
d�d�dt
d��d��|D]}t|d�d||d����y)Nrrbr�r�15r\�Labeling�10zMLS/�30r~�Prefixz	MCS Levelz	MCS Rangez
SELinux Rolesr�r)r�r|rryr�r�r
r��r-r�r�rnryr>s      r.r�zseluserRecords.lists8�����Y�'���u�:��?���e�j�j�l�#���Q����R��:���&�	�ST�U[�S\�]�^���.�8I�1�X�;�XY�Ze�Xf�hi�ju�hv�xy�{J�yK�L�M����a��q��!��i�PU�VW�PX�YZ�P[�F\�^g�hm�no�hp�qr�hs�^t�v{�|}�v~�@A�wB�C�D����a��&7��?�9K�L�M����A�u�Q�x��{�3�4�r0r&r�r)rUrVrWr/r/r�r�r�r�rSr�r�r�r�r�r�rXr0r.r.r.s_��-�� 5W�n�
�$&�r�2�b�6H�p"$�R��B��d�B���(�5r0r.c�l�eZdZgZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dd�Zdd
�Zd�Zdd�Zy)�portRecordsNc���tj||�	tttjtj
d��dd�|_y#t$rYywxYw)N�	port_typer�types)r�r/r�r�r�	ATTRIBUTE�valid_types�RuntimeErrorr�s  r.r/zportRecords.__init__0sX��� � ��t�,�	�#�D����x�7I�7I�;�)W�$X�YZ�$[�\c�$d�e�D����	��	�s�AA�	A&�%A&c�D�ttttd�}||j	�vr||}ntt
d���|dk(rtt
d���t|t�r|jdd�}n|f}t|�dk(rt|d�x}}nt|d�}t|d�}|dkDrtt
d	���t|j|||�\}}	|dkr%tt
d
�j||����|	|||fS)N)�tcp�udp�sctp�dccpz0Protocol has to be one of udp, tcp, dccp or sctprzPort is requiredr2rbr�zInvalid Portz)Could not create a key for {proto}/{port}��proto�port)�SEMANAGE_PROTO_TCP�SEMANAGE_PROTO_UDP�SEMANAGE_PROTO_SCTP�SEMANAGE_PROTO_DCCPryr�r
r�r;r�r|�int�semanage_port_key_creater�r�)
r-r�r��	protocols�proto_d�ports�high�lowr�r>s
          r.�__genkeyzportRecords.__genkey7s��.�.�0�0�2�	�
�I�N�N�$�$���&�G��Q�Q�R�S�S��2�:��Q�1�2�3�3��d�C� ��J�J�s�A�&�E��G�E��u�:��?��U�1�X��&�D�3��e�A�h�-�C��u�Q�x�=�D��%�<��Q�~�.�/�/�*�4�7�7�C��w�G���Q�
��6��Q�J�K�R�R�Y^�ei�R�j�k�k��7�C��&�&r0c�4�tdk(r|dk(rd}nt|�}|dk(rttd���t	j
|�}||jvrttd�|z��|j||�\}}}}t|j�\}	}
|	dkr%ttd�j||����t|
|�t|
||�t|j�\}	}|	dkr%ttd	�j||����t|j|d
�}	|	dkr%ttd�j||����t|j|d�}	|	dkr%ttd
�j||����t!|j||�}	|	dkr%ttd�j||����tdk(rF|dk7rAt#|j||�}	|	dkr%ttd�j||����t%|j|
|�}	|	dkr%ttd�j||����t'|j||
�}	|	dkr%ttd�j||����t)|�t+|�t-|
�|j.j1d|�dt3j4|��dd
�dd�d|�d|���y)Nrbrr��Type is required�'Type %s is invalid, must be a port typerz(Could not create port for {proto}/{port}r�z+Could not create context for {proto}/{port}�system_uz5Could not set user in port context for {proto}/{port}�object_rz5Could not set role in port context for {proto}/{port}z5Could not set type in port context for {proto}/{port}z;Could not set mls fields in port context for {proto}/{port}z-Could not set port context for {proto}/{port}z!Could not add port {proto}/{port}zresrc=port op=add lport=� proto=�
 tcontext=re)r�r�r�r
r��get_real_type_namer��_portRecords__genkey�semanage_port_creater�r��semanage_port_set_proto�semanage_port_set_range�semanage_context_create�semanage_context_set_user�semanage_context_set_role�semanage_context_set_type�semanage_context_set_mls�semanage_port_set_con�semanage_port_modify_local�semanage_context_free�semanage_port_key_free�semanage_port_freer�rMr�getprotobyname)r-r�r�r?rr>r�r�r�r�r�cons            r.r@zportRecords.__addWs����Q���"�}���%�g�.���2�:��Q�1�2�3�3��*�*�4�0���t�'�'�'��Q�H�I�D�P�Q�Q�"&�-�-��e�"<���G�S�$�&�t�w�w�/���Q�
��6��Q�I�J�Q�Q�X]�dh�Q�i�j�j���7�+���3��-�+�D�G�G�4�	��S�
��6��Q�L�M�T�T�[`�gk�T�l�m�m�
&�t�w�w��Z�
@��
��6��Q�V�W�^�^�ej�qu�^�v�w�w�
&�t�w�w��Z�
@��
��6��Q�V�W�^�^�ej�qu�^�v�w�w�
&�t�w�w��T�
:��
��6��Q�V�W�^�^�ej�qu�^�v�w�w��a��g��m�)�$�'�'�3��@�B��A�v� ��#`�!a�!h�!h�ot�{�!h�"A�B�B�
"�4�7�7�A�s�
3��
��6��Q�N�O�V�V�]b�im�V�n�o�o�
'�����A�
6��
��6��Q�B�C�J�J�QV�]a�J�b�c�c��c�"��q�!��1���
�
���\`�bh�bw�bw�x}�b~�AK�MW�Y]�_f�g�	hr0c��|j�|j||�r:ttd�j	||���|j||||�n|j
||||�|j�y)Nz6Port {proto}/{port} already defined, modifying insteadr�)r��_portRecords__existsr�r
r��_portRecords__modify�_portRecords__addrR)r-r�r�r?rs     r.r�zportRecords.add�sf���
�
���=�=��u�%��!�L�M�T�T�[`�gk�T�l�m��M�M�$��w��5��J�J�t�U�G�T�2����
r0c���|j||�\}}}}t|j|�\}}|dkr%tt	d�j||����t
|�|S)Nr�1Could not check if port {proto}/{port} is definedr�)r��semanage_port_existsr�r�r
r�r��	r-r�r�r>r�r�r�r�r�s	         r.rKzportRecords.__exists�sf��"&�-�-��e�"<���G�S�$�+�D�G�G�Q�7���V�
��6��Q�R�S�Z�Z�af�mq�Z�r�s�s��q�!��
r0c�X�|dk(r6|dk(r1tdk(rttd���ttd���tj|�}|r%||j
vrttd�|z��|j
||�\}}}}t|j|�\}	}
|	dkr%ttd�j||����|
s%ttd	�j||����t|j|�\}	}|	dkr%ttd
�j||����t|�}tdk(r(|dk(rd}n t|j|t|��|dk7rt|j||�t|j||�}	|	dkr%ttd�j||����t!|�t#|�|j$j'd
|�dt)j*|��dd�dd�d|�d|���y)Nrrb�Requires setype or serange�Requires setyper�rr�r��"Port {proto}/{port} is not definedz#Could not query port {proto}/{port}r�z$Could not modify port {proto}/{port}zresrc=port op=modify lport=r�r�r�rer�)r�r�r
r�r�r�r�r�r�r��semanage_port_query�semanage_port_get_conr�r�r�r�r�r�r�rMrr�)
r-r�r�r?�setyper>r�r�r�r�r�rr�s
             r.rQzportRecords.__modify�s���b�=�V�r�\���"� ��#?�!@�A�A� ��#4�!5�6�6��,�,�V�4���f�D�$4�$4�4��Q�H�I�F�R�S�S�"&�-�-��e�"<���G�S�$�+�D�G�G�Q�7���V�
��6��Q�R�S�Z�Z�af�mq�Z�r�s�s���Q�C�D�K�K�RW�^b�K�c�d�d�%�d�g�g�q�1���Q�
��6��Q�D�E�L�L�SX�_c�L�d�e�e�#�A�&���Q���"�}���(����#�{�7�7K�L��R�<�%�d�g�g�s�F�;�
'�����A�
6��
��6��Q�E�F�M�M�TY�`d�M�e�f�f��q�!��1���
�
���_c�ek�ez�ez�|A�fB�DN�PZ�\b�dk�l�	mr0c�l�|j�|j||||�|j�yr&)r�r�rR)r-r�r�r?rs     r.rSzportRecords.modify�s&���
�
���
�
�d�E�7�F�3����
r0c	�p�t|j�\}}|dkrttd���|j	�|D]�}t|�}t
|�}t|�}t|�}|�d|��}|j||�\}	}
}}|dkrttd�|z��t|j|	�}|dkrttd�|z��t|	�||k(r|}|jjd|�dtj|������|j!�y)NrzCould not list the portsr2r)zCould not delete the port %s�resrc=port op=delete lport=r�)�semanage_port_list_localr�r�r
r��semanage_port_get_proto�semanage_port_get_proto_str�semanage_port_get_low�semanage_port_get_highr��semanage_port_del_localr�r�rMrr�rR)r-r��plistr�r��	proto_strr�r��port_strr>r�s           r.r�zportRecords.deleteall�s��.�t�w�w�7���U�
��6��Q�9�:�;�;��
�
���D�+�D�1�E�3�E�:�I�'��-�C�)�$�/�D�"%�t�,�H�&*�m�m�H�i�&H�#�Q���d��A�v� ��#B�!C�h�!N�O�O�(����!�4�B��A�v� ��#A�!B�X�!M�N�N�"�1�%��d�{����J�J�!�!�h�X^�Xm�Xm�nw�Xx�"y�z�'�*	
���
r0c���|j||�\}}}}t|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t
|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t|j|�}|dkr%tt	d�j||����t|�|jjd|�dtj|����y)	Nrr�r�r�z;Port {proto}/{port} is defined in policy, cannot be deletedz$Could not delete port {proto}/{port}rr�)
r�r�r�r�r
r��semanage_port_exists_localrr�r�rMrr�r�s	         r.rXzportRecords.__delete�sI��"&�-�-��e�"<���G�S�$�+�D�G�G�Q�7���V�
��6��Q�R�S�Z�Z�af�mq�Z�r�s�s���Q�C�D�K�K�RW�^b�K�c�d�d�1�$�'�'�1�=���V�
��6��Q�R�S�Z�Z�af�mq�Z�r�s�s���Q�\�]�d�d�kp�w{�d�|�}�}�
$�T�W�W�a�
0��
��6��Q�E�F�M�M�TY�`d�M�e�f�f��q�!��
�
���$�PV�Pe�Pe�fk�Pl�m�nr0c�h�|j�|j||�|j�yr&)r��_portRecords__deleterR)r-r�r�s   r.r�zportRecords.deletes"���
�
���
�
�d�E�"����
r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]Y}t
|�}t|�}t|�}t|�}t|�}	t|�}
t|�}||f||
||	f<�[|S)Nr�Could not list ports)
rr�r�semanage_port_listr�r
r�semanage_context_get_type�semanage_context_get_mlsrrr	r
)r-r�rnr�r�r��ctype�levelr�r
r�r�s            r.r�zportRecords.get_alls������7����@��R���1�$�'�'�:��R���
��6��Q�5�6�7�7��J�J�D�'��-�C�-�c�2�E�,�S�1�E�+�D�1�E�3�E�:�I�'��-�C�)�$�/�D�-2�E�N�E�3��i�(�)���r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]�}t
|�}t|�}t|�}t|�}t|�}	t|�}
||f|j�vrg|||f<|	|
k(r|||fjd|	z��|||fjd|	|
fz���|S)Nrrz%dz%d-%d)rr�rrr�r
rrrrr	r
ryr7)r-r�rnr�r�r�rr�r
r�r�s           r.�get_all_by_typezportRecords.get_all_by_type s�����7����@��R���1�$�'�'�:��R���
��6��Q�5�6�7�7��J�J�D�'��-�C�-�c�2�E�+�D�1�E�3�E�:�I�'��-�C�)�$�/�D��y�!�����5�,.��u�i�(�)��d�{��u�i�(�)�0�0����<��u�i�(�)�0�0��C��;�1F�G���r0c�R�g}|jd�}t|j��D]w}|d|dk(r|dn|d�d|d��}||dr-|jd||d�d||d�d|d�d	|����U|jd||d�d
|d�d	|����y|S)NTrrbr2�-a -t rvz' -p r�r\� -p rx�r-rrnr>r�s     r.r�zportRecords.customized8s��������T�"����
�
��%�A��Q�4�1�Q�4�<�1�Q�4��!��a��d�-C�D��Q�x��{�����a����U�1�X�a�[�RS�TU�RV�X\�]�^�����a����Q�q�T�4�H�I�&��r0c	�P�|j|�}t|�dk(ryt|j��}|r1t	td�d�dtd�d�dtd��d��|D]5}d	|z}|d
||dzz
}||ddD]
}|d|zz
}�t	|��7y)
NrzSELinux Port Typer�r\�Proto�8�Port Numberr�z%-30s %-8s �%srb�, %s)rr|rryr�r
�r-r�r�rnryr�r<rs        r.r�zportRecords.listCs����$�$�Y�/���u�:��?���e�j�j�l�#����q�)<�'=�q��z�1�]�K[�\�]��A��!�#�C��4�%��(�1�+�%�%�C��1�X�a�b�\���v��z�!��"��#�J�r0r&r�r)rUrVrWr�r/r�r�r�r�r�rSr�rr�r�rr�r�rXr0r.r�r�,sS���K��'�@8h�t��(m�T�
�<o�,�
�(�0	�
r0r�c�l�eZdZgZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dd�Zdd
�Zd�Zdd�Zy)�
ibpkeyRecordsNc���tj||�	ttt	j
|j��dg��}td�|j�D��|_	y#YyxYw)N�ibpkey_type��attrsc3�2K�|]}t|����y�wr&�r;��.0r�s  r.�	<genexpr>z)ibpkeyRecords.__init__.<locals>.<genexpr>Zs����%B�k��c�!�f�k���)
r�r/rrr��get_store_policyr�r�resultsr��r-r��qs   r.r/zibpkeyRecords.__init__Vs^��� � ��t�,�	��-��(A�(A�$�*�*�(M�N�Wd�Ve�f�A�%�%B�a�i�i�k�%B�B�D���	����AA2�2A6c��|dk(rttd���|jd�}t|�dk(rt	|dd�x}}nt	|dd�}t	|dd�}|dkDrttd���t|j|||�\}}|dkr%ttd�j||�	���||||fS)
NrzSubnet Prefix is requiredr2rbrr�zInvalid Pkeyz1Could not create a key for {subnet_prefix}/{pkey}��
subnet_prefix�pkey)r�r
r�r|r��semanage_ibpkey_key_creater�r�)r-r;r:�pkeysr�r�r�r>s        r.r�zibpkeyRecords.__genkey^s����B���Q�:�;�<�<��
�
�3����u�:��?��U�1�X�q�)�)�D�3��e�A�h��"�C��u�Q�x��#�D��%�<��Q�~�.�/�/�,�T�W�W�m�S�$�O���Q�
��6��Q�R�S�Z�Z�iv�~B�Z�C�D�
D��=�#�t�,�,r0c���tdk(r|dk(rd}nt|�}|dk(rttd���t	j
|�}||jvrttd�|z��|j||�\}}}}t|j�\}}	|dkr%ttd�j||����t|j|	|�t|	||�t|j�\}}
|dkr%ttd	�j||����t|j|
d
�}|dkr%ttd�j||����t|j|
d�}|dkr%ttd
�j||����t!|j|
|�}|dkr%ttd�j||����tdk(rF|dk7rAt#|j|
|�}|dkr%ttd�j||����t%|j|	|
�}|dkr%ttd�j||����t'|j||	�}|dkr%ttd�j||����t)|
�t+|�t-|	�y)Nrbrr�r��)Type %s is invalid, must be a ibpkey typerz2Could not create ibpkey for {subnet_prefix}/{pkey}r9z3Could not create context for {subnet_prefix}/{pkey}r�z?Could not set user in ibpkey context for {subnet_prefix}/{pkey}r�z?Could not set role in ibpkey context for {subnet_prefix}/{pkey}z?Could not set type in ibpkey context for {subnet_prefix}/{pkey}zECould not set mls fields in ibpkey context for {subnet_prefix}/{pkey}z7Could not set ibpkey context for {subnet_prefix}/{pkey}z+Could not add ibpkey {subnet_prefix}/{pkey})r�r�r�r
r�r�r��_ibpkeyRecords__genkey�semanage_ibpkey_creater�r��!semanage_ibpkey_set_subnet_prefix�semanage_ibpkey_set_ranger�r�r�r�r��semanage_ibpkey_set_con�semanage_ibpkey_modify_localr��semanage_ibpkey_key_free�semanage_ibpkey_free)r-r;r:r?rr>r�r�r�rr�s           r.r@zibpkeyRecords.__addqs���Q���"�}���%�g�.���2�:��Q�1�2�3�3��*�*�4�0���t�'�'�'��Q�J�K�d�R�S�S�(,�
�
�d�M�(J�%��M�3��(����1���Q�
��6��Q�S�T�[�[�jw�C�[�D�E�
E�)�$�'�'�1�m�D�!�!�S�$�/�+�D�G�G�4�	��S�
��6��Q�T�U�\�\�kx�@D�\�E�F�
F�
&�t�w�w��Z�
@��
��6��Q�`�a�h�h�xE�LP�h�Q�R�
R�
&�t�w�w��Z�
@��
��6��Q�`�a�h�h�xE�LP�h�Q�R�
R�
&�t�w�w��T�
:��
��6��Q�`�a�h�h�xE�LP�h�Q�R�
R��a��g��m�)�$�'�'�3��@�B��A�v� ��#j�!k�!r�!r�BO�VZ�!r�"[�\�\�
$�T�W�W�a��
5��
��6��Q�X�Y�`�`�o|�DH�`�I�J�
J�
)�$�'�'�1�a�
8��
��6��Q�L�M�T�T�cp�w{�T�|�}�}��c�"� ��#��Q�r0c��|j�|j||�r:ttd�j	||���|j||||�n|j
||||�|j�y)Nz@ibpkey {subnet_prefix}/{pkey} already defined, modifying insteadr9)r��_ibpkeyRecords__existsr�r
r��_ibpkeyRecords__modify�_ibpkeyRecords__addrR)r-r;r:r?rs     r.r�zibpkeyRecords.add�sp���
�
���=�=��}�-��!�V�W�^�^�mz�BF�^�G�
H��M�M�$�
�w��=��J�J�t�]�G�T�:����
r0c���|j||�\}}}}t|j|�\}}|dkr%tt	d�j||����t
|�|S)Nr�;Could not check if ibpkey {subnet_prefix}/{pkey} is definedr9)r@�semanage_ibpkey_existsr�r�r
�formnatrF�r-r;r:r>r�r�r�r�s        r.rKzibpkeyRecords.__exists�sw��(,�
�
�d�M�(J�%��M�3��-�d�g�g�q�9���V�
��6��Q�\�]�e�e�uB�IM�e�N�O�
O� ��#��
r0c���|dk(r6|dk(r1tdk(rttd���ttd���tj|�}|r%||j
vrttd�|z��|j
||�\}}}}t|j|�\}}	|dkr%ttd�j||����|	s%ttd	�j||����t|j|�\}}
|dkr%ttd
�j||����t|
�}tdk(r%|dk7r t|j|t|��|dk7rt|j||�t|j||
�}|dkr%ttd�j||����t!|�t#|
�y)Nrrbr�r�r?rrMr9�,ibpkey {subnet_prefix}/{pkey} is not definedz-Could not query ibpkey {subnet_prefix}/{pkey}z.Could not modify ibpkey {subnet_prefix}/{pkey})r�r�r
r�r�r�r@rNr�r��semanage_ibpkey_query�semanage_ibpkey_get_conr�r�r�rErFrG)r-r;r:r?rr>r�r�r�r�rr�s            r.rQzibpkeyRecords.__modify�s����b�=�V�r�\���"� ��#?�!@�A�A� ��#4�!5�6�6��,�,�V�4���f�D�$4�$4�4��Q�J�K�f�T�U�U�(,�
�
�d�M�(J�%��M�3��-�d�g�g�q�9���V�
��6��Q�\�]�d�d�tA�HL�d�M�N�
N���Q�M�N�U�U�dq�x|�U�}�~�~�'�����3���Q�
��6��Q�N�O�V�V�er�y}�V�~���%�a�(���a��g��m�$�T�W�W�c�;�w�3G�H��R�<�%�d�g�g�s�F�;�
)�$�'�'�1�a�
8��
��6��Q�O�P�W�W�fs�z~�W��A�
A� ��#��Q�r0c�l�|j�|j||||�|j�yr&)r�rJrR)r-r;r:r?rs     r.rSzibpkeyRecords.modify�s&���
�
���
�
�d�M�7�F�;����
r0c��t|j�\}}|dkrttd���|j	�|D]�}t|j|�\}}t
|�}t|�}|�d|��}|j||�\}}}}|dkrttd�|z��t|j|�}|dkrttd�|z��t|���|j�y)NrzCould not list the ibpkeysr2r)zCould not delete the ibpkey %s)�semanage_ibpkey_list_localr�r�r
r��!semanage_ibpkey_get_subnet_prefix�semanage_ibpkey_get_low�semanage_ibpkey_get_highr@�semanage_ibpkey_del_localrFrR)	r-r�r�ibpkeyr:r�r��pkey_strr>s	         r.r�zibpkeyRecords.deleteall�s���0����9���U�
��6��Q�;�<�=�=��
�
���F�"C�D�G�G�V�"T��R��)�&�1�C�+�F�3�D�"%�t�,�H�,0�M�M�(�M�,R�)�Q�
�s�D��A�v� ��#B�!C�h�!N�O�O�*�4�7�7�A�6�B��A�v� ��#C�!D�x�!O�P�P�$�Q�'��	
���
r0c�p�|j||�\}}}}t|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t
|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t|j|�}|dkr%tt	d�j||����t|�y)NrrMr9rRzEibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deletedz.Could not delete ibpkey {subnet_prefix}/{pkey})	r@rNr�r�r
r��semanage_ibpkey_exists_localr[rFrPs        r.rXzibpkeyRecords.__delete�s^��(,�
�
�d�M�(J�%��M�3��-�d�g�g�q�9���V�
��6��Q�\�]�d�d�tA�HL�d�M�N�
N���Q�M�N�U�U�dq�x|�U�}�~�~�3�D�G�G�Q�?���V�
��6��Q�\�]�d�d�tA�HL�d�M�N�
N���Q�f�g�n�n�~K�RV�n�W�X�
X�
&�t�w�w��
2��
��6��Q�O�P�W�W�fs�z~�W��A�
A� ��#r0c�h�|j�|j||�|j�yr&)r��_ibpkeyRecords__deleterR)r-r;r:s   r.r�zibpkeyRecords.deletes"���
�
���
�
�d�M�*����
r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]b}t
|�}t|�}|dk(r�t|�}t|j|�\}}t|�}	t|�}
||f||	|
|f<�d|S)Nr�Could not list ibpkeys�reserved_ibpkey_t)rWr�r�semanage_ibpkey_listr�r
rTrrrXrYrZ)r-r�rnr�r\r�rrr:r�r�s           r.r�zibpkeyRecords.get_alls������9�$�'�'�B��R���3�D�G�G�<��R���
��6��Q�7�8�9�9��j�j�F�)�&�1�C�-�c�2�E��+�+��,�S�1�E�"C�D�G�G�V�"T��R��)�&�1�C�+�F�3�D�16���E�3��m�,�-�!��r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]�}t
|�}t|�}t|j|�\}}t|�}t|�}	||f|j�vrg|||f<||	k(r|||fjd|z���|||fjd||	fz���|S)Nrrc�0x%xz	0x%x-0x%x)
rWr�rrer�r
rTrrXrYrZryr7)
r-r�rnr�r\r�rr:r�r�s
          r.rzibpkeyRecords.get_all_by_type,s�����9�$�'�'�B��R���3�D�G�G�<��R���
��6��Q�7�8�9�9��j�j�F�)�&�1�C�-�c�2�E�"C�D�G�G�V�"T��R��)�&�1�C�+�F�3�D��}�%�U�Z�Z�\�9�02��u�m�,�-��d�{��u�m�,�-�4�4�V�c�\�B��u�m�,�-�4�4�[�C��;�5N�O�!��r0c�R�g}|jd�}t|j��D]w}|d|dk(r|dn|d�d|d��}||dr-|jd||d�d||d�d|d�d	|����U|jd||d�d
|d�d	|����y|S)NTrrbr2rrvz' -x r�r\z -x rxrs     r.r�zibpkeyRecords.customizedCs��������T�"����
�
��%�A��Q�4�1�Q�4�<�1�Q�4��!��a��d�-C�D��Q�x��{�����a����U�1�X�a�[�RS�TU�RV�X\�]�^�����a����Q�q�T�4�H�I�&��r0c	�P�|j|�}|j�}t|�dk(ry|r1tt	d�d�dt	d�d�dt	d��d��t|�D]5}d	|z}|d
||dzz
}||ddD]
}|d|zz
}�t|��7y)
NrzSELinux IB Pkey Typer�r\�
Subnet_Prefix�18zPkey Numberr��%-30s %-18s r$rbr%�rryr|r�r
rr&s        r.r�zibpkeyRecords.listOs����$�$�Y�/���z�z�|���t�9��>�����*@�(A�1�_�CU�WX�Yf�Wg�h�i����A� �1�$�C��4�%��(�1�+�%�%�C��1�X�a�b�\���v��z�!��"��#�J�r0r&r�r)rUrVrWr�r/r@rKr�rIrJrSr�rar�r�rr�r�rXr0r.r(r(RsO���K��-�&6 �p��$ �L�
�.$�(�
�*�.
�
r0r(c�l�eZdZgZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dd�Zdd
�Zd�Zdd�Zy)�ibendportRecordsNc���tj||�	ttt	j
|j��dg��}td�|j�D��|_	y#YyxYw)N�ibendport_typer+c3�2K�|]}t|����y�wr&r.r/s  r.r1z,ibendportRecords.__init__.<locals>.<genexpr>fs����"?�;�a�3�q�6�;�r2)
r�r/rrr�r3r��setr4r�r5s   r.r/zibendportRecords.__init__bs^��� � ��t�,�	��-��(A�(A�$�*�*�(M�N�Wg�Vh�i�A�"�"?�1�9�9�;�"?�?�D���	��r7c��|dk(rttd���t|�}|dkDs|dkrttd���t|j||�\}}|dkr%ttd�j||����|||fS)	NrzIB device name is required�rbzInvalid Port Numberrz=Could not create a key for ibendport {ibdev_name}/{ibendport}��
ibdev_name�	ibendport)r�r
r��semanage_ibendport_key_creater�r�)r-rxrwr�r�r>s      r.r�zibendportRecords.__genkeyjs�������Q�;�<�=�=��9�~���#�:�����Q�4�5�6�6�/�����T�J���Q�
��6��Q�^�_�f�f�r|�IR�f�S�T�
T��:�t�$�$r0c���tdk(r|dk(rd}nt|�}|dk(rttd���t	j
|�}||jvrttd�|z��|j||�\}}}t|j�\}}|dkr%ttd�j||����t|j||�t||�t|j�\}}	|dkr%ttd	�j||����t|j|	d
�}|dkr%ttd�j||����t|j|	d�}|dkr%ttd
�j||����t!|j|	|�}|dkr%ttd�j||����tdk(rF|dk7rAt#|j|	|�}|dkr%ttd�j||����t%|j||	�}|dkr%ttd�j||����t'|j||�}|dkr%ttd�j||����t)|	�t+|�t-|�y)Nrbrr�r��-Type %s is invalid, must be an ibendport typerz2Could not create ibendport for {ibdev_name}/{port}�rwr�z/Could not create context for {ibendport}/{port}r�z?Could not set user in ibendport context for {ibdev_name}/{port}r�z?Could not set role in ibendport context for {ibdev_name}/{port}z?Could not set type in ibendport context for {ibdev_name}/{port}zECould not set mls fields in ibendport context for {ibdev_name}/{port}z7Could not set ibendport context for {ibdev_name}/{port}z+Could not add ibendport {ibdev_name}/{port})r�r�r�r
r�r�r��_ibendportRecords__genkey�semanage_ibendport_creater�r��!semanage_ibendport_set_ibdev_name�semanage_ibendport_set_portr�r�r�r�r��semanage_ibendport_set_con�semanage_ibendport_modify_localr��semanage_ibendport_key_free�semanage_ibendport_free)
r-rxrwr?rr>r�r�rr�s
          r.r@zibendportRecords.__addxs����Q���"�}���%�g�.���2�:��Q�1�2�3�3��*�*�4�0���t�'�'�'��Q�N�O�RV�V�W�W�#�}�}�Y�
�C���I�t�+�D�G�G�4���Q�
��6��Q�S�T�[�[�gq�x|�[�}�~�~�)�$�'�'�1�j�A�#�A�t�,�+�D�G�G�4�	��S�
��6��Q�P�Q�X�X�dn�uy�X�z�{�{�
&�t�w�w��Z�
@��
��6��Q�`�a�h�h�t~�FJ�h�K�L�
L�
&�t�w�w��Z�
@��
��6��Q�`�a�h�h�t~�FJ�h�K�L�
L�
&�t�w�w��T�
:��
��6��Q�`�a�h�h�t~�FJ�h�K�L�
L��a��g��m�)�$�'�'�3��@�B��A�v� ��#j�!k�!r�!r�I�PT�!r�"U�V�V�
'�����C�
8��
��6��Q�X�Y�`�`�lv�~B�`�C�D�
D�
,�T�W�W�a��
;��
��6��Q�L�M�T�T�`j�qu�T�v�w�w��c�"�#�A�&���"r0c��|j�|j||�r>ttd�j	|t
���|j
||||�n|j||||�|j�y)Nz@ibendport {ibdev_name}/{port} already defined, modifying insteadr|)	r��_ibendportRecords__existsr�r
r�r��_ibendportRecords__modify�_ibendportRecords__addrR)r-rxrwr?rs     r.r�zibendportRecords.add�sl���
�
���=�=��J�/��!�V�W�^�^�jt�{�^�A�
B��M�M�)�Z��$�?��J�J�y�*�g�t�<����
r0c���|j||�\}}}t|j|�\}}|dkr%tt	d�j||����t
|�|S)Nrz;Could not check if ibendport {ibdev_name}/{port} is definedr|)r}�semanage_ibendport_existsr�r�r
r�r��r-rxrwr>r�r�r�s       r.rKzibendportRecords.__exists�sq��#�}�}�Y�
�C���I�t�0����!�<���V�
��6��Q�\�]�d�d�pz�BF�d�G�H�
H�#�A�&��
r0c���|dk(r6|dk(r1tdk(rttd���ttd���tj|�}|r%||j
vrttd�|z��|j
||�\}}}t|j|�\}}|dkr%ttd�j||����|s%ttd	�j||����t|j|�\}}	|dkr%ttd
�j||����t|	�}
tdk(r%|dk7r t|j|
t|��|dk7rt|j|
|�t|j||	�}|dkr%ttd�j||����t!|�t#|	�y)Nrrbr�r�r{r�@Could not check if ibendport {ibdev_name}/{ibendport} is definedrv�1ibendport {ibdev_name}/{ibendport} is not definedz2Could not query ibendport {ibdev_name}/{ibendport}z3Could not modify ibendport {ibdev_name}/{ibendport})r�r�r
r�r�r�r}r�r�r��semanage_ibendport_query�semanage_ibendport_get_conr�r�r�r�r�r�)r-rxrwr?rr>r�r�r�rr�s           r.rQzibendportRecords.__modify�s����b�=�V�r�\���"� ��#?�!@�A�A� ��#4�!5�6�6��,�,�V�4���f�D�$4�$4�4��Q�N�O�RX�X�Y�Y� $�
�
�i�� D���J��0����!�<���V�
��6��Q�a�b�i�i�u�LU�i�V�W�
W���Q�R�S�Z�Z�fp�}F�Z�G�H�
H�*�4�7�7�A�6���Q�
��6��Q�S�T�[�[�gq�~G�[�H�I�
I�(��+���a��g��m�$�T�W�W�c�;�w�3G�H��R�<�%�d�g�g�s�F�;�
,�T�W�W�a��
;��
��6��Q�T�U�\�\�hr�H�\�I�J�
J�#�A�&���"r0c�l�|j�|j||||�|j�yr&)r�r�rR)r-rxrwr?rs     r.rSzibendportRecords.modify�s&���
�
���
�
�i��W�f�=����
r0c�$�t|j�\}}|dkrttd���|j	�|D]�}t|j|�\}}t
|�}|jt|�|�\}}}|dkr%ttd�j||����t|j|�}|dkr%ttd�j||����t|���|j�y)NrzCould not list the ibendportsz.Could not create a key for {ibdev_name}/{port}r|z2Could not delete the ibendport {ibdev_name}/{port})
�semanage_ibendport_list_localr�r�r
r��!semanage_ibendport_get_ibdev_name�semanage_ibendport_get_portr}r;r��semanage_ibendport_del_localr�rR)r-r�rrxrwr�r>s       r.r�zibendportRecords.deleteall�s���3�D�G�G�<���U�
��6��Q�>�?�@�@��
�
���I�@����)�T��R��.�y�9�D�$(�M�M�#�d�)�Z�$H�!�Q�
�D��A�v� ��#S�!T�![�![�gq�x|�![�!}�~�~�-�d�g�g�q�9�B��A�v� ��#W�!X�!_�!_�ku�}A�!_�"B�C�C�'��*��	
���
r0c�n�|j||�\}}}t|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t
|j|�\}}|dkr%tt	d�j||����|s%tt	d�j||����t|j|�}|dkr%tt	d�j||����t|�y)Nrr�rvr�zJibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deletedz3Could not delete ibendport {ibdev_name}/{ibendport})	r}r�r�r�r
r��semanage_ibendport_exists_localr�r�r�s       r.rXzibendportRecords.__deletesh�� $�
�
�i�� D���J��0����!�<���V�
��6��Q�a�b�i�i�u�LU�i�V�W�
W���Q�R�S�Z�Z�fp�}F�Z�G�H�
H�6�t�w�w��B���V�
��6��Q�a�b�i�i�u�LU�i�V�W�
W���Q�k�l�s�s�@J�V_�s�`�a�
a�
)�$�'�'�1�
5��
��6��Q�T�U�\�\�hr�H�\�I�J�
J�#�A�&r0c�h�|j�|j||�|j�yr&)r��_ibendportRecords__deleterR)r-rxrws   r.r�zibendportRecords.deletes"���
�
���
�
�i��,����
r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]V}t
|�}t|�}|dk(r�t|�}t|j|�\}}t|�}	||f||	|f<�X|S)Nr�Could not list ibendports�reserved_ibendport_t)r�r�r�semanage_ibendport_listr�r
r�rrr�r�)
r-r�rnr�rxr�rrrwr�s
          r.r�zibendportRecords.get_alls������<�T�W�W�E��R���6�t�w�w�?��R���
��6��Q�:�;�<�<����I�,�Y�7�C�-�c�2�E��.�.��,�S�1�E�@����)�T��R��.�y�9�D�).���E�4��$�%�$��r0c��i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]p}t
|�}t|�}t|j|�\}}t|�}||f|j�vrg|||f<|||fjd|z��r|S)Nrr�rg)r�r�rr�r�r
r�rr�r�ryr7)	r-r�rnr�rxr�rrwr�s	         r.rz ibendportRecords.get_all_by_type/s������<�T�W�W�E��R���6�t�w�w�?��R���
��6��Q�:�;�<�<����I�,�Y�7�C�-�c�2�E�@����)�T��R��.�y�9�D��z�"�%�*�*�,�6�-/��u�j�)�*��5�*�%�&�-�-�f�t�m�<�$��r0c�$�g}|jd�}t|j��D]`}||dr0|jd||d�d||d�d|d�d|d����;|jd||d�d|d�d|d����b|S)	NTrbrrrvz' -z r\z -z rxrzs    r.r�zibendportRecords.customizedBs��������T�"����
�
��%�A��Q�x��{�����a����U�1�X�a�[�RS�TU�RV�XY�Z[�X\�]�^�����a����Q�q�T�1�Q�4�H�I�	&�
�r0c	�P�|j|�}|j�}t|�dk(ry|r1tt	d�d�dt	d�d�dt	d��d��t|�D]5}d	|z}|d
||dzz
}||ddD]
}|d|zz
}�t|��7y)
NrzSELinux IB End Port Typer�r\zIB Device Namerkr#r�rlr$rbr%rmr&s        r.r�zibendportRecords.listMs����$�$�Y�/���z�z�|���t�9��>�����*D�(E�q�IY�GZ�\]�^k�\l�m�n����A� �1�$�C��4�%��(�1�+�%�%�C��1�X�a�b�\���v��z�!��"��#�J�r0r&r�r)rUrVrWr�r/r}r�r�r�r�rSr�r�r�r�rr�r�rXr0r.roro^sO���K��%�5#�n��$#�L�
�*'�(�
�(�&	�
r0roc�d�eZdZgZdd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dd�Zd
�Zdd�Zy)�nodeRecordsNc���tj||�ddg|_	ttt	j
tjd��dd�|_y#t$rYywxYw)N�ipv4�ipv6�	node_typerr�)	r�r/�protocolr�r�rr�r�r�r�s  r.r/znodeRecords.__init__`sd��� � ��t�,���(��
�	�#�D����x�7I�7I�;�)W�$X�YZ�$[�\c�$d�e�D����	��	�s�AA#�#	A/�.A/c��|}|}d}|dk(rttd���t|�dk(s|ddk(rQtj||z�}t|j�}t|j�}d|jz}	|jj|�}	tj|�}||||fS#ttd���xYw#|dk(rtj}nttd���Y�MxYw)NrzNode Address is requiredrrdzipv%dzUnknown or missing protocolr�)r�r
r|�	ipaddress�
ip_networkr;�network_address�netmask�versionr��indexrr��IPPROTO_IPIP)	r-�addr�maskr��newaddr�newmask�newprotocolr��audit_protocols	         r.�validateznodeRecords.validatehs	���������2�:��Q�9�:�;�;��t�9��>�T�!�W��^��$�$�T�D�[�1�A��!�+�+�,�G��!�)�)�n�G�����*�H�	?��-�-�-�-�h�7�K�
	C�#�2�2�8�<�N����n�<�<��	?��Q�<�=�>�>��	C�
�F�"�!'�!4�!4�� ��#@�!A�B�B��s�B?�$C�?C�,Dc�"�|j|||�\}}}}tdk(r|dk(rd}nt|�}|dk(rtt	d���tj|�}||jvrtt	d�|z��t|j|||�\}}|dkrtt	d�|z��t|j�\}}	|dkrtt	d�|z��t|	|�t|j|	||�}t|j�\}}
|dkrtt	d	�|z��t|j|	||�}|dkrtt	d
�|z��t|j|
d�}|dkrtt	d�|z��t!|j|
d
�}|dkrtt	d�|z��t#|j|
|�}|dkrtt	d�|z��tdk(r8|dk7r3t%|j|
|�}|dkrtt	d�|z��t'|j|	|
�}|dkrtt	d�|z��t)|j||	�}|dkrtt	d�|z��t+|
�t-|�t/|	�|j0j3d|�d|�d|�dd�dd
�d|�d|���y)Nrbrr�zSELinux node type is required�'Type %s is invalid, must be a node typer�Could not create key for %szCould not create addr for %s�Could not create context for %szCould not set mask for %sr�z)Could not set user in addr context for %sr�z)Could not set role in addr context for %sz)Could not set type in addr context for %sz/Could not set mls fields in addr context for %sz!Could not set addr context for %szCould not add addr %szresrc=node op=add laddr=�	 netmask=r�r�re)r�r�r�r�r
r�r�r��semanage_node_key_creater��semanage_node_create�semanage_node_set_proto�semanage_node_set_addrr��semanage_node_set_maskr�r�r�r��semanage_node_set_con�semanage_node_modify_localr��semanage_node_key_free�semanage_node_freer�rM)r-r�r�r�r?r�audit_protor�r>�noder�s           r.r@znodeRecords.__add�s���)-���t�T�5�)I�&��d�E�;��Q���"�}���%�g�.���B�;��Q�>�?�@�@��+�+�E�2����(�(�(��Q�H�I�E�Q�R�R�*�4�7�7�D�$��F���Q�
��6��Q�<�=��D�E�E�)�$�'�'�2�
��T�
��6��Q�=�>��E�F�F���e�,�
#�D�G�G�T�5�$�
?��+�D�G�G�4�	��S�
��6��Q�@�A�D�H�I�I�
#�D�G�G�T�5�$�
?��
��6��Q�:�;�d�B�C�C�
&�t�w�w��Z�
@��
��6��Q�J�K�d�R�S�S�
&�t�w�w��Z�
@��
��6��Q�J�K�d�R�S�S�
&�t�w�w��U�
;��
��6��Q�J�K�d�R�S�S��a��g��m�)�$�'�'�3��@�B��A�v� ��#T�!U�X\�!\�]�]�
"�4�7�7�D�#�
6��
��6��Q�B�C�d�J�K�K�
'�����D�
9��
��6��Q�6�7�$�>�?�?��c�"��q�!��4� ��
�
���gk�mq�s~�AK�MW�Y^�`g�h�	ir0c���|j�|j|||�r-ttd�|z�|j	|||||�n|j|||||�|j
�y)Nz*Addr %s already defined, modifying instead)r��_nodeRecords__existsr�r
�_nodeRecords__modify�_nodeRecords__addrR)r-r�r�r�r?rs      r.r�znodeRecords.add�s_���
�
���=�=��t�U�+��!�@�A�D�H�I��M�M�$��e�W�e�<��J�J�t�T�5�'�5�9����
r0c�$�|j|||�\}}}}t|j|||�\}}|dkrtt	d�|z��t|j|�\}}|dkrtt	d�|z��t
|�|S)Nrr��%Could not check if addr %s is defined)r�r�r�r�r
�semanage_node_existsr��r-r�r�r�r�r�r>r�s        r.rKznodeRecords.__exists�s���)-���t�T�5�)I�&��d�E�;�*�4�7�7�D�$��F���Q�
��6��Q�<�=��D�E�E�+�D�G�G�Q�7���V�
��6��Q�F�G�$�N�O�O��q�!��
r0c��|j|||�\}}}}|dk(r|dk(rttd���tj|�}|r%||j
vrttd�|z��t
|j|||�\}}|dkrttd�|z��t|j|�\}}	|dkrttd�|z��|	sttd�|z��t|j|�\}}
|dkrttd�|z��t|
�}td	k(r%|dk7r t|j|t|��|dk7rt|j||�t|j||
�}|dkrttd
�|z��t!|�t#|
�|j$j'd|�d|�d
|�dd�dd�d|�d|���y)Nrr�r�rr�r��Addr %s is not definedzCould not query addr %srbzCould not modify addr %szresrc=node op=modify laddr=r�r�r�r�rer�)r�r�r
r�r�r�r�r�r��semanage_node_query�semanage_node_get_conr�r�r�r�r�r�r�r�rM)r-r�r�r�r?rr�r�r>r�r�r�s            r.rQznodeRecords.__modify�s���)-���t�T�5�)I�&��d�E�;��b�=�V�r�\��Q�;�<�=�=��,�,�V�4���f�D�$4�$4�4��Q�H�I�F�R�S�S�*�4�7�7�D�$��F���Q�
��6��Q�<�=��D�E�E�+�D�G�G�Q�7���V�
��6��Q�F�G�$�N�O�O���Q�7�8�4�?�@�@�(����!�4�
��T�
��6��Q�8�9�D�@�A�A�#�D�)���a��g��m�$�T�W�W�c�;�w�3G�H��R�<�%�d�g�g�s�F�;�
'�����D�
9��
��6��Q�9�:�T�A�B�B��q�!��4� ��
�
���jn�pt�wB�DN�PZ�\b�dk�l�	mr0c�n�|j�|j|||||�|j�yr&)r�r�rR)r-r�r�r�r?rs      r.rSznodeRecords.modifys(���
�
���
�
�d�D�%��&�9����
r0c��|j|||�\}}}}t|j|||�\}}|dkrtt	d�|z��t|j|�\}}|dkrtt	d�|z��|stt	d�|z��t
|j|�\}}|dkrtt	d�|z��|stt	d�|z��t|j|�}|dkrtt	d�|z��t|�|jjd|�d|�d	|���y)
Nrr�r�r�z/Addr %s is defined in policy, cannot be deletedzCould not delete addr %szresrc=node op=delete laddr=r�r�)r�r�r�r�r
r��semanage_node_exists_local�semanage_node_del_localr�r�rMr�s        r.rXznodeRecords.__deletes8��)-���t�T�5�)I�&��d�E�;�*�4�7�7�D�$��F���Q�
��6��Q�<�=��D�E�E�+�D�G�G�Q�7���V�
��6��Q�F�G�$�N�O�O���Q�7�8�4�?�@�@�1�$�'�'�1�=���V�
��6��Q�F�G�$�N�O�O���Q�P�Q�TX�X�Y�Y�
$�T�W�W�a�
0��
��6��Q�9�:�T�A�B�B��q�!��
�
���UY�[_�al�m�nr0c�j�|j�|j|||�|j�yr&)r��_nodeRecords__deleterR)r-r�r�r�s    r.r�znodeRecords.delete+s$���
�
���
�
�d�D�%�(����
r0c	�b�t|j�\}}|dkrttd���|j	�|D]Y}|jt
|j|�dt|j|�d|jt|���[|j�y)Nrz!Could not deleteall node mappingsrb)�semanage_node_list_localr�r�r
r�r��semanage_node_get_addr�semanage_node_get_maskr��semanage_node_get_protorR)r-r��nlistr�s    r.r�znodeRecords.deleteall0s���.�t�w�w�7���U�
��6��Q�B�C�D�D��
�
���D��M�M�0����$�?��B�DZ�[_�[b�[b�dh�Di�jk�Dl�nr�n{�n{�}T�UY�}Z�o[�
\�����
r0c���i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]�}t
|�}t|j|�}t|j|�}|jt|�}t|�t|�t|�t|�f||d|d|f<��|S)NrzCould not list addrsrb)r�r��ilist�semanage_node_listr�r
r�r�r�r�r��semanage_context_get_user�semanage_context_get_rolerr)	r-r�rnr�r�r�r�r�r�s	         r.r�znodeRecords.get_all:s������7����@��R���1�$�'�'�:��R���
��6��Q�5�6�7�7��J�J�D�'��-�C�)�$�'�'�4�8�D�)�$�'�'�4�8�D��M�M�"9�$�"?�@�E�0I�#�0N�Pi�jm�Pn�qJ�KN�qO�Qi�jm�Qn�0o�E�4��7�D��G�U�+�,���r0c�<�g}|jd�}t|j��D]l}||dr6|jd|d�d|d�d||d�d||d�d	|d
��
��A|jd|d�d|d�d||d�d|d
����n|S)NTrz-a -M rbrr�� -t rvrwrr\rxrzs    r.r�znodeRecords.customizedLs��������T�"����
�
��%�A��Q�x��{����a��d�A�a�D�%�PQ�(�ST�+�W\�]^�W_�`a�Wb�de�fg�dh�i�j����a��d�A�a�D�%��(�1�+�q�QR�t�T�U�	&�
�r0c��|j|�}t|�dk(ryt|j��}|rt	ddz�t
rp|D]j}d}|D]}|dzt
|�z}�t	|dd�d|dd�d|d	d
�d||d�d||d�d||d	�dt||dd
��d���ly|D]=}t	|dd�d|dd�d|d	d
�d||d�d||d�d||d	�d���?y)Nrz%-18s %-18s %-5s %-5s
)z
IP Address�Netmask�Protocol�Contextr�	rkr\rbr�r�rerF)r�r|rryr�r�r;r�)r-r�r�rnryr>�val�fieldss        r.r�znodeRecords.listVs=�����Y�'���u�:��?���e�j�j�l�#����+�.^�^�_�������F���*�s�6�{�2�C� ���1��q��t�Q�q�T�5�QR�8�TU�;�X]�^_�X`�ab�Xc�ej�kl�em�no�ep�r{�}B�CD�}E�FG�}H�JO�sP�Q�R�	����a��d�A�a�D�!�A�$��a��QR��UZ�[\�U]�^_�U`�bg�hi�bj�kl�bm�n�o�r0r&r�r)rUrVrWr�r/r�r�r�r�r�rSr�r�r�r�r�r�rXr0r.r�r�\sP���K�� =�D@i�D��&m�P�
o�6�
��$�pr0r�c�Z�eZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zdd�Zd�Z
dd
�Zy)�interfaceRecordsNc�0�tj||�yr&r�r�s  r.r/zinterfaceRecords.__init__kr�r0c�R�tdk(r|dk(rd}nt|�}|dk(rttd���t	|j
|�\}}|dkrttd�|z��t
|j
�\}}|dkrttd�|z��t|j
||�}t|j
�\}}|dkrttd�|z��t|j
|d	�}|dkrttd
�|z��t|j
|d�}|dkrttd�|z��t|j
||�}|dkrttd
�|z��tdk(r8|dk7r3t|j
||�}|dkrttd�|z��t|j
||�}|dkrttd�|z��t|j
||�}|dkrttd�|z��t|j
||�}|dkrttd�|z��t!|�t#|�t%|�|j&j)d|�dd	�dd�d|�d|��
�y)Nrbrr��SELinux Type is requiredrr�z!Could not create interface for %sr�r�z.Could not set user in interface context for %sr�z.Could not set role in interface context for %sz.Could not set type in interface context for %sz4Could not set mls fields in interface context for %sz&Could not set interface context for %sz$Could not set message context for %szCould not add interface %szresrc=interface op=add netif=r�re)r�r�r�r
�semanage_iface_key_creater��semanage_iface_create�semanage_iface_set_namer�r�r�r�r��semanage_iface_set_ifcon�semanage_iface_set_msgcon�semanage_iface_modify_localr��semanage_iface_key_free�semanage_iface_freer�rM)r-�	interfacer?rr�r>�ifacer�s        r.r@zinterfaceRecords.__addns|���Q���"�}���%�g�.���B�;��Q�9�:�;�;�+�D�G�G�Y�?���Q�
��6��Q�<�=�	�I�J�J�+�D�G�G�4���U�
��6��Q�B�C�i�O�P�P�
$�T�W�W�e�Y�
?��+�D�G�G�4�	��S�
��6��Q�@�A�I�M�N�N�
&�t�w�w��Z�
@��
��6��Q�O�P�S\�\�]�]�
&�t�w�w��Z�
@��
��6��Q�O�P�S\�\�]�]�
&�t�w�w��U�
;��
��6��Q�O�P�S\�\�]�]��a��g��m�)�$�'�'�3��@�B��A�v� ��#Y�!Z�]f�!f�g�g�
%�d�g�g�u�c�
:��
��6��Q�G�H�9�T�U�U�
&�t�w�w��s�
;��
��6��Q�E�F��R�S�S�
(����!�U�
;��
��6��Q�;�<�y�H�I�I��c�"���"��E�"��
�
���Xa�cm�oy�|A�CJ�K�	Lr0c���|j�|j|�r+ttd�|z�|j	|||�n|j|||�|j
�y)Nz/Interface %s already defined, modifying instead)r��_interfaceRecords__existsr�r
�_interfaceRecords__modify�_interfaceRecords__addrR)r-r�r?rs    r.r�zinterfaceRecords.add�sS���
�
���=�=��#��!�E�F��R�S��M�M�)�W�e�4��J�J�y�'�5�1����
r0c���t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��t|�|S)Nrr��*Could not check if interface %s is defined)r�r�r�r
�semanage_iface_existsr��r-r�r�r>r�s     r.rKzinterfaceRecords.__exists�sq��+�D�G�G�Y�?���Q�
��6��Q�<�=�	�I�J�J�,�T�W�W�a�8���V�
��6��Q�K�L�y�X�Y�Y���"��
r0c�@�|dk(r|dk(rttd���t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��|sttd�|z��t|j|�\}}|dkrttd�|z��t
|�}tdk(r%|dk7r t|j|t|��|dk7rt|j||�t|j||�}|dkrttd	�|z��t|�t|�|jjd
|�dd�d
d�d
|�d
|��
�y)Nrr�rr�r�Interface %s is not definedzCould not query interface %srbzCould not modify interface %sz resrc=interface op=modify netif=r�r�rer�)r�r
r�r�r�semanage_iface_query�semanage_iface_get_ifconr�r�r�r�r�r�r�r�rM)	r-r�r?rr�r>r�r�r�s	         r.rQzinterfaceRecords.__modify�s���b�=�V�r�\��Q�;�<�=�=�+�D�G�G�Y�?���Q�
��6��Q�<�=�	�I�J�J�,�T�W�W�a�8���V�
��6��Q�K�L�y�X�Y�Y���Q�<�=�	�I�J�J�*�4�7�7�A�6���U�
��6��Q�=�>��J�K�K�&�u�-���a��g��m�$�T�W�W�c�;�w�3G�H��R�<�%�d�g�g�s�F�;�
(����!�U�
;��
��6��Q�>�?�)�K�L�L���"��E�"��
�
���[d�fp�r|�E�GN�O�	Pr0c�j�|j�|j|||�|j�yr&)r�r�rR)r-r�r?rs    r.rSzinterfaceRecords.modify�s$���
�
���
�
�i��&�1����
r0c�\�t|j|�\}}|dkrttd�|z��t	|j|�\}}|dkrttd�|z��|sttd�|z��t|j|�\}}|dkrttd�|z��|sttd�|z��t
|j|�}|dkrttd�|z��t|�|jjd|z�y)Nrr�rrz4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s)
r�r�r�r
r�semanage_iface_exists_local�semanage_iface_del_localr�r�rMrs     r.rXzinterfaceRecords.__delete�s��+�D�G�G�Y�?���Q�
��6��Q�<�=�	�I�J�J�,�T�W�W�a�8���V�
��6��Q�K�L�y�X�Y�Y���Q�<�=�	�I�J�J�2�4�7�7�A�>���V�
��6��Q�K�L�y�X�Y�Y���Q�U�V�Yb�b�c�c�
%�d�g�g�q�
1��
��6��Q�>�?�)�K�L�L���"��
�
���B�Y�N�Or0c�f�|j�|j|�|j�yr&)r��_interfaceRecords__deleterR)r-r�s  r.r�zinterfaceRecords.delete�s ���
�
���
�
�i� ����
r0c���t|j�\}}|dkrttd���|j	�|D]}|jt
|���|j�y)Nrz(Could not delete all interface  mappings)�semanage_iface_list_localr�r�r
r�r�semanage_iface_get_namerR)r-r�rbr�s    r.r�zinterfaceRecords.deleteall	sZ��/����8���U�
��6��Q�I�J�K�K��
�
���A��M�M�1�!�4�5�����
r0c�Z�i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]C}t
|�}t|�t|�t|�t|�f|t|�<�E|S)NrzCould not list interfaces)rr�r��semanage_iface_listr�r
rr�r�rrr)r-r�rnr�r�r�s      r.r�zinterfaceRecords.get_all	s������8����A��R���2�4�7�7�;��R���
��6��Q�:�;�<�<����I�*�9�5�C�9R�SV�9W�Yr�sv�Yw�zS�TW�zX�Zr�sv�Zw�9x�E�)�)�4�5�$��r0c	��g}|jd�}t|j��D]N}||dr'|jd||d�d||d�d|����2|jd||d�d|����P|S)NTrrr�rvrwr\rxrzs    r.r�zinterfaceRecords.customized	r{r0c��|j|�}t|�dk(ryt|j��}|r$t	td�d�dtd��d��trE|D]?}t	|d�d||d�d||d�d||d	�dt||d
d��d�
��Ay|D],}t	|d�d||d�d||d�d||d	�d���.y)NrzSELinux Interfacer�r\r�r�rerbr�rF)r�r|rryr�r
r�r�r�s      r.r�zinterfaceRecords.list%	s������Y�'���u�:��?���e�j�j�l�#����!�$7�"8�!�I�,�G�H�����a��q��!��e�A�h�q�k�5�QR�8�TU�;�Xa�bg�hi�bj�kl�bm�ot�Xu�v�w�����1�e�A�h�q�k�5��8�A�;��a��QR��T�U�r0r&r�r)rUrVrWr/rr�r�r�rSrr�r�r�r�r�rXr0r.r�r�isD��-�8L�t�
� P�D�
P�2�
�
��
Vr0r�c��eZdZgZdd�Zd�Zd�Zd�Zdd�Zd�Z	dd�Z
dd	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zdd�Zd�Zdd�Zy)�fcontextRecordsNc
�4�tj||�	tttjtj
d��dd�|_|xjtttjtj
d��dd�z
c_i|_i|_	d|_
	ttj�d�}|j�D]U}|j�}t!|�dk(r�"|j#d�r�4|j%�\}}||j|<�W|j'�	ttj*�d�}|j�D]U}|j�}t!|�dk(r�"|j#d�r�4|j%�\}}||j|<�W|j'�y#t$rY��PwxYw#t($rY��wxYw#t($rYywxYw)N�	file_typerr��device_nodeFr��#)r�r/r�r�rr�r�r��equiv�
equiv_dist�	equal_indrirz�selinux_file_context_subs_path�	readlines�stripr|rr�rl�IOError�#selinux_file_context_subs_dist_path)r-r�rqr��target�
substitutes      r.r/zfcontextRecords.__init__9	s���� � ��t�,�	�#�D����x�7I�7I�;�)W�$X�YZ�$[�\c�$d�e�D������T�(�-�-��8J�8J�M�*Z�%[�\]�%^�_f�%g� h�h����
�������	��g�<�<�>��D�B��\�\�^���G�G�I���q�6�Q�;���<�<��$��%&�W�W�Y�"��
�%/��
�
�6�"�$�
�H�H�J�	��g�A�A�C�S�I�B��\�\�^���G�G�I���q�6�Q�;���<�<��$��%&�W�W�Y�"��
�*4�����'�$�
�H�H�J��;�	��	��"�	��	���	��	�s8�BG,�>BG<�BH�,	G9�8G9�<	H�H�	H�Hc���|jr�tj�}d|z}t|d�}|jj�D]&}|j
|�d|j|�d���(|j�	tj|tj|�tj�tj||�d|_tj|�y#Y�7xYw)Nz%s.tmp�wr\r�F)rrzrrirry�writerlr��chmod�stat�ST_MODE�renamer�rR)r-�	subs_file�tmpfilerqr$s     r.rRzfcontextRecords.commit_	s����>�>��>�>�@�I���*�G��g�s�#�B��*�*�/�/�+�����f�d�j�j��.@�A�B�,��H�H�J�
�����"�'�'�)�"4�T�\�\�"B�C�
�I�I�g�y�)�"�D�N����t�$��	
��s�:C3�3C7c
��|j�|dk7r|ddk(rttd�|z��|dk7r|ddk(rttd�|z��||jj	�vr�ttd�|z�||j|<d|_|jjdtjd|d	��d
tjd|d	����|j�y|j|�|j|jfD]:}|D]3}|j|dz�s�ttd�||||fz���<|jjd
tjd|d	��d
tjd|d	����||j|<d|_|j�y)Nrd���z=Target %s is not valid. Target is not allowed to end with '/'zESubstitute %s is not valid. Substitute is not allowed to end with '/'z:Equivalence class for %s already exists, modifying insteadT�resrc=fcontext op=modify-equal �sglobrr\�tglobz4File spec %s conflicts with equivalency rule '%s %s'zresrc=fcontext op=add-equal )r�r�r
rryr�rr�rMr'�audit_encode_nv_stringrRr�rr)r-r$r%�fdictr�s     r.�	add_equalzfcontextRecords.add_equalo	s����
�
���S�=�V�B�Z�3�.��Q�^�_�bh�h�i�i�����B��3�!6��Q�f�g�jt�t�u�u��T�Z�Z�_�_�&�&��!�P�Q�TZ�Z�[�!+�D�J�J�v��!�D�N��J�J�!�!�E�Lh�Lh�ip�rx�z{�L|�D�[�[�\c�eo�qr�s�#t�
u��K�K�M���
�
�f���j�j�$�/�/�2�E����<�<����-�$�Q�']�%^�bh�jk�mr�st�mu�av�%v�w�w��3�
	
�
�
���U�Ea�Ea�bi�kq�st�Eu�w|�xT�xT�U\�^h�jk�xl�m�	n�'��
�
�6��������
r0c
�l�|j�||jj�vrtt	d�|z��||j|<d|_|jjdtjd|d��dtjd|d����|j�y)Nz'Equivalence class for %s does not existTr1r2rr\r3)r�rryr�r
rr�rMr'r4rR)r-r$r%s   r.�modify_equalzfcontextRecords.modify_equal�	s����
�
��������*�*��Q�H�I�F�R�S�S�'��
�
�6������
�
����Hd�Hd�el�nt�vw�Hx�z�{W�{W�X_�ak�mn�{o�p�	q����
r0c��t|j�\}}|dkrttd�|z��|dk(rd}t	|j||�}|dkrttd�|z��t|j|d�}|dkrttd�|z��tdk(r3t|j|d	�}|dkrttd
�|z��|S)Nrr�rr�z)Could not set user in file context for %sr�z)Could not set role in file context for %srbr��/Could not set mls fields in file context for %s)r�r�r�r
r�r�r�r�)r-r$r�r�r�s     r.�	createconzfcontextRecords.createcon�	s���+�D�G�G�4�	��S�
��6��Q�@�A�F�J�K�K��R�<��F�
&�t�w�w��V�
<��
��6��Q�J�K�f�T�U�U�
&�t�w�w��Z�
@��
��6��Q�J�K�f�T�U�U��Q��)�$�'�'�3��=�B��A�v� ��#T�!U�X^�!^�_�_��
r0c	��|dk(s|jd�dk\rttd���|jd�dk7rttd���|j|jfD]U}|D]N}|j|dz�s�t
j||||�}ttd	�|||||fz���Wy)
Nrr�rzInvalid file specificationr\r0z)File specification can not include spacesrdzMFile spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead)�findr�r
rrrro�sub)r-r$r5r�r�s     r.r�zfcontextRecords.validate�	s����R�<�6�;�;�t�,��1��Q�;�<�=�=��;�;�s��r�!��Q�J�K�L�L��j�j�$�/�/�2�E����$�$�Q��W�-����q�%��(�F�3�A�$�Q�'v�%w�|B�DE�GL�MN�GO�QR�{S�&S�T�T��3r0c��|j|�tdk(rt|�}|dk(rtt	d���|dk7r:tj|�}||jvrtt	d�|z��t|j|t|�\}}|dkrtt	d�|z��t|j�\}}|dkrtt	d�|z��t|j||�}|dk7r�|j||�}	t|j|	|�}|dkrtt	d	�|z��tdk(r8|dk7r3t|j|	|�}|dkrtt	d
�|z��t!|j||	�}|dkrtt	d�|z��t#|t|�t%|j||�}|dkrtt	d�|z��|dk7rt'	�t)|�t+|�|sd
}|j,j/dt1j2d|d��dt4|�d|�dd�d|�d|���y)Nrbrr��<<none>>�1Type %s is invalid, must be a file or device typerr�z$Could not create file context for %sz)Could not set type in file context for %sr:�!Could not set file context for %sz!Could not add file context for %sr�zresrc=fcontext op=add r3� ftype=r�rer�)r�r�r�r�r
r�r�r��semanage_fcontext_key_creater��
file_types�semanage_fcontext_create�semanage_fcontext_set_exprr;r�r��semanage_fcontext_set_con�semanage_fcontext_set_type�semanage_fcontext_modify_localr��semanage_fcontext_key_free�semanage_fcontext_freer�rMr'r4�ftype_to_audit)
r-r$r�ftyper?r�r�r>�fcontextr�s
          r.r@zfcontextRecords.__add�	st���
�
�f���Q��!�'�*�G��2�:��Q�9�:�;�;��:���.�.�t�4�D��4�+�+�+� ��#V�!W�Z^�!^�_�_�.�t�w�w��
�5�@Q�R���Q�
��6��Q�<�=��F�G�G�1�$�'�'�:���X�
��6��Q�E�F��O�P�P�
'�����6�
B���:���.�.���0�C�*�4�7�7�C��>�B��A�v� ��#N�!O�RX�!X�Y�Y��!�#�'�R�-�-�d�g�g�s�G�D����6�$�Q�'X�%Y�\b�%b�c�c�*�4�7�7�H�c�B�B��A�v� ��#F�!G�&�!P�Q�Q�"�8�Z��->�?�
+�D�G�G�Q��
A��
��6��Q�B�C�f�L�M�M��:��!�#�&�"�1�%��x�(���F��
�
���Z_�Zv�Zv�w~�AG�IJ�[K�M[�\a�Mb�dj�lv�x|�~E�F�	Gr0c���|j�|j||�r-ttd�|z�|j	|||||�n|j|||||�|j
�y)Nz6File context for %s already defined, modifying instead)r��_fcontextRecords__existsr�r
�_fcontextRecords__modify�_fcontextRecords__addrR)r-r$rrNr?r�s      r.r�zfcontextRecords.add�	s^���
�
���=�=���'��!�L�M�PV�V�W��M�M�&�$��w��?��J�J�v�t�U�G�V�<����
r0c�n�t|j|t|�\}}|dkrtt	d�|z��t|j|�\}}|dkrtt	d�|z��|s5t
|j|�\}}|dkrtt	d�|z��t|�|S)Nrr��1Could not check if file context for %s is defined)rDr�rEr�r
�semanage_fcontext_exists�semanage_fcontext_exists_localrK�r-r$rNr�r>r�s      r.rKzfcontextRecords.__exists�	s���.�t�w�w��
�5�@Q�R���Q�
��6��Q�<�=��F�G�G�/�����;���V�
��6��Q�R�S�V\�\�]�]��9�$�'�'�1�E�L�R���A�v� ��#V�!W�Z`�!`�a�a�"�1�%��
r0c�p�|dk(r|dk(r|dk(rttd���|dvr:tj|�}||jvrttd�|z��|j|�t
|j|t|�\}}|dkrttd�|z��t|j|�\}}|dkrttd�|z��|r	t|j|�\}}	nht|j|�\}}|dkrttd�|z��|sttd	�|z��	t|j|�\}}	|d
k7r�t|	�}
|
�|j|�}
t dk(r%|dk7r t#|j|
t%|��|dk7rt'|j|
|�|dk7rt)|j|
|�t+|j|	|
�}|dkrJttd�|z��t+|j|	d�}|dkrttd�|z��t-|j||	�}|dkrttd
�|z��t/|�t1|	�|sd}|j2j5dt7j8d|d��dt:|�d|�dd�d|�d|���y#t$rttd�|z��wxYw#t$rttd�|z��wxYw)Nrz"Requires setype, serange or seuser)rr@rArr)rUz#Could not query file context for %s�"File context for %s is not definedr@rbrBz$Could not modify file context for %sr�zresrc=fcontext op=modify r3rCr�rer�)r�r
r�r�r�r�rDr�rErV�semanage_fcontext_query�OSErrorrW�semanage_fcontext_query_local�semanage_fcontext_get_conr;r�r�r�r�r�rHrJrKrLr�rMr'r4rM)r-r$rrNr?r�r�r>r�rOr�s           r.rQzfcontextRecords.__modify
s<���b�=�V�r�\�f��l��Q�C�D�E�E��*�*��0�0��8�F��T�-�-�-� ��#V�!W�Z`�!`�a�a��
�
�f��.�t�w�w��
�5�@Q�R���Q�
��6��Q�>�?�&�H�I�I�/�����;���V�
��6��Q�R�S�V\�\�]�]��
T�!8����!�!D���X�:�$�'�'�1�E�L�R���A�v� ��#V�!W�Z`�!`�a�a�� ��#G�!H�6�!Q�R�R�
T�!>�t�w�w��!J���X��Z��+�H�5�C��{��n�n�V�,���!�#�'�R�-�(����#�{�7�7K�L���|�)�$�'�'�3��?���|�)�$�'�'�3��?�*�4�7�7�H�c�B�B��A�v� ��#F�!G�&�!P�Q�Q�*�4�7�7�H�d�C�B��A�v� ��#F�!G�&�!P�Q�Q�
+�D�G�G�Q��
A��
��6��Q�E�F��O�P�P�"�1�%��x�(���F��
�
���]b�]y�]y�{B�DJ�LM�^N�P^�_d�Pe�gm�oy�{A�CJ�K�	L��[�
T� ��#H�!I�F�!R�S�S�
T���
T� ��#H�!I�F�!R�S�S�
T�s�(K0�L�0!L�!L5c�n�|j�|j|||||�|j�yr&)r�rRrR)r-r$rrNr?r�s      r.rSzfcontextRecords.modifyK
s(���
�
���
�
�f�f�e�W�f�=����
r0c	��t|j�\}}|dkrttd���|j	�|D]�}t|�}t
|�}t|�}t|j|t|�\}}|dkrttd�|z��t|j|�}|dkrttd�|z��t|�|jjdtjd|d��dt t"|�����i|_d|_|j)�y)	Nrz Could not list the file contextsr)z$Could not delete the file context %s�resrc=fcontext op=delete r3rCT)�semanage_fcontext_list_localr�r�r
r��semanage_fcontext_get_expr�semanage_fcontext_get_type�semanage_fcontext_get_type_strrDrE�semanage_fcontext_del_localrKr�rMr'r4rM�file_type_str_to_optionrrrR)r-r��flistrOr$rN�	ftype_strr>s        r.r�zfcontextRecords.deleteallP
s3��2�4�7�7�;���U�
��6��Q�A�B�C�C��
�
���H�/��9�F�.�x�8�E�6�u�=�I�2�4�7�7�F�J�y�DY�Z�G�R���A�v� ��#B�!C�f�!L�M�M�,�T�W�W�a�8�B��A�v� ��#I�!J�V�!S�T�T�&�q�)��J�J�!�!�E�Lh�Lh�ip�rx�z{�L|�M�Ne�fo�Np�q�#r�
s����
�������
r0c��||jj�vrV|jj|�d|_|jjdt
jd|d�z�yt|j|t|�\}}|dkrttd�|z��t|j|�\}}|dkrttd�|z��|set|j|�\}}|dkrttd�|z��|rttd�|z��ttd�|z��t|j|�}|dkrttd	�|z��t!|�|jjd
t
jd|d��dt"|���y)NTz!resrc=fcontext op=delete-equal %sr3rr)rUz;File context for %s is defined in policy, cannot be deletedrZz$Could not delete file context for %srarC)rry�poprr�rMr'r4rDr�rEr�r
rWrVrfrKrMrXs      r.rXzfcontextRecords.__deletej
s����T�Z�Z�_�_�&�&��J�J�N�N�6�"�!�D�N��J�J�!�!�"E��Ie�Ie�fm�ou�wx�Iy�"z�{��.�t�w�w��
�5�@Q�R���Q�
��6��Q�>�?�&�H�I�I�5�d�g�g�q�A���V�
��6��Q�R�S�V\�\�]�]��3�D�G�G�Q�?�L�R���A�v� ��#V�!W�Z`�!`�a�a�� ��#`�!a�dj�!j�k�k� ��#G�!H�6�!Q�R�R�
(����!�
4��
��6��Q�E�F��O�P�P�"�1�%��
�
����Hd�Hd�el�nt�vw�Hx�{I�JO�{P�Q�	Rr0c�h�|j�|j||�|j�yr&)r��_fcontextRecords__deleterR)r-r$rNs   r.r�zfcontextRecords.delete�
s"���
�
���
�
�f�e�$����
r0c��|rt|j�\}|_n�t|j�\}|_|dkrt	td���t
|j�\}}|dkrt	td���t|j�\}}|dkrt	td���|xj|z
c_|xj|z
c_i}|jD]g}t|�}t|�}t|�}	t|�}
|
r0t|
�t|
�t|
�t|
�f|||	f<�a|
|||	f<�i|S)NrzCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)rbr�rh�semanage_fcontext_listr�r
�semanage_fcontext_list_homedirsrcrdrer^r�r�rr)r-r�r��
fchomedirs�fclocalrnrO�exprrNrir�s           r.r�zfcontextRecords.get_all�
sY���;�D�G�G�D��R���5�d�g�g�>��R����A�v� ��#A�!B�C�C�>�t�w�w�G��R���A�v� ��#V�!W�X�X�8����A�M�R���A�v� ��#G�!H�I�I��J�J�*�$�J��J�J�'�!�J����
�
�H�-�h�7�D�.�x�8�E�6�u�=�I�+�H�5�C��,E�c�,J�Le�fi�Lj�mF�GJ�mK�Me�fi�Mj�,k��t�Y�'�(�+.��t�Y�'�(�#��r0c���g}|jd�}|j�D]v}||s�	||dr8|jdt|d�d||d�d||d�d|d	�d
�	��I|jdt|d�d||d�d|d	�d
���xt	|j
�rC|j
j�D]&}|jd|j
|�d
|����(|S)NTrz-a -f rbr�r�rvz' 'r�'z 'z-a -e r\)r�ryr7rgr|r)r-r�	fcon_dictr>r$s     r.r�zfcontextRecords.customized�
s�����L�L��&�	����!�A���|��Q�<��?��H�H�>U�VW�XY�VZ�>[�]f�gh�]i�jk�]l�nw�xy�nz�{|�n}�@A�BC�@D�E�F��H�H�6M�a�PQ�d�6S�U^�_`�Ua�bc�Ud�fg�hi�fj�k�l�"��t�z�z�?��*�*�/�/�+�����$�*�*�V�*<�f�E�F�,��r0c���|j|�}t|�dk7�r|r1ttd�d�dtd�d�dtd��d��|r|j	�}nt|j	��}|D]�}||r�trHt|dd�d|d	d�d||d�d
||d	�d
||d�d
t||dd
��d���Vt|dd�d|d	d�d||d�d
||d	�d
||d�d�
���t|dd�d|d	d�d����t|j�rT|sR|rttd��|jj	�D]}t|�d|j|����!t|j�rS|rttd��|jj	�D]}t|�d|j|����!yy)NrzSELinux fcontext�50r\rrkr�r�rbrer�rFz	 <<None>>z,
SELinux Distribution fcontext Equivalence 
z = z%
SELinux Local fcontext Equivalence 
)
r�r|r�r
ryrr�r�rr)r-r�r�rv�fkeysr>r$s       r.r�zfcontextRecords.list�
s����L�L��+�	��y�>�Q����A�.@�,A�1�V�9�a�PY�l�[�\��!���(���y�~�~�/�0�����Q�<�%��A�a�D�!�A�$�	�RS��UV��Yb�cd�Ye�fg�Yh�js�tu�jv�wx�jy�|E�FO�PQ�FR�ST�FU�W\�|]�^�_���1��q��t�Y�q�\�RS�_�V_�`a�Vb�cd�Ve�gp�qr�gs�tu�gv�w�x��A�a�D�!�A�$�?�@���t�������!�L�M�N�"�o�o�2�2�4�F��v�t���v�/F�G�H�5��t�z�z�?���a�A�B�C��*�*�/�/�+���6�4�:�:�f�+=�>�?�,�	r0r&)r�)rrr�r�r)rUrVrWr�r/rRr6r8r;r�rSr�rQrRrSr�rmr�r�r�r�rXr0r.rr5	sg���K�$�L%� �:	��,	T�4G�l��"AL�F�
�4R�B�
�@
�@r0rc�\�eZdZdd�Zd�Zdd�Zd�Zd�Zd�Zd�Z	dd	�Z
d
�Zd�Zd�Z
dd
�Zy)�booleanRecordsNc���tj||�i|_d|jd<d|jd<d|jd<d|jd<d|jd<d|jd<	tj�\}|_tj�\}}|jd	k(s|j|k(rd
|_yd|_y#g|_d}Y�;xYw)Nrb�TRUEr�FALSE�ON�OFF�1�0rTF)	r�r/�dictrz�security_get_boolean_names�current_booleansr�r��modify_local)r-r�r��ptypes    r.r/zbooleanRecords.__init__�
s���� � ��t�,���	���	�	�&����	�	�'����	�	�$����	�	�%����	�	�#����	�	�#��	�(/�(J�(J�(L�%�B��%��5�5�7�I�B��
�:�:���t�z�z�U�2� $�D�� %�D���	�$&�D�!��E�s�93C�C'c���tj|�}t|j|�\}}|dkrt	td�|z��t
|j|�\}}|dkrt	td�|z��|st	td�|z��t|j|�\}}|dkrt	td�|z��|j�|jvr(t||j|j��n>t	td�dj|jj��z��|jrA||jvr3t|j||�}|dkrt	td�|z��t!|j||�}|dkrt	td	�|z��t#|�t%|�y)
Nrr)�(Could not check if boolean %s is defined�Boolean %s is not definedzCould not query file context %sz0You must specify one of the following values: %sz, �(Could not set active value of boolean %szCould not modify boolean %s)rz�selinux_boolean_sub�semanage_bool_key_creater�r�r
�semanage_bool_exists�semanage_bool_query�upperr��semanage_bool_set_valuer#ryr�r��semanage_bool_set_active�semanage_bool_modify_local�semanage_bool_key_free�semanage_bool_free)r-r=�valuer�r>r�rs       r.�__modzbooleanRecords.__mod�
s����*�*�4�0��*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�I�J�T�Q�R�R���Q�:�;�d�B�C�C�%�d�g�g�q�1���Q�
��6��Q�@�A�D�H�I�I��;�;�=�D�I�I�%�#�A�t�y�y�����'?�@��Q�Q�R�UY�U^�U^�_c�_h�_h�_m�_m�_o�Up�p�q�q������)>�)>�!>�)�$�'�'�1�a�8�B��A�v� ��#M�!N�QU�!U�V�V�
'�����A�
6��
��6��Q�<�=��D�E�E��q�!��1�r0c��|j�|r�t|�}|j�jd�D]d}|j	�}t|�dk(r�"	|jd�\}}|j|j	�|j	���f|j�n|j||�|j�y#t$r&t
td�j||����wxYw)Nr�r�=z&Bad format {filename}: Record {record})�filename�record)r�rirjr�r!r|r�r
r��_booleanRecords__modrlrR)r-r=r��use_filerqr�boolnamer�s        r.rSzbooleanRecords.modifys����
�
����d��B��W�W�Y�_�_�T�*���G�G�I���q�6�Q�;��r�$%�G�G�C�L�M�H�c��
�
�8�>�>�+�S�Y�Y�[�9�+�
�H�H�J��J�J�t�U�#����
��"�r�$�Q�'O�%P�%W�%W�ae�no�%W�%p�q�q�r�s� C�/Dc�J�tj|�}t|j|�\}}|dkrt	td�|z��t
|j|�\}}|dkrt	td�|z��|st	td�|z��t|j|�\}}|dkrt	td�|z��|st	td�|z��t|j|�}|dkrt	td�|z��t|�y)Nrr)r�r�z2Boolean %s is defined in policy, cannot be deletedzCould not delete boolean %s)
rzr�r�r�r�r
r��semanage_bool_exists_local�semanage_bool_del_localr�rJs     r.rXzbooleanRecords.__delete+s
���*�*�4�0��*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�+�D�G�G�Q�7���V�
��6��Q�I�J�T�Q�R�R���Q�:�;�d�B�C�C�1�$�'�'�1�=���V�
��6��Q�I�J�T�Q�R�R���Q�S�T�W[�[�\�\�
$�T�W�W�a�
0��
��6��Q�<�=��D�E�E��q�!r0c���|j�|j|�|j�|j�|j|�|j�yr&)r��_booleanRecords__deleterR�_booleanRecords__reset_value�r-r=s  r.r�zbooleanRecords.deleteCsB���
�
���
�
�d�����
�
	
�
�
�����4� ����
r0c��g}t|j�\}|_|dkrtt	d���|j�|jD]/}t
|�}|j|�|j|��1|j�|j�|D]}|j|��|j�y�NrzCould not list booleans)�semanage_bool_list_localr��blistr�r
r��semanage_bool_get_namer7r�rRr�)r-�deletedr��booleanr=s     r.r�zbooleanRecords.deleteallOs�����3�D�G�G�<���T�Z�
��6��Q�8�9�:�:��
�
���z�z�G�)�'�2�D��N�N�4� ��M�M�$��"�
	
���
�
	
�
�
���G����w�'��	
���
r0c��tj|�}t|j|�\}}|dkrt	td�|z��t
|j|�\}}|dkrt	td�|z��t|t|��t|j||�}|dkrt	td�|z��t|�t|�y)Nrr)zCould not query boolean %sr�)rzr�r�r�r�r
r�r��semanage_bool_get_valuer�r�r�)r-r=r�r>rs     r.�
__reset_valuezbooleanRecords.__reset_valuels����*�*�4�0��*�4�7�7�D�9���Q�
��6��Q�>�?�$�F�G�G�%�d�g�g�q�1���Q�
��6��Q�;�<�t�C�D�D���#:�1�#=�>�
%�d�g�g�q�!�
4��
��6��Q�I�J�T�Q�R�R��q�!��1�r0c�F�i}|rt|j�\}|_nt|j�\}|_|dkrt	td���|jD]�}g}t
|�}|jt|��|jrW||jvrI|jtj|��|jtj|��n(|j|d�|j|d�|||<��|Sr�)r�r�r��semanage_bool_listr�r
r�r7r�r�r�rz�security_get_boolean_pending�security_get_boolean_active)r-r�rnr�r�r�r=s       r.r�zbooleanRecords.get_all�s������7����@��R���1�$�'�'�:��R���
��6��Q�8�9�:�:��z�z�G��E�)�'�2�D��L�L�0��9�:�� � �T�T�-B�-B�%B����W�A�A�$�G�H����W�@�@��F�G����U�1�X�&����U�1�X�&��E�$�K�"��r0c�V�tj|�}tj|�Sr&)rzr�r��boolean_descr�s  r.�get_desczbooleanRecords.get_desc�s#���*�*�4�0���$�$�T�*�*r0c�V�tj|�}tj|�Sr&)rzr�r��boolean_categoryr�s  r.�get_categoryzbooleanRecords.get_category�s#���*�*�4�0���(�(��.�.r0c��g}|jd�}t|j��D]%}||s�	|jd||d�d|����'|S)NTz-m -r�r\rxrzs    r.r�zbooleanRecords.customized�sQ�������T�"����
�
��%�A��Q�x�����a����Q�7�8�&��r0c�D�td�td�f}|rL|j|�}t|j��D]}||s�	t	|�d||d���� y|j|�}t|�dk(ry|r<t	td�d�dtd	��d
td��dtd��d
��t|j��D]B}||s�	t	|d�d|||dd�d|||dd�d|j
|�����Dy)Nrrr�r�rzSELinux booleanr�r\�Statez  �Default�Descriptionr�z (r�r4z>5z)  )r
r�rryr�r|r�)r-r�r�r��on_offrnr>s       r.r�zbooleanRecords.list�s����E�(�A�d�G�$����L�L��+�E��E�J�J�L�)����8��Q��a����4�5�*�
����Y�'���u�:��?�����+<�)=�q��z�1�Y�<�YZ�[h�Yi�j�k���
�
��%�A��Q�x���6�%��(�1�+�3F��u�UV�x�XY�{�H[�]a�]j�]j�kl�]m�n�o�&r0r&)NFr�)TFF)rUrVrWr/r�rSr�r�r�r�r�r�r�r�r�rXr0r.r{r{�
s?��&�,�>�("�0
��:�(�.+�/��pr0r{)rb)>r3r1rzr�ror9r*rrJ�PROGNAMEr��setools.policyrepr�setools.typequeryrr��gettext�kwargs�version_info�translationr�r
�builtinsr;�__dict__�ImportError�__builtin__rrcrE�SEMANAGE_FCONTEXT_ALL�SEMANAGE_FCONTEXT_REG�SEMANAGE_FCONTEXT_DIR�SEMANAGE_FCONTEXT_CHAR�SEMANAGE_FCONTEXT_BLOCK�SEMANAGE_FCONTEXT_SOCK�SEMANAGE_FCONTEXT_LINK�SEMANAGE_FCONTEXT_PIPErgrMr'�audit_closer(r$r\rfrwr�r�r�r�rrr%r.r�r(ror�r�rr{rXr0r.�<module>r�s8��.�
��	�	�
��
�����+�'��,��
�F�
���$�� ��y������H�	#�1�	#��	#�"�	#�A�	
�	�	�A��
�
�&�
�2��/�
�;��'�
�3��2�
�>��(�
�4��'�
�3��(�
�4��/�
�;��'�
�3��)�
�4��!7�
���(�
�3��*�
�4��4�
�>��)�
�3��)�
�4��-�
�8��(�
�3��)�
�4��(�
�3��4�
�?��(�
�3��)�
�4��1�
�<��(+�+.�(+�/2�+.�%(�,/�),�.�������� ���!��K<���E���&�e�&�&�(�)�#&�#&�R
�
�+��"�$e�e�Ph&�O�h&�V
�_�
�@��@�FF8�?�F8�RM5�_�M5�`d�/�d�L	J�O�J�X|��|�|Jp�/�Jp�ZIV��IV�Xh@�o�h@�V
Wp�_�Wp��aU,�,��!$����#����,��$+����S�!�,���x	���"<�!<�!<�"<�sA�?G%�/H �%H�(G<�;H�<H�H�H�H� H4�3H4