403Webshell
Server IP : 3.96.16.70  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux ip-172-31-26-103.ca-central-1.compute.internal 6.1.163-186.299.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Feb 24 16:35:42 UTC 2026 x86_64
User : ec2-user ( 1000)
PHP Version : 8.4.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/lib/python3.9/site-packages/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.9/site-packages/__pycache__/seobject.cpython-39.pyc
a

���c@��@sJddlZddlZddlZddlZddlZddlZddlZddlZddlTdZ	ddl
Z
ddlmZddl
mZddlZzFddlZiZejdkr�ded<eje	fd	d
ie�ddi��ZejZWnHzddlZeejd<Wn$ey�ddlZeejd<Yn0Yn0ddlZiZeed
<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'z(ddl(Z(e(�)e(�*��Gd.d/�d/�Z+Wn&e,ef�yLGd0d/�d/�Z+Yn0Gd1d2�d2�Z-d3d4�Z.dTd6d7�Z/dUd8d9�Z0Gd:d;�d;�Z1Gd<d=�d=e1�Z2Gd>d?�d?e1�Z3Gd@dA�dAe1�Z4GdBdC�dCe1�Z5GdDdE�dEe1�Z6GdFdG�dGe1�Z7GdHdI�dIe1�Z8GdJdK�dKe1�Z9GdLdM�dMe1�Z:GdNdO�dOe1�Z;GdPdQ�dQe1�Z<GdRdS�dSe1�Z=dS)V�N)�*zselinux-python)�
SELinuxPolicy)�	TypeQuery)�T�unicodeZ	localedirz/usr/share/localeZfallback�_��	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	rr
rrrrr�any�block�char�dir�file�symlink�pipe)	rr
rrrrrrrc@s8eZdZdd�Zd
dd�Zddd�Zdd	�Zd
d�ZdS)�loggercCst��|_g|_g|_dS�N)�audit�
audit_open�audit_fd�log_list�log_change_list��self�r)�,/usr/lib/python3.9/site-packages/seobject.py�__init__ns
�logger.__init__rc	
Cs�d}	||kr||	d7}d}	||kr4||	d7}d}	||krL||	d7}d}	|j�|jtjtjdt|�|d||||||dddg�dS)N�-�sename�,�role�rangerr)r%�appendr$r"ZAUDIT_ROLE_ASSIGN�sys�argv�str)
r(�msg�namer.�serole�serange�	oldsename�	oldserole�
oldserange�sepr)r)r*�logss�
logger.logc		Cs<|j�|jtjtjdt|�|d||||||dddg�dS)Nrr)r%r2r$r"ZAUDIT_ROLE_REMOVEr3r4r5�	r(r6r7r.r8r9r:r;r<r)r)r*�
log_remove�s�logger.log_removec	Cs&|j�|jtjt|�ddddg�dS)N�semanager)r&r2r$r"ZAUDIT_USER_MAC_CONFIG_CHANGEr5�r(r6r)r)r*�
log_change�s�logger.log_changecCsH|jD]}tj||g�q|jD]}tj||g�q"g|_g|_dSr!)r%r"Zaudit_log_semanage_messager&Zaudit_log_user_comm_message)r(�successrr)r)r*�commit�s

�
logger.commitN)rrrrrrr)rrrrrrr��__name__�
__module__�__qualname__r+r>rArErHr)r)r)r*r ls


r c@s8eZdZdd�Zd
dd�Zddd�Zdd	�Zd
d�ZdS)r cCs
g|_dSr!)r%r'r)r)r*r+�sr,rc	
Cs�d||f}	|dkr |	d|7}	|dkr4|	d|7}	|dkrH|	d|7}	|dkr\|	d|7}	|dkrx|durx|	d|7}	|dkr�|dur�|	d|7}	|j�|	�dS)	Nz %s name=%srz sename=z oldsename=z role=z
 old_role=z
 MLSRange=z old_MLSRange=�r%r2)
r(r6r7r.r8r9r:r;r<�messager)r)r*r>�sr?c		
Cs|�||||||||�dSr!)r>r@r)r)r*rA�srBcCs|j�d|�dS)Nz %srNrDr)r)r*rE�srFcCs4|dkrd}nd}|jD]}t�tj||�qdS)N�zSuccessful: zFailed: )r%�syslogZLOG_INFO)r(rGrOrr)r)r*rH�s

rIN)rrrrrrr)rrrrrrrrJr)r)r)r*r �s


c@s0eZdZddd�Zddd�Zdd�Zdd	�Zd
S)
�
nullloggerrc		CsdSr!r)r@r)r)r*r>�sznulllogger.logc		CsdSr!r)r@r)r)r*rA�sznulllogger.log_removecCsdSr!r)rDr)r)r*rE�sznulllogger.log_changecCsdSr!r))r(rGr)r)r*rH�sznulllogger.commitN)rrrrrrr)rrrrrrr)rKrLrMr>rArErHr)r)r)r*rR�s

rRcCsXd}d}|d|d}|d|d}|d|dd|d}t�d	|d
|�S)Nzs[0-9]*zc[0-9]*z(\.z)?z(\,z)*z(-z(:�^�$)�re�search)�rawZsensitivity�categoryZ	cat_rangeZ
categoriesZregr)r)r*�validate_level�srYrPcCs`d}|dkrd||f}n|}t�|�\}}|dkr8|S|rL|t|�d�}|dkrX|S|SdS�Nza:b:c:rP�%s%srr)�selinuxZselinux_raw_to_trans_context�len)rW�prepend�filler�context�rc�transr)r)r*�	translate�srccCs`d}|dkrd||f}n|}t�|�\}}|dkr8|S|rL|t|�d�}|dkrX|S|SdSrZ)r\Zselinux_trans_to_raw_contextr])rbr^r_r`rarWr)r)r*�untranslate�srdc@sfeZdZdZdZdZdZddd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�ZdS)�semanageRecordsFNcCs�|rt|�tkr||_n||_t|dd�|_|js@t|dd�|_|�|j�|_t�	�\}}|jdksn|j|krxt
�|_n,t�
|j�t�dt��|jf�t�|_dS)N�noreloadF�storerr[)�typer5rg�args�getattrrf�
get_handle�shr\�selinux_getpolicytyper �mylog�sepolicyZload_store_policyZselinux_set_policy_rootZselinux_pathrR)r(riraZ
localstorer)r)r*r+�s
zsemanageRecords.__init__cCs||_dSr!)rf)r(�loadr)r)r*�
set_reloadszsemanageRecords.set_reloadcCs�tjrtjSt�}|s"ttd���tjsB|dkrBt||t�|t_t	|�s^t
|�ttd���t|�}|tkr�t
|�ttd���t
|�}|dkr�t
|�ttd���t|�atdkr�t
|�ttd���|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)re�handleZsemanage_handle_create�
ValueErrorr�transactionZsemanage_select_storeZSEMANAGE_CON_DIRECTrgZsemanage_is_managedZsemanage_handle_destroyZsemanage_access_checkZSEMANAGE_CAN_READZsemanage_connectZsemanage_mls_enabled�is_mls_enabled)r(rgrrrar)r)r*rks2zsemanageRecords.get_handlecCsttd���dS�NzNot yet implemented�rsrr'r)r)r*�	deleteall3szsemanageRecords.deleteallcCs$tjrttd���|��dt_dS)Nz(Semanage transaction already in progressT)rertrsr�beginr'r)r)r*�start6szsemanageRecords.startcCs,tjr
dSt|j�}|dkr(ttd���dS)Nrz$Could not start semanage transaction)rertZsemanage_begin_transactionrlrsr�r(rar)r)r*ry<s

zsemanageRecords.begincCsttd���dSrvrwr'r)r)r*�
customizedCszsemanageRecords.customizedcCsVtjr
dS|jrt|jd�t|j�}|dkrF|j�d�tt	d���|j�d�dS)Nrz%Could not commit semanage transactionrP)
rertrfZsemanage_set_reloadrlZsemanage_commitrnrHrsrr{r)r)r*rHFs
zsemanageRecords.commitcCs$tjsttd���dt_|��dS)Nz$Semanage transaction not in progressF)rertrsrrHr'r)r)r*�finishRszsemanageRecords.finish)N)rKrLrMrtrrrgrir+rqrkrxrzryr|rHr}r)r)r)r*re�s
$rec@sPeZdZddd�Zdd�Zdd�Zdd
d�Zdd
�Zdd�Zdd�Z	dd�Z
dS)�
moduleRecordsNcCst�||�dSr!�rer+�r(rir)r)r*r+[szmoduleRecords.__init__cCsg}t|j�\}}}|dkr(ttd���t|�D]�}t||�}t|j|�\}}|dkrbttd���t|j|�\}}|dkr�ttd���t|j|�\}}	|dkr�ttd���t	|j|�\}}
|dkr�ttd���|�
|||	|
f�q0|jdd�d	d
�|jdd�d�|S)
Nr�Could not list SELinux moduleszCould not get module namezCould not get module enabledzCould not get module priorityzCould not get module lang_extcSs|dS)Nrr)��tr)r)r*�<lambda>z�z'moduleRecords.get_all.<locals>.<lambda>T)�key�reversecSs|dS�Nrr)r�r)r)r*r�{r�)r�)Zsemanage_module_list_allrlrsrr1�semanage_module_list_nthZsemanage_module_info_get_nameZ semanage_module_info_get_enabledZ!semanage_module_info_get_priorityZ!semanage_module_info_get_lang_extr2�sort)r(rra�mlist�number�i�modr7Zenabled�priorityZlang_extr)r)r*�get_all^s,
zmoduleRecords.get_allcCs0|��}t|�dkrgSdd�dd�|D�D�S)NrcSsg|]}d|d�qS)z-d %srr)��.0�xr)r)r*�
<listcomp>�r�z,moduleRecords.customized.<locals>.<listcomp>cSsg|]}|ddkr|�qS�rPrr)�r�r�r)r)r*r��r�)r�r])r(�allr)r)r*r|~szmoduleRecords.customizedrPrcCs�|��}t|�dkrdS|r:tdtd�td�td�f�|D]D}|ddkrXtd�}n
|r^q>d}td	|d|d
|d|f�q>dS)Nrz
%-25s %-9s %s
zModule NameZPriorityZLanguagerPZDisabledrz%-25s %-9s %-5s %s�r)r�r]�printr)r(�heading�	locallistr�r�Zdisabledr)r)r*�list�s
zmoduleRecords.listcCs`tj�|�sttd�|��t|j|�}|dkr@ttd�|��t|j|�}|dkr\|��dS)NzModule does not exist: %s r�3Invalid priority %d (needs to be between 1 and 999))	�os�path�existsrsr�semanage_set_default_priorityrlZsemanage_module_install_filerH)r(rr�rar)r)r*�add�szmoduleRecords.addcCs�|��D]�}t|j�\}}|dkr.ttd���t|j||�}|dkrPttd���t|j||�}|dkr|r|ttd�|��qttd�|��q|��dS)NrzCould not create module keyzCould not set module key namezCould not enable module %szCould not disable module %s)�splitZsemanage_module_key_createrlrsrZsemanage_module_key_set_nameZsemanage_module_set_enabledrH)r(�moduleZenable�mrar�r)r)r*�set_enabled�szmoduleRecords.set_enabledcCsjt|j|�}|dkr$ttd�|��|��D]0}t|j|�}|dkr,|dkr,ttd�|��q,|��dS)Nrr����z*Could not remove module %s (remove failed))r�rlrsrr��semanage_module_removerH)r(r�r�rar�r)r)r*�delete�szmoduleRecords.deletecCs6dd�dd�|��D�D�}|D]}|�|d�q dS)NcSsg|]}|d�qS)rr)r�r)r)r*r��r�z+moduleRecords.deleteall.<locals>.<listcomp>cSsg|]}|ddkr|�qSr�r)r�r)r)r*r��r�T)r�r�)r(rr�r)r)r*rx�szmoduleRecords.deleteall)N)rPr)rKrLrMr+r�r|r�r�r�r�rxr)r)r)r*r~Ys
 
r~c@seZdZddd�Zdd�ZdS)�dontauditClassNcCst�||�dSr!rr�r)r)r*r+�szdontauditClass.__init__cCs8|dvrttd���|��t|j|dk�|��dS)N)�on�offz'dontaudit requires either 'on' or 'off'r�)rsrryZsemanage_set_disable_dontauditrlrH)r(Z	dontauditr)r)r*�toggle�s
zdontauditClass.toggle)N)rKrLrMr+r�r)r)r)r*r��s
r�c@sHeZdZddd�Zdd�Zdd�Zdd
d�Zdd
�Zdd�Zdd�Z	dS)�permissiveRecordsNcCst�||�dSr!rr�r)r)r*r+�szpermissiveRecords.__init__cCsng}t|j�\}}}|dkr(ttd���t|�D]8}t||�}t|�}|r0|�d�r0|�|�	d�d�q0|S)Nrr�Zpermissive_rP)
Zsemanage_module_listrlrsrr1r�Zsemanage_module_get_name�
startswithr2r�)r(rrar�r�r�r�r7r)r)r*r��s
zpermissiveRecords.get_allcCsdd�t|���D�S)NcSsg|]}d|�qS)z-a %sr)r�r)r)r*r��r�z0permissiveRecords.customized.<locals>.<listcomp>)�sortedr�r'r)r)r*r|�szpermissiveRecords.customizedrPrcCs�dd�dd�t�tj�D�D�}t|�dkr0dS|rDtdtd��|��}|D]}||vrPt|�qPt|�dkrvdS|r�tdtd��|D]}t|�q�dS)NcSsg|]}|d�qS)r7r))r��yr)r)r*r��r�z*permissiveRecords.list.<locals>.<listcomp>cSsg|]}|dr|�qS)Z
permissiver)r�r)r)r*r��r�rz
%-25s
zBuiltin Permissive TypeszCustomized Permissive Types)ro�infoZTYPEr]r�rr�)r(r�r�r�r|r�r)r)r*r��s 
zpermissiveRecords.listcCs�zddlm}Wnty.ttd���Yn0d|}d|}t|j|t|�|d�}|dkrf|��|dkr~ttd�|��dS)Nrz�The sepolgen python module is required to setup permissive domains.
In some distributions it is included in the policycoreutils-devel package.
# yum install policycoreutils-devel
Or similar for your distro.�
permissive_%sz(typepermissive %s)Zcilz?Could not set permissive domain %s (module installation failed))	Zsepolgen.moduler��ImportErrorrsrZsemanage_module_installrlr]rH)r(rhr�r7Zmodtxtrar)r)r*r��szpermissiveRecords.addcCsB|��D],}t|jd|�}|dkrttd�|��q|��dS)Nr�rz5Could not remove permissive domain %s (remove failed))r�r�rlrsrrH)r(r7�nrar)r)r*r�
s
zpermissiveRecords.deletecCs,|��}t|�dkr(d�|�}|�|�dS)Nr� )r�r]�joinr�)r(rr�r)r)r*rxs
zpermissiveRecords.deleteall)N)rPr)
rKrLrMr+r�r|r�r�r�rxr)r)r)r*r��s


r�c@sveZdZddd�Zdd�Zdd�Zdd	d
�Zddd�Zd
d�Zdd�Z	dd�Z
dd�Zd dd�Zdd�Z
d!dd�ZdS)"�loginRecordsNcCs(t�||�d|_d|_d|_d|_dSr!)rer+r:r<r.r9r�r)r)r*r+s
zloginRecords.__init__c
Cs:t�|�\}|_|_|dkr d}t|j�}|�|j�\}\}}|�|�\}\}}	tdkrn|dkrjt|�}n|}t	|j
|�\}}
|dkr�ttd�|��t
|j
|
�\}}|dkr�ttd�|��|r�ttd�|��|ddk�rzt�|dd��Wn$ttd	�|dd���Yn0n,zt�|�Wnttd
�|��Yn0t|j
�\}}|dk�rrttd�|��t|j
||�}|dk�r�ttd�|��tdk�r�|dk�r�t|j
||�}|dk�r�ttd
�|��t|j
||�}|dk�r�ttd�|��t|j
|
|�}|dk�r&ttd�|��t|
�t|�dS)NrZuser_urPr�Could not create a key for %s�2Could not check if login mapping for %s is definedz'Login mapping for %s is already defined�%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)r\�getseuserbynamer:r<�seluserRecordsri�getrurd�semanage_seuser_key_createrlrsr�semanage_seuser_exists�grpZgetgrnam�pwd�getpwnamZsemanage_seuser_createZsemanage_seuser_set_name�semanage_seuser_set_mlsrange�semanage_seuser_set_sename�semanage_seuser_modify_local�semanage_seuser_key_free�semanage_seuser_free�
r(r7r.r9�rec�userrecr1rar;r8�kr��ur)r)r*�__add"sZ

 




zloginRecords.__addc
CsPz"|��|�|||�|��Wn(tyJ}z|�WYd}~n
d}~00dSr!)ry�_loginRecords__addrHrs�r(r7r.r9�errorr)r)r*r�]szloginRecords.addrc
Cs�t�|�\}|_|_|dkr0|dkr0ttd���t|j�}|�|j�\}\}}|dkrj|�|�\}\}}	n|}	|dkr~||_	n||_	t
|j|�\}}
|dkr�ttd�|��t|j|
�\}}|dkr�ttd�|��|s�ttd�|��t
|j|
�\}}|dk�rttd�|��t|�|_t|�|_tdk�rL|dk�rLt|j|t|��|dk�rlt|j||�||_n|j|_t|j|
|�}|dk�r�ttd	�|��t|
�t|�dS)
NrzRequires seuser or serangerr�r��#Login mapping for %s is not definedzCould not query seuser for %srPz%Could not modify login mapping for %s)r\r�r:r<rsrr�rir�r9r�rlr�Zsemanage_seuser_query�semanage_seuser_get_mlsrange�semanage_seuser_get_senamerur�rdr�r.r�r�r�r�r)r)r*�__modifyesF





zloginRecords.__modifyc
CsPz"|��|�|||�|��Wn(tyJ}z|�WYd}~n
d}~00dSr!)ry�_loginRecords__modifyrHrsr�r)r)r*�modify�szloginRecords.modifyc
Cs*t�|�\}|_|_t|j�}|�|j�\}\}}t|j|�\}}|dkrZt	t
d�|��t|j|�\}}|dkr�t	t
d�|��|s�t	t
d�|��t|j|�\}}|dkr�t	t
d�|��|s�t	t
d�|��t
|j|�}|dkr�t	t
d�|��t|�t�d�\}|_|_|�|j�\}\}}	dS)Nrr�r�r�z<Login mapping for %s is defined in policy, cannot be deletedz%Could not delete login mapping for %sZ__default__)r\r�r:r<r�rir�r�rlrsrr�Zsemanage_seuser_exists_localZsemanage_seuser_del_localr�r.r9)
r(r7r�r�r1rar;r�r�r8r)r)r*�__delete�s,
zloginRecords.__deletec
CsLz|��|�|�|��Wn(tyF}z|�WYd}~n
d}~00dSr!)ry�_loginRecords__deleterHrs�r(r7r�r)r)r*r��s
zloginRecords.deletec
Cs|t|j�\}}|dkr"ttd���z,|��|D]}|�t|��q0|��Wn(tyv}z|�WYd}~n
d}~00dS�Nr�Could not list login mappings)�semanage_seuser_list_localrlrsrryr��semanage_seuser_get_namerH�r(ra�ulistr�r�r)r)r*rx�szloginRecords.deleteallc
Cs�i}t��d|_t�|j�D]z\}}}||jkr|D]`}zHt|d|�}|�����d�}|�	�|d|d|df||<Wq6t
y�Yq60q6q|S)Nz/logins�/�:rPr�r)r\Zselinux_policy_root�logins_pathr��walk�open�read�rstripr��close�
IndexError)r(�ddictr��dirs�filesr7�fdr�r)r)r*�get_all_logins�s

zloginRecords.get_all_loginsrcCsli}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]"}t|�}t|�t|�df||<qD|S)Nrr�r)	r�rlr�Zsemanage_seuser_listrsrr�r�r�)r(r�r�rar�r7r)r)r*r��s
zloginRecords.get_allcCspg}|�d�}t|���D]P}||drP|�d||d||d|f�q|�d||d|f�q|S)NTrPz-a -s %s -r '%s' %srz-a -s %s %s�r�r��keysr2�r(rr�r�r)r)r*r|�s
&zloginRecords.customizedrPc	Cs@|�|�}|��}t|���}t|���}t|�dkrFt|�dkrFdStdkr�|rvtdtd�td�td�td�f�|D]0}||}td||dt|d�|d	f�qzt|�r�td
|j	�|D]0}||}td||dt|d�|d	f�q�nB|�rtdtd�td�f�|D]}td|||df��qdS)
NrrPz
%-20s %-20s %-20s %s
z
Login Name�SELinux Userz
MLS/MCS RangeZServicez%-20s %-20s %-20s %sr�z
Local customization in %sz
%-25s %-25s
z%-25s %-25s)
r�r�r�r�r]rur�rrcr�)	r(r�r�r�ZldictZlkeysr�r�r�r)r)r*r��s*
$&(zloginRecords.list)N)rr)rr)r)rPr)rKrLrMr+r�r�r�r�r�r�rxr�r�r|r�r)r)r)r*r�s
;
2
	


r�c@s�eZdZddd�Zdd�Zdd�Zdd	�Zgd
d
d
fdd�Zgd
d
d
fd
d�Zdd�Z	dd�Z
dd�Zddd�Zdd�Z
ddd�ZdS) r�NcCst�||�dSr!rr�r)r)r*r+szseluserRecords.__init__cCs�t|j|�\}}|dkr(ttd�|��t|j|�\}}|dkrPttd�|��t|j|�\}}|dkrxttd�|��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_createrlrsr�semanage_user_exists�semanage_user_query�semanage_user_get_mlsrange�semanage_user_get_roles�semanage_user_key_free�semanage_user_free)r(r7rar�r�r�r9r8r)r)r*r�szseluserRecords.getcCs@tdkr4|dkrd}nt|�}|dkr,d}nt|�}t|�dkrPttd�|��t|j|�\}}|dkrxttd�|��t|j|�\}}|dkr�ttd�|��|r�ttd�|��t|j�\}}	|dkr�ttd	�|��t	|j|	|�}|dk�rttd
�|��|D]2}
t
|j|	|
�}|dk�rttd�|
|f���qtdk�r�t|j|	|�}|dk�rlttd�|��t|j|	|�}|dk�r�ttd
�|��t
|j|	|�}|dk�r�ttd�|
|f��t|j|	�\}}|dk�r�ttd�|��t|j||	�}|dk�rttd�|��t|�t|	�|jjd|d�|�|d�dS)NrPr�s0z%You must add at least one role for %srr�r�z"SELinux user %s is already definedz$Could not create SELinux user for %sr�zCould not add role %s for %sr�zCould not set MLS level for %szCould not add prefix %s for %szCould not extract key for %szCould not add SELinux user %s�seuserr/)r.r8r9)rurdr]rsrr�rlr�Zsemanage_user_createZsemanage_user_set_name�semanage_user_add_role�semanage_user_set_mlsrange�semanage_user_set_mlslevel�semanage_user_set_prefixZsemanage_user_key_extract�semanage_user_modify_localr�r�rnr>r�)r(r7�roles�selevelr9�prefixrar�r�r��rr�r)r)r*r�*s\







zseluserRecords.__addc
Cs`z&|��|�|||||�|��Wn4tyZ}z|j�d�|�WYd}~n
d}~00dSr�)ry�_seluserRecords__addrHrsrn�r(r7rrr9rr�r)r)r*r�gszseluserRecords.addrc	Cs8d}d}d�|�}|dkrXt|�dkrX|dkrX|dkrXtdkrLttd���nttd���t|j|�\}	}
|	dkr�ttd�|��t|j|
�\}	}|	dkr�ttd�|��|s�ttd	�|��t|j|
�\}	}|	dkr�ttd
�|��t	|�}t
|j|�\}	}
|	dk�rd�|
�}tdk�r6|dk�r6t|j|t|��tdk�r\|dk�r\t
|j|t|��|dk�rtt|j||�t|�dk�r�|
D]}||v�r�t||��q�|D]}||
v�r�t|j||��q�t|j|
|�}	|	dk�r�ttd�|��t|
�t|�d�|���}d�|���}|jjd
||||||d�dS)Nrr�rrPz&Requires prefix, roles, level or rangezRequires prefix or rolesr�r��SELinux user %s is not definedr�z Could not modify SELinux user %sr/r�)r.r:r8r9r;r<)r�r]rursrr�rlr�r�r�r�rrdrrZsemanage_user_del_rolerrr�r�r�rnr>)r(r7rrr9rr;r<Znewrolesrar�r�r��rlistrr0r)r)r*r�psV
$





zseluserRecords.__modifyc
Cs`z&|��|�|||||�|��Wn4tyZ}z|j�d�|�WYd}~n
d}~00dSr�)ry�_seluserRecords__modifyrHrsrnr
r)r)r*r��szseluserRecords.modifyc	Cs8t|j|�\}}|dkr(ttd�|��t|j|�\}}|dkrPttd�|��|sdttd�|��t|j|�\}}|dkr�ttd�|��|s�ttd�|��t|j|�\}}|dkr�ttd�|��t|�}t|j|�\}}d�	|�}t
|j|�}|dk�rttd�|��t|�t|�|j
jd	|||d
�dS)Nrr�r�rz7SELinux user %s is defined in policy, cannot be deletedr�r/z Could not delete SELinux user %sr�)r:r<r;)r�rlrsrr�Zsemanage_user_exists_localr�r�r�r�Zsemanage_user_del_localr�r�rnrA)	r(r7rar�r�r�r<rr;r)r)r*r��s2

zseluserRecords.__deletec
CsXz|��|�|�|��Wn4tyR}z|j�d�|�WYd}~n
d}~00dSr�)ry�_seluserRecords__deleterHrsrnr�r)r)r*r��s
zseluserRecords.deletec
Cs�t|j�\}}|dkr"ttd���z,|��|D]}|�t|��q0|��Wn4ty�}z|j�d�|�WYd}~n
d}~00dSr�)	�semanage_user_list_localrlrsrryr�semanage_user_get_namerHrnr�r)r)r*rx�szseluserRecords.deleteallrcCs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]^}t|�}t|j|�\}}|dkrxttd�|��d�|�}t	|�t
|�t|�|f|t|�<qD|S)NrzCould not list SELinux usersz Could not list roles for user %sr�)rrlr�Zsemanage_user_listrsrrr�r�Zsemanage_user_get_prefixZsemanage_user_get_mlslevelr�)r(r�r�rar�r7rrr)r)r*r��s

"zseluserRecords.get_allcCs�g}|�d�}t|���D]f}||ds6||drf|�d||d||d||d|f�q|�d||d|f�q|S)NTrPr�z-a -L %s -r %s -R '%s' %srz
-a -R '%s' %sr�r�r)r)r*r|�s
0zseluserRecords.customizedrPc	Cs|�|�}t|�dkrdSt|���}tdkr�|r|tddtd�td�td�f�tdtd�td	�td
�td�td�f�|D]B}td
|||dt||d�t||d�||df�q�n>|r�tdtd�td�f�|D]}td|||df�q�dS)NrrPz
%-15s %-10s %-10s %-30srZLabelingzMLS/z%-15s %-10s %-10s %-30s %s
r�ZPrefixz	MCS Levelz	MCS Rangez
SELinux Rolesz%-15s %-10s %-10s %-30s %sr�rz	%-15s %s
z%-15s %s)r�r]r�r�rur�rrc�r(r�r�r�r�r�r)r)r*r�s
 *BzseluserRecords.list)N)r)rPr)rKrLrMr+r�r	r�r
r�rr�rxr�r|r�r)r)r)r*r�s
=	8	!


r�c@s�eZdZgZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zddd�Z
d dd�Zdd�Zd!dd�ZdS)"�portRecordsNcCsHt�||�z$ttt�tjd��dd�|_WntyBYn0dS)NZ	port_typer�types)rer+r�ror��	ATTRIBUTE�valid_types�RuntimeErrorr�r)r)r*r+s
$zportRecords.__init__c
Cs�ttttd�}||��vr$||}nttd���|dkrDttd���t|t�r\|�	dd�}n|f}t
|�dkr�t|d�}}nt|d�}t|d�}|dkr�ttd	���t|j
|||�\}}	|dkr�ttd
�||f��|	|||fS)N)ZtcpZudpZsctpZdccpz0Protocol has to be one of udp, tcp, dccp or sctprzPort is requiredr-rPr�zInvalid Port� Could not create a key for %s/%s)ZSEMANAGE_PROTO_TCPZSEMANAGE_PROTO_UDPZSEMANAGE_PROTO_SCTPZSEMANAGE_PROTO_DCCPr�rsr�
isinstancer5r�r]�intZsemanage_port_key_createrl)
r(�port�protoZ	protocols�proto_dZports�high�lowrar�r)r)r*�__genkey&s.�

zportRecords.__genkeyc
	Csttdkr|dkrd}nt|�}|dkr2ttd���t�|�}||jvrVttd�|��|�||�\}}}}t|j	|�\}	}
|	dkr�ttd�||f��|
r�ttd�||f��t
|j	�\}	}|	dkr�ttd	�||f��t||�t|||�t
|j	�\}	}|	dk�rttd
�||f��t|j	|d�}	|	dk�rFttd�||f��t|j	|d
�}	|	dk�rrttd�||f��t|j	||�}	|	dk�r�ttd�||f��tdk�r�|dk�r�t|j	||�}	|	dk�r�ttd�||f��t|j	||�}	|	dk�r
ttd�||f��t|j	||�}	|	dk�r6ttd�||f��t|�t|�t|�|j�d|t�|�dd
||f�dS)NrPrr��Type is required�'Type %s is invalid, must be a port typer�(Could not check if port %s/%s is definedzPort %s/%s already definedzCould not create port for %s/%s�"Could not create context for %s/%s�system_uz,Could not set user in port context for %s/%s�object_rz,Could not set role in port context for %s/%sz,Could not set type in port context for %s/%sz2Could not set mls fields in port context for %s/%sz$Could not set port context for %s/%szCould not add port %s/%sz8resrc=port op=add lport=%s proto=%s tcontext=%s:%s:%s:%s)rurdrsrro�get_real_type_namer�_portRecords__genkey�semanage_port_existsrlZsemanage_port_createZsemanage_port_set_protoZsemanage_port_set_range�semanage_context_create�semanage_context_set_user�semanage_context_set_role�semanage_context_set_type�semanage_context_set_mlsZsemanage_port_set_con�semanage_port_modify_local�semanage_context_free�semanage_port_key_free�semanage_port_freernrEr�getprotobyname)
r(rrr9rhr�rrrrar�r�conr)r)r*r�Fs\









zportRecords.__addcCs$|��|�||||�|��dSr!)ry�_portRecords__addrH)r(rrr9rhr)r)r*r��szportRecords.addc
	Cs�|dkr2|dkr2tdkr&ttd���nttd���t�|�}|rZ||jvrZttd�|��|�||�\}}}}t|j|�\}	}
|	dkr�ttd�||f��|
s�ttd�||f��t	|j|�\}	}|	dkr�ttd	�||f��t
|�}tdk�r|dkr�d
}nt|j|t|��|dk�r(t
|j||�t|j||�}	|	dk�rTttd�||f��t|�t|�|j�d|t�|�d
d||f�dS)NrrP�Requires setype or serange�Requires setyper"rr#�Port %s/%s is not definedzCould not query port %s/%sr�zCould not modify port %s/%sz;resrc=port op=modify lport=%s proto=%s tcontext=%s:%s:%s:%sr%r&)rursrror'rr(r)rlZsemanage_port_query�semanage_port_get_conr.rdr-r/r1r2rnrErr3)
r(rrr9�setyper�rrrrar�rr4r)r)r*r��s:



zportRecords.__modifycCs$|��|�||||�|��dSr!)ry�_portRecords__modifyrH)r(rrr9r:r)r)r*r��szportRecords.modifycCs�t|j�\}}|dkr"ttd���|��|D]�}t|�}t|�}t|�}t|�}d||f}|�	||�\}	}
}}|dkr�ttd�|��t
|j|	�}|dkr�ttd�|��t|	�||kr�|}|j�
d|t�|�f�q.|��dS)NrzCould not list the ports�%s-%sr�zCould not delete the port %s�&resrc=port op=delete lport=%s proto=%s)�semanage_port_list_localrlrsrry�semanage_port_get_proto�semanage_port_get_proto_str�semanage_port_get_low�semanage_port_get_highr(�semanage_port_del_localr1rnrErr3rH)r(ra�plistrr�	proto_strrrZport_strr�rr)r)r*rx�s*zportRecords.deleteallc	Cs�|�||�\}}}}t|j|�\}}|dkr@ttd�||f��|sXttd�||f��t|j|�\}}|dkr�ttd�||f��|s�ttd�||f��t|j|�}|dkr�ttd�||f��t|�|j�	d|t
�|�f�dS)Nrr#r8z2Port %s/%s is defined in policy, cannot be deletedzCould not delete port %s/%sr=)r(r)rlrsrZsemanage_port_exists_localrCr1rnrErr3)	r(rrr�rrrrar�r)r)r*r��s zportRecords.__deletecCs |��|�||�|��dSr!)ry�_portRecords__deleterH)r(rrr)r)r*r��szportRecords.deletercCs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]N}t|�}t|�}t|�}t	|�}t
|�}	t|�}
t|�}||f||
||	f<qD|S)Nr�Could not list ports)
r>rlrD�semanage_port_listrsrr9�semanage_context_get_type�semanage_context_get_mlsr?r@rArB)r(r�r�rarr4�ctype�levelrrErrr)r)r*r��s 
zportRecords.get_allcCs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]�}t|�}t|�}t|�}t	|�}t
|�}	t|�}
||f|��vr�g|||f<|	|
kr�|||f�
d|	�qD|||f�
d|	|
f�qD|S)NrrGz%dz%d-%d)r>rlrDrHrsrr9rIr?r@rArBr�r2)r(r�r�rarr4rKrrErrr)r)r*�get_all_by_types&
zportRecords.get_all_by_typecCs�g}|�d�}t|���D]�}|d|dkr6|dnd|d|df}||dr�|�d||d||d|d|f�q|�d||d|d|f�q|S)NTrrPr<z-a -t %s -r '%s' -p %s %sr�z-a -t %s -p %s %sr��r(rr�r�rr)r)r*r|s
,,"zportRecords.customizedrPcCs�|�|�}t|�dkrdSt|���}|rHtdtd�td�td�f�|D]J}d|}|d||d7}||dd�D]}|d	|7}q|t|�qLdS)
Nrz%-30s %-8s %s
zSELinux Port TypeZProto�Port Numberz%-30s %-8s �%srP�, %s)rMr]r�r�r�r�r(r�r�r�r�r�r�rr)r)r*r�*s
zportRecords.list)N)r)r)rPr)rKrLrMrr+r(r5r�r;r�rxrFr�r�rMr|r�r)r)r)r*rs
 @*

rc@s�eZdZgZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zddd�Z
d dd�Zdd�Zd!dd�ZdS)"�
ibpkeyRecordsNcCsTt�||�z6ttt�|j��dgd�}tdd�|��D��|_	WnYn0dS)NZibpkey_type��attrscss|]}t|�VqdSr!�r5r�r)r)r*�	<genexpr>Ar�z)ibpkeyRecords.__init__.<locals>.<genexpr>)
rer+rrro�get_store_policyrgr��resultsr�r(ri�qr)r)r*r+=szibpkeyRecords.__init__cCs�|dkrttd���|�d�}t|�dkr>t|dd�}}nt|dd�}t|dd�}|dkrnttd���t|j|||�\}}|dkr�ttd�||f��||||fS)	NrzSubnet Prefix is requiredr-rPrrzInvalid Pkeyr)rsrr�r]rZsemanage_ibpkey_key_createrl)r(�pkey�
subnet_prefixZpkeysrrrar�r)r)r*r Es
zibpkeyRecords.__genkeycCsVtdkr|dkrd}nt|�}|dkr2ttd���t�|�}||jvrVttd�|��|�||�\}}}}t|j	|�\}}	|dkr�ttd�||f��|	r�ttd�||f��t
|j	�\}}
|dkr�ttd	�||f��t|j	|
|�t|
||�t
|j	�\}}|dk�rttd
�||f��t|j	|d�}|dk�rJttd�||f��t|j	|d
�}|dk�rvttd�||f��t|j	||�}|dk�r�ttd�||f��tdk�r�|dk�r�t|j	||�}|dk�r�ttd�||f��t|j	|
|�}|dk�rttd�||f��t|j	||
�}|dk�r:ttd�||f��t|�t|�t|
�dS)NrPrr�r!�)Type %s is invalid, must be a ibpkey typer�*Could not check if ibpkey %s/%s is definedzibpkey %s/%s already definedz!Could not create ibpkey for %s/%sr$r%z.Could not set user in ibpkey context for %s/%sr&z.Could not set role in ibpkey context for %s/%sz.Could not set type in ibpkey context for %s/%sz4Could not set mls fields in ibpkey context for %s/%sz&Could not set ibpkey context for %s/%szCould not add ibpkey %s/%s)rurdrsrror'r�_ibpkeyRecords__genkey�semanage_ibpkey_existsrlZsemanage_ibpkey_createZ!semanage_ibpkey_set_subnet_prefixZsemanage_ibpkey_set_ranger*r+r,r-r.Zsemanage_ibpkey_set_con�semanage_ibpkey_modify_localr0�semanage_ibpkey_key_free�semanage_ibpkey_free)r(r\r]r9rhr�rrrar�rr4r)r)r*r�XsZ








zibpkeyRecords.__addcCs$|��|�||||�|��dSr!)ry�_ibpkeyRecords__addrH)r(r\r]r9rhr)r)r*r��szibpkeyRecords.addcCsd|dkr2|dkr2tdkr&ttd���nttd���t�|�}|rZ||jvrZttd�|��|�||�\}}}}t|j|�\}}	|dkr�ttd�||f��|	s�ttd�||f��t	|j|�\}}
|dkr�ttd	�||f��t
|
�}tdk�r|dk�rt|j|t|��|dk�r$t
|j||�t|j||
�}|dk�rPttd
�||f��t|�t|
�dS)NrrPr6r7r^rr_�ibpkey %s/%s is not definedzCould not query ibpkey %s/%szCould not modify ibpkey %s/%s)rursrror'rr`rarlZsemanage_ibpkey_query�semanage_ibpkey_get_conr.rdr-rbrcrd)r(r\r]r9r:r�rrrar�rr4r)r)r*r��s4


zibpkeyRecords.__modifycCs$|��|�||||�|��dSr!)ry�_ibpkeyRecords__modifyrH)r(r\r]r9r:r)r)r*r��szibpkeyRecords.modifyc	Cs�t|j�\}}|dkr"ttd���|��|D]�}t|j|�\}}t|�}t|�}d||f}|�||�\}}}}|dkr�ttd�|��t	|j|�}|dkr�ttd�|��t
|�q.|��dS)NrzCould not list the ibpkeysr<r�zCould not delete the ibpkey %s)�semanage_ibpkey_list_localrlrsrry�!semanage_ibpkey_get_subnet_prefix�semanage_ibpkey_get_low�semanage_ibpkey_get_highr`�semanage_ibpkey_del_localrcrH)	r(rarD�ibpkeyr]rrZpkey_strr�r)r)r*rx�s"
zibpkeyRecords.deleteallcCs�|�||�\}}}}t|j|�\}}|dkr@ttd�||f��|sXttd�||f��t|j|�\}}|dkr�ttd�||f��|s�ttd�||f��t|j|�}|dkr�ttd�||f��t|�dS)Nrr_rfz4ibpkey %s/%s is defined in policy, cannot be deletedzCould not delete ibpkey %s/%s)r`rarlrsrZsemanage_ibpkey_exists_localrmrc)r(r\r]r�rrrar�r)r)r*r��szibpkeyRecords.__deletecCs |��|�||�|��dSr!)ry�_ibpkeyRecords__deleterH)r(r\r]r)r)r*r��szibpkeyRecords.deletercCs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]X}t|�}t|�}|dkrbqDt|�}t	|j|�\}}t
|�}	t|�}
||f||	|
|f<qD|S)Nr�Could not list ibpkeysZreserved_ibpkey_t)rirlrD�semanage_ibpkey_listrsrrgrIrJrjrkrl)r(r�r�rarnr4rKrLr]rrr)r)r*r��s"
zibpkeyRecords.get_allc
Cs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]�}t|�}t|�}t|j|�\}}t	|�}t
|�}	||f|��vr�g|||f<||	kr�|||f�d|�qD|||f�d||	f�qD|S)Nrrp�0x%xz	0x%x-0x%x)
rirlrDrqrsrrgrIrjrkrlr�r2)
r(r�r�rarnr4rKr]rrr)r)r*rMs$
zibpkeyRecords.get_all_by_typecCs�g}|�d�}t|���D]�}|d|dkr6|dnd|d|df}||dr�|�d||d||d|d|f�q|�d||d|d|f�q|S)NTrrPr<z-a -t %s -r '%s' -x %s %sr�z-a -t %s -x %s %sr�rNr)r)r*r|"s
,,"zibpkeyRecords.customizedrPcCs�|�|�}|��}t|�dkr"dS|rDtdtd�td�td�f�t|�D]J}d|}|d||d7}||dd�D]}|d	|7}q|t|�qLdS)
Nr�%-30s %-18s %s
zSELinux IB Pkey TypeZ
Subnet_PrefixzPkey Number�%-30s %-18s rPrPrQ�rMr�r]r�rr�rRr)r)r*r�.s
zibpkeyRecords.list)N)r)r)rPr)rKrLrMrr+r`rer�rhr�rxror�r�rMr|r�r)r)r)r*rS9s
>&

rSc@s�eZdZgZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zddd�Z
d dd�Zdd�Zd!dd�ZdS)"�ibendportRecordsNcCsTt�||�z6ttt�|j��dgd�}tdd�|��D��|_	WnYn0dS)NZibendport_typerTcss|]}t|�VqdSr!rVr�r)r)r*rWEr�z,ibendportRecords.__init__.<locals>.<genexpr>)
rer+rrrorXrg�setrYrrZr)r)r*r+AszibendportRecords.__init__cCsp|dkrttd���t|�}|dks,|dkr8ttd���t|j||�\}}|dkrfttd�||f��|||fS)NrzIB device name is required�rPzInvalid Port Numberrz*Could not create a key for ibendport %s/%s)rsrrZsemanage_ibendport_key_createrl)r(�	ibendport�
ibdev_namerrar�r)r)r*r IszibendportRecords.__genkeycCsRtdkr|dkrd}nt|�}|dkr2ttd���t�|�}||jvrVttd�|��|�||�\}}}t|j	|�\}}|dkr�ttd�||f��|r�ttd�||f��t
|j	�\}}	|dkr�ttd	�||f��t|j	|	|�t|	|�t
|j	�\}}
|dk�rttd
�||f��t|j	|
d�}|dk�rFttd�||f��t|j	|
d
�}|dk�rrttd�||f��t|j	|
|�}|dk�r�ttd�||f��tdk�r�|dk�r�t|j	|
|�}|dk�r�ttd�||f��t|j	|	|
�}|dk�r
ttd�||f��t|j	||	�}|dk�r6ttd�||f��t|
�t|�t|	�dS)NrPrr�r!�-Type %s is invalid, must be an ibendport typer�-Could not check if ibendport %s/%s is definedzibendport %s/%s already definedz$Could not create ibendport for %s/%sr$r%z1Could not set user in ibendport context for %s/%sr&z1Could not set role in ibendport context for %s/%sz1Could not set type in ibendport context for %s/%sz7Could not set mls fields in ibendport context for %s/%sz)Could not set ibendport context for %s/%szCould not add ibendport %s/%s)rurdrsrror'r�_ibendportRecords__genkey�semanage_ibendport_existsrlZsemanage_ibendport_createZ!semanage_ibendport_set_ibdev_nameZsemanage_ibendport_set_portr*r+r,r-r.Zsemanage_ibendport_set_con�semanage_ibendport_modify_localr0�semanage_ibendport_key_free�semanage_ibendport_free)r(ryrzr9rhr�rrar�rr4r)r)r*r�WsZ









zibendportRecords.__addcCs$|��|�||||�|��dSr!)ry�_ibendportRecords__addrH)r(ryrzr9rhr)r)r*r��szibendportRecords.addcCsb|dkr2|dkr2tdkr&ttd���nttd���t�|�}|rZ||jvrZttd�|��|�||�\}}}t|j|�\}}|dkr�ttd�||f��|s�ttd�||f��t	|j|�\}}	|dkr�ttd	�||f��t
|	�}
tdk�r
|dk�r
t|j|
t|��|dk�r"t
|j|
|�t|j||	�}|dk�rNttd
�||f��t|�t|	�dS)NrrPr6r7r{rr|�ibendport %s/%s is not definedzCould not query ibendport %s/%sz Could not modify ibendport %s/%s)rursrror'rr}r~rlZsemanage_ibendport_query�semanage_ibendport_get_conr.rdr-rr�r�)r(ryrzr9r:r�rrar�rr4r)r)r*r��s4


zibendportRecords.__modifycCs$|��|�||||�|��dSr!)ry�_ibendportRecords__modifyrH)r(ryrzr9r:r)r)r*r��szibendportRecords.modifycCs�t|j�\}}|dkr"ttd���|��|D]~}t|j|�\}}t|�}|�t|�|�\}}}|dkr|ttd�t	|f��t
|j|�}|dkr�ttd�||f��t|�q.|��dS)NrzCould not list the ibendportsz Could not create a key for %s/%dz$Could not delete the ibendport %s/%d)
�semanage_ibendport_list_localrlrsrry�!semanage_ibendport_get_ibdev_name�semanage_ibendport_get_portr}r5Z	ibdevname�semanage_ibendport_del_localr�rH)r(rarDryrzrr�r)r)r*rx�s
zibendportRecords.deleteallcCs�|�||�\}}}t|j|�\}}|dkr>ttd�||f��|sVttd�||f��t|j|�\}}|dkr�ttd�||f��|s�ttd�||f��t|j|�}|dkr�ttd�||f��t|�dS)Nrr|r�z7ibendport %s/%s is defined in policy, cannot be deletedz Could not delete ibendport %s/%s)r}r~rlrsrZsemanage_ibendport_exists_localr�r�)r(ryrzr�rrar�r)r)r*r��szibendportRecords.__deletecCs |��|�||�|��dSr!)ry�_ibendportRecords__deleterH)r(ryrzr)r)r*r��szibendportRecords.deleterc
Cs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]N}t|�}t|�}|dkrbqDt|�}t	|j|�\}}t
|�}	||f||	|f<qD|S)Nr�Could not list ibendportsZreserved_ibendport_t)r�rlrD�semanage_ibendport_listrsrr�rIrJr�r�)
r(r�r�raryr4rKrLrzrr)r)r*r��s 
zibendportRecords.get_allc	Cs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]^}t|�}t|�}t|j|�\}}t	|�}||f|�
�vr�g|||f<|||f�d|�qD|S)Nrr�rr)r�rlrDr�rsrr�rIr�r�r�r2)	r(r�r�raryr4rKrzrr)r)r*rMs
z ibendportRecords.get_all_by_typec	Cs�g}|�d�}t|���D]d}||drZ|�d||d||d|d|df�q|�d||d|d|df�q|S)NTrPz-a -t %s -r '%s' -z %s %srz-a -t %s -z %s %sr�r�r)r)r*r|s
0&zibendportRecords.customizedrPcCs�|�|�}|��}t|�dkr"dS|rDtdtd�td�td�f�t|�D]J}d|}|d||d7}||dd�D]}|d	|7}q|t|�qLdS)
NrrszSELinux IB End Port TypezIB Device NamerOrtrPrPrQrurRr)r)r*r�$s
zibendportRecords.list)N)r)r)rPr)rKrLrMrr+r}r�r�r�r�rxr�r�r�rMr|r�r)r)r)r*rv=s
=&

rvc@sveZdZgZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zddd�Z
dd�Zddd�ZdS)�nodeRecordsNcCsRt�||�ddg|_z$ttt�tjd��dd�|_WntyLYn0dS)N�ipv4Zipv6Z	node_typerr)	rer+�protocolr�ror�rrrr�r)r)r*r+7s
$znodeRecords.__init__c	Cs�|}|}d}|dkr ttd���t|�dks8|ddkrdt�||�}t|j�}t|j�}d|j}z|j	�
|�}Wnttd���Yn0zt�|�}Wn(|dkr�tj
}nttd���Yn0||||fS)NrzNode Address is requiredrr�zipv%dzUnknown or missing protocolr�)rsrr]�	ipaddressZ
ip_networkr5Znetwork_addressZnetmask�versionr��indexrr3ZIPPROTO_IPIP)	r(�addr�maskr�ZnewaddrZnewmaskZnewprotocolr�Zaudit_protocolr)r)r*�validate?s*


znodeRecords.validatec
Cs�|�|||�\}}}}tdkr4|dkr,d}nt|�}|dkrHttd���t�|�}||jvrlttd�|��t|j	|||�\}}|dkr�ttd�|��t
|j	|�\}}	|dkr�ttd�|��|	r�ttd	�|��t|j	�\}}
|dkr�ttd
�|��t|
|�t
|j	|
||�}t|j	�\}}|dk�r<ttd�|��t|j	|
||�}|dk�rfttd�|��t|j	|d
�}|dk�r�ttd�|��t|j	|d�}|dk�r�ttd�|��t|j	||�}|dk�r�ttd�|��tdk�r|dk�rt|j	||�}|dk�rttd�|��t|j	|
|�}|dk�rBttd�|��t|j	||
�}|dk�rjttd�|��t|�t|�t|
�|j�d|||d
d||f�dS)NrPrr�zSELinux node type is required�'Type %s is invalid, must be a node typer�Could not create key for %s�%Could not check if addr %s is definedzAddr %s already definedzCould 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 %szCresrc=node op=add laddr=%s netmask=%s proto=%s tcontext=%s:%s:%s:%s)r�rurdrsrror'r�semanage_node_key_createrl�semanage_node_existsZsemanage_node_createZsemanage_node_set_protoZsemanage_node_set_addrr*Zsemanage_node_set_maskr+r,r-r.Zsemanage_node_set_con�semanage_node_modify_localr0�semanage_node_key_free�semanage_node_freernrE)r(r�r�rr9rK�audit_protorar�r��noder4r)r)r*r�ash










znodeRecords.__addcCs&|��|�|||||�|��dSr!)ry�_nodeRecords__addrH)r(r�r�rr9rKr)r)r*r��sznodeRecords.addc
Cs�|�|||�\}}}}|dkr2|dkr2ttd���t�|�}|rZ||jvrZttd�|��t|j|||�\}}|dkr�ttd�|��t|j|�\}}	|dkr�ttd�|��|	s�ttd�|��t	|j|�\}}
|dkr�ttd�|��t
|
�}td	k�r|dk�rt|j|t
|��|dk�r0t|j||�t|j||
�}|dk�rXttd
�|��t|�t|
�|j�d|||dd
||f�dS)Nrr6r�rr�r��Addr %s is not definedzCould not query addr %srPzCould not modify addr %szFresrc=node op=modify laddr=%s netmask=%s proto=%s tcontext=%s:%s:%s:%sr%r&)r�rsrror'rr�rlr�Zsemanage_node_query�semanage_node_get_conrur.rdr-r�r�r�rnrE)r(r�r�rr9r:r�rar�r�r�r4r)r)r*r��s8


znodeRecords.__modifycCs&|��|�|||||�|��dSr!)ry�_nodeRecords__modifyrH)r(r�r�rr9r:r)r)r*r��sznodeRecords.modifycCs|�|||�\}}}}t|j|||�\}}|dkrBttd�|��t|j|�\}}|dkrjttd�|��|s~ttd�|��t|j|�\}}|dkr�ttd�|��|s�ttd�|��t|j|�}|dkr�ttd�|��t|�|j	�
d|||f�dS)Nrr�r�r�z/Addr %s is defined in policy, cannot be deletedzCould not delete addr %sz1resrc=node op=delete laddr=%s netmask=%s proto=%s)r�r�rlrsrr�Zsemanage_node_exists_localZsemanage_node_del_localr�rnrE)r(r�r�rr�rar�r�r)r)r*r��s&znodeRecords.__deletecCs"|��|�|||�|��dSr!)ry�_nodeRecords__deleterH)r(r�r�rr)r)r*r��sznodeRecords.deletecCspt|j�\}}|dkr"ttd���|��|D]4}|�t|j|�dt|j|�d|jt	|��q.|�
�dS)Nrz!Could not deleteall node mappingsrP)�semanage_node_list_localrlrsrryr��semanage_node_get_addr�semanage_node_get_maskr��semanage_node_get_protorH)r(raZnlistr�r)r)r*rx�s2znodeRecords.deleteallrc	Cs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]`}t|�}t|j|�}t|j|�}|j	t
|�}t|�t|�t
|�t|�f||d|d|f<qD|S)NrzCould not list addrsrP)r�rl�ilistZsemanage_node_listrsrr�r�r�r�r��semanage_context_get_user�semanage_context_get_rolerIrJ)	r(r�r�rar�r4r�r�rr)r)r*r�s
0znodeRecords.get_allc
Cs�g}|�d�}t|���D]p}||dr`|�d|d|d||d||d|df�q|�d|d|d||d|df�q|S)NTrz-a -M %s -p %s -t %s -r '%s' %srPr�rz-a -M %s -p %s -t %s %sr�r�r)r)r*r|s
6,znodeRecords.customizedrPcCs�|�|�}t|�dkrdSt|���}|r6tdd�tr�|D]n}d}|D]}|dt|�}qJtd|d|d|d||d||d||dt||d	d
�f�q>nF|D]@}td|d|d|d||d||d||df�q�dS)Nrz%-18s %-18s %-5s %-5s
)z
IP AddressZNetmask�Protocol�Contextr�	z%-18s %-18s %-5s %s:%s:%s:%s rPr�rFz%-18s %-18s %-5s %s:%s:%s )r�r]r�r�r�rur5rc)r(r�r�r�r�r��val�fieldsr)r)r*r�!s
PznodeRecords.list)N)r)rPr)rKrLrMrr+r�r�r�r�r�r�r�rxr�r|r�r)r)r)r*r�3s
"H(


r�c@sjeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
ddd�Zdd�Zddd�Z
dS)�interfaceRecordsNcCst�||�dSr!rr�r)r)r*r+6szinterfaceRecords.__init__c	CsRtdkr|dkrd}nt|�}|dkr2ttd���t|j|�\}}|dkrZttd�|��t|j|�\}}|dkr�ttd�|��|r�ttd�|��t|j�\}}|dkr�ttd	�|��t|j||�}t	|j�\}}|dkr�ttd
�|��t
|j|d�}|dk�rttd�|��t|j|d
�}|dk�r@ttd�|��t|j||�}|dk�rhttd�|��tdk�r�|dk�r�t
|j||�}|dk�r�ttd�|��t|j||�}|dk�r�ttd�|��t|j||�}|dk�r�ttd�|��t|j||�}|dk�rttd�|��t|�t|�t|�|j�d|dd
||f�dS)NrPrr��SELinux Type is requiredrr��*Could not check if interface %s is definedzInterface %s already definedz!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 %sz4resrc=interface op=add netif=%s tcontext=%s:%s:%s:%s)rurdrsr�semanage_iface_key_createrl�semanage_iface_existsZsemanage_iface_createZsemanage_iface_set_namer*r+r,r-r.Zsemanage_iface_set_ifconZsemanage_iface_set_msgcon�semanage_iface_modify_localr0�semanage_iface_key_free�semanage_iface_freernrE)	r(�	interfacer9rKrar�r��ifacer4r)r)r*r�9s^






zinterfaceRecords.__addcCs"|��|�|||�|��dSr!)ry�_interfaceRecords__addrH)r(r�r9rKr)r)r*r�yszinterfaceRecords.addc	Cs>|dkr|dkrttd���t|j|�\}}|dkrDttd�|��t|j|�\}}|dkrlttd�|��|s�ttd�|��t|j|�\}}|dkr�ttd�|��t|�}tdkr�|dkr�t|j|t	|��|dkr�t
|j||�t|j||�}|dk�rttd	�|��t|�t
|�|j�d
|dd||f�dS)
Nrr6rr�r��Interface %s is not definedzCould not query interface %srPzCould not modify interface %sz7resrc=interface op=modify netif=%s tcontext=%s:%s:%s:%sr%r&)rsrr�rlr�Zsemanage_iface_query�semanage_iface_get_ifconrur.rdr-r�r�r�rnrE)	r(r�r9r:rar�r�r�r4r)r)r*r�~s0
zinterfaceRecords.__modifycCs"|��|�|||�|��dSr!)ry�_interfaceRecords__modifyrH)r(r�r9r:r)r)r*r��szinterfaceRecords.modifycCs�t|j|�\}}|dkr(ttd�|��t|j|�\}}|dkrPttd�|��|sdttd�|��t|j|�\}}|dkr�ttd�|��|s�ttd�|��t|j|�}|dkr�ttd�|��t|�|j�	d|�dS)Nrr�r�r�z4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s)
r�rlrsrr�Zsemanage_iface_exists_localZsemanage_iface_del_localr�rnrE)r(r�rar�r�r)r)r*r��s$zinterfaceRecords.__deletecCs|��|�|�|��dSr!)ry�_interfaceRecords__deleterH)r(r�r)r)r*r��s
zinterfaceRecords.deletecCsNt|j�\}}|dkr"ttd���|��|D]}|�t|��q.|��dS)Nrz(Could not delete all interface  mappings)�semanage_iface_list_localrlrsrryr��semanage_iface_get_namerH)r(rar�r�r)r)r*rx�szinterfaceRecords.deleteallrcCszi}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]0}t|�}t|�t|�t	|�t
|�f|t|�<qD|S)NrzCould not list interfaces)r�rlr�Zsemanage_iface_listrsrr�r�r�rIrJr�)r(r�r�rar�r4r)r)r*r��s
&zinterfaceRecords.get_allcCspg}|�d�}t|���D]P}||drP|�d||d||d|f�q|�d||d|f�q|S)NTrz-a -t %s -r '%s' %sr�z-a -t %s %sr�r�r)r)r*r|�s
&zinterfaceRecords.customizedrPc
Cs�|�|�}t|�dkrdSt|���}|rBtdtd�td�f�tr�|D]@}td|||d||d||dt||dd	�f�qJn6|D]0}td
|||d||d||df�q�dS)Nrz	%-30s %s
zSELinux Interfacer�z%-30s %s:%s:%s:%s rPr�rFz%-30s %s:%s:%s )r�r]r�r�r�rrurcrr)r)r*r��s
@zinterfaceRecords.list)N)r)rPr)rKrLrMr+r�r�r�r�r�r�rxr�r|r�r)r)r)r*r�4s
@"


r�c@s�eZdZgZd&dd�Zdd�Zdd�Zdd	�Zd'dd�Zd
d�Z	d(dd�Z
d)dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zd*dd �Zd!d"�Zd+d$d%�ZdS),�fcontextRecordsNcCsvt�||�zLttt�tjd��dd�|_|jttt�tjd��dd�7_WntyjYn0i|_i|_	d|_
z`tt�
�d�}|��D]<}|��}t|�dkr�q�|�d�r�q�|��\}}||j|<q�|��Wnty�Yn0zjtt��d�}|��D]F}|��}t|�dk�r(�q
|�d��r8�q
|��\}}||j	|<�q
|��Wnt�ypYn0dS)NZ	file_typerrZdevice_nodeFr�#)rer+r�ror�rrr�equiv�
equiv_dist�	equal_indr�r\�selinux_file_context_subs_path�	readlines�stripr]r�r�r��IOErrorZ#selinux_file_context_subs_dist_path)r(rir�r��target�
substituter)r)r*r+�sF ,
zfcontextRecords.__init__cCs�|jr�t��}d|}t|d�}|j��D]}|�d||j|f�q*|��zt�	|t�
|�t
j�WnYn0t�||�d|_t
�|�dS)Nz%s.tmp�wz%s %s
F)r�r\r�r�r�r��writer�r��chmod�stat�ST_MODE�renamererH)r(Z	subs_fileZtmpfiler�r�r)r)r*rH 	s
zfcontextRecords.commitc	Cs|��|dkr,|ddkr,ttd�|��|dkrP|ddkrPttd�|��||j��vrnttd�|��|�|�|j|jfD]6}|D],}|�|d�r�ttd�||||f��q�q�|j�	dt
�d|d	�t
�d
|d	�f�||j|<d|_|�
�dS)Nr����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 existsz4File spec %s conflicts with equivalency rule '%s %s'z!resrc=fcontext op=add-equal %s %s�sglobr�tglobT)ryrsrr�r�r�r�r�rnrEr"�audit_encode_nv_stringr�rH)r(r�r��fdictr�r)r)r*�	add_equal0	s 
(
zfcontextRecords.add_equalc	Csj|��||j��vr&ttd�|��||j|<d|_|j�dt�	d|d�t�	d|d�f�|�
�dS)Nz'Equivalence class for %s does not existTz$resrc=fcontext op=modify-equal %s %sr�rr�)ryr�r�rsrr�rnrEr"r�rH)r(r�r�r)r)r*�modify_equalG	s
(zfcontextRecords.modify_equalr%cCs�t|j�\}}|dkr&ttd�|��|dkr2d}t|j||�}|dkrXttd�|��t|j|d�}|dkr~ttd�|��tdkr�t|j|d	�}|dkr�ttd
�|��|S)Nrr�rr%z)Could not set user in file context for %sr&z)Could not set role in file context for %srPr��/Could not set mls fields in file context for %s)r*rlrsrr+r,rur.)r(r�r�rar4r)r)r*�	createconR	s zfcontextRecords.createconcCs�|dks|�d�dkr"ttd���|�d�dkr<ttd���|j|jfD]J}|D]@}|�|d�rPt�||||�}ttd	�|||||f��qPqHdS)
Nr�
rzInvalid file specificationr�r�z)File specification can not include spacesr�zMFile spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead)�findrsrr�r�r�rU�sub)r(r�r�r�r�r)r)r*r�h	szfcontextRecords.validaterc	CsX|�|�tdkrt|�}|dkr.ttd���|dkrZt�|�}||jvrZttd�|��t|j	|t
|�\}}|dkr�ttd�|��t|j	|�\}}|dkr�ttd�|��|s�t|j	|�\}}|dkr�ttd�|��|r�ttd	�|��t
|j	�\}}	|dk�rttd
�|��t|j	|	|�}|dk�r�|�||�}
t|j	|
|�}|dk�rdttd�|��tdk�r�|dk�r�t|j	|
|�}|dk�r�ttd�|��t|j	|	|
�}|dk�r�ttd
�|��t|	t
|�t|j	||	�}|dk�r�ttd�|��|dk�rt|
�t|�t|	�|�s*d}|j�dt�d|d�t||d||f�dS)NrPrr��<<none>>�1Type %s is invalid, must be a file or device typerr��1Could not check if file context for %s is definedz#File context for %s already definedz$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%z6resrc=fcontext op=add %s ftype=%s tcontext=%s:%s:%s:%sr�r&)r�rurdrsrror'r�semanage_fcontext_key_createrl�
file_types�semanage_fcontext_exists�semanage_fcontext_exists_localZsemanage_fcontext_createZsemanage_fcontext_set_exprr�r-r.�semanage_fcontext_set_conZsemanage_fcontext_set_type�semanage_fcontext_modify_localr0�semanage_fcontext_key_free�semanage_fcontext_freernrEr"r��ftype_to_audit)r(r�rh�ftyper9r�rar�r��fcontextr4r)r)r*r�s	s`









zfcontextRecords.__addcCs&|��|�|||||�|��dSr!)ry�_fcontextRecords__addrH)r(r�rhr�r9r�r)r)r*r��	szfcontextRecords.addcCsz|dkr$|dkr$|dkr$ttd���|dvrPt�|�}||jvrPttd�|��|�|�t|j|t|�\}}|dkr�ttd�|��t	|j|�\}}|dkr�ttd�|��|s�t
|j|�\}}|s�ttd�|��zt|j|�\}}	WnNt�y:zt
|j|�\}}	Wn$t�y4ttd	�|��Yn0Yn0|d
k�r�t|	�}
|
du�rb|�|�}
tdk�r�|dk�r�t|j|
t|��|dk�r�t|j|
|�|dk�r�t|j|
|�t|j|	|
�}|dk�r
ttd�|��n(t|j|	d�}|dk�r
ttd�|��t|j||	�}|dk�r2ttd
�|��t|�t|	�|�sLd}|j�dt�d|d�t||d||f�dS)Nrz"Requires setype, serange or seuser)rr�r�rr�r��"File context for %s is not definedz#Could not query file context for %sr�rPr�z$Could not modify file context for %sr%z9resrc=fcontext op=modify %s ftype=%s tcontext=%s:%s:%s:%sr�r&)rsrror'rr�r�rlr�r�r�Zsemanage_fcontext_query_local�OSErrorZsemanage_fcontext_query�semanage_fcontext_get_conr�rur.rdr+r-r�r�r�r�rnrEr"r�r�)r(r�r:r�r9r�rar�r�r�r4r)r)r*r��	s`










zfcontextRecords.__modifycCs&|��|�|||||�|��dSr!)ry�_fcontextRecords__modifyrH)r(r�r:r�r9r�r)r)r*r��	szfcontextRecords.modifyc	Cs�t|j�\}}|dkr"ttd���|��|D]�}t|�}t|�}t|�}t|j|t	|�\}}|dkrxttd�|��t
|j|�}|dkr�ttd�|��t|�|j�
dt�d|d�tt|f�q.i|_d|_|��dS)Nrz Could not list the file contextsr�z$Could not delete the file context %s�$resrc=fcontext op=delete %s ftype=%sr�T)�semanage_fcontext_list_localrlrsrry�semanage_fcontext_get_expr�semanage_fcontext_get_type�semanage_fcontext_get_type_strr�r��semanage_fcontext_del_localr�rnrEr"r�r��file_type_str_to_optionr�r�rH)r(ra�flistr�r�r��	ftype_strr�r)r)r*rx�	s&(zfcontextRecords.deleteallcCs:||j��vr>|j�|�d|_|j�dt�d|d��dSt|j	|t
|�\}}|dkrlttd�|��t
|j	|�\}}|dkr�ttd�|��|s�t|j	|�\}}|dkr�ttd�|��|r�ttd�|��nttd�|��t|j	|�}|dk�rttd	�|��t|�|j�d
t�d|d�t|f�dS)NTz!resrc=fcontext op=delete-equal %sr�rr�r�z;File context for %s is defined in policy, cannot be deletedr�z$Could not delete file context for %sr�)r�r��popr�rnrEr"r�r�rlr�rsrr�r�r�r�r�)r(r�r�rar�r�r)r)r*r�
s.
zfcontextRecords.__deletecCs |��|�||�|��dSr!)ry�_fcontextRecords__deleterH)r(r�r�r)r)r*r�:
szfcontextRecords.deletercCs|rt|j�\}|_n�t|j�\}|_|dkr:ttd���t|j�\}}|dkr\ttd���t|j�\}}|dkr~ttd���|j|7_|j|7_i}|jD]Z}t|�}t|�}t	|�}	t
|�}
|
r�t|
�t|
�t
|
�t|
�f|||	f<q�|
|||	f<q�|S)NrzCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)r�rlr�Zsemanage_fcontext_listrsrZsemanage_fcontext_list_homedirsr�r�r�r�r�r�rIrJ)r(r�raZ
fchomedirsZfclocalr�r��exprr�r�r4r)r)r*r�?
s.
&zfcontextRecords.get_allc	Cs�g}|�d�}t|���D]t}||r||drf|�dt|d||d||d|df�q|�dt|d||d|df�qt|j�r�|j��D]}|�d|j||f�q�|S)	NTrz-a -f %s -t %s -r '%s' '%s'rPr�rz-a -f %s -t %s '%s'z-a -e %s %s)r�r�r�r2r�r]r�)r(r�	fcon_dictr�r�r)r)r*r|_
s
4*
zfcontextRecords.customizedrPcCs�|�|�}t|�dkr�|r8tdtd�td�td�f�t|���D]�}||r�tr�td|d|d||d||d||dt||d	d
�f�q�td|d|d||d||d||df�qDtd|d|df�qDt|j��r:|�s:|�rttd
��|j��D]}td||j|f��qt|j	��r�|�rXttd��|j	��D]}td||j	|f��qbdS)Nrz%-50s %-18s %s
zSELinux fcontextrhr�z%-50s %-18s %s:%s:%s:%s rPr�rFz%-50s %-18s %s:%s:%s z%-50s %-18s <<None>>z,
SELinux Distribution fcontext Equivalence 
z%s = %sz%
SELinux Local fcontext Equivalence 
)
r�r]r�rr�r�rurcr�r�)r(r�r�rr�r�r)r)r*r�n
s*
H8zfcontextRecords.list)N)r%)rrr%)rrr%)r)rPr)rKrLrMrr+rHr�r�r�r�r�r�r�r�rxr�r�r�r|r�r)r)r)r*r��s"
&

B
@!
 r�c@sleZdZddd�Zdd�Zddd�Zd	d
�Zdd�Zd
d�Zddd�Z	dd�Z
dd�Zdd�Zddd�Z
dS)�booleanRecordsNcCs�t�||�i|_d|jd<d|jd<d|jd<d|jd<d|jd<d|jd<zt��\}|_t��\}}Wng|_d}Yn0|jd	ks�|j|kr�d
|_nd|_dS)NrPZTRUErZFALSEZONZOFF�1�0rTF)	rer+�dictr\Zsecurity_get_boolean_names�current_booleansrmrg�modify_local)r(riraZptyper)r)r*r+�
s"






zbooleanRecords.__init__cCsNt�|�}t|j|�\}}|dkr2ttd�|��t|j|�\}}|dkrZttd�|��|snttd�|��t|j|�\}}|dkr�ttd�|��|��|j	vr�t
||j	|���nttd�d�|j	�����|j
�r||jv�rt|j||�}|dk�rttd�|��t|j||�}|dk�r:ttd	�|��t|�t|�dS)
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, z(Could not set active value of boolean %szCould not modify boolean %s)r\�selinux_boolean_sub�semanage_bool_key_createrlrsr�semanage_bool_existsZsemanage_bool_query�upperrZsemanage_bool_set_valuer�r�rrZsemanage_bool_set_activeZsemanage_bool_modify_local�semanage_bool_key_freeZsemanage_bool_free)r(r7�valuerar�r�rr)r)r*Z__mod�
s0


zbooleanRecords.__modFc	Cs�|��|r�t|�}|���d�D]h}|��}t|�dkr<q"z|�d�\}}Wn&tytttd||f���Yn0|�|��|���q"|�	�n|�||�|�
�dS)Nr�r�=zBad format %s: Record %s)ryr�r�r�r�r]rsr�_booleanRecords__modr�rH)r(r7r�use_filer�rZboolnamer�r)r)r*r��
s
zbooleanRecords.modifycCs�t�|�}t|j|�\}}|dkr2ttd�|��t|j|�\}}|dkrZttd�|��|snttd�|��t|j|�\}}|dkr�ttd�|��|s�ttd�|��t|j|�}|dkr�ttd�|��t	|�dS)Nrr�rrz2Boolean %s is defined in policy, cannot be deletedzCould not delete boolean %s)
r\r	r
rlrsrrZsemanage_bool_exists_localZsemanage_bool_del_localr
)r(r7rar�r�r)r)r*r��
s$
zbooleanRecords.__deletecCs|��|�|�|��dSr!)ry�_booleanRecords__deleterH�r(r7r)r)r*r��
s
zbooleanRecords.deletecCsVt|j�\}|_|dkr$ttd���|��|jD]}t|�}|�|�q2|��dS�NrzCould not list booleans)	�semanage_bool_list_localrl�blistrsrry�semanage_bool_get_namerrH)r(ra�booleanr7r)r)r*rx�
s
zbooleanRecords.deleteallrcCs�i}|rt|j�\}|_nt|j�\}|_|dkr>ttd���|jD]t}g}t|�}|�t|��|j	r�||j
vr�|�t�|��|�t�
|��n|�|d�|�|d�|||<qD|Sr)rrlrZsemanage_bool_listrsrrr2Zsemanage_bool_get_valuerrr\Zsecurity_get_boolean_pendingZsecurity_get_boolean_active)r(r�r�rarrr7r)r)r*r��
s"

zbooleanRecords.get_allcCst�|�}t�|�Sr!)r\r	roZboolean_descrr)r)r*�get_descs
zbooleanRecords.get_desccCst�|�}t�|�Sr!)r\r	roZboolean_categoryrr)r)r*�get_categorys
zbooleanRecords.get_categorycCsFg}|�d�}t|���D]&}||r|�d||d|f�q|S)NTz	-m -%s %sr�r�r�r)r)r*r|s
zbooleanRecords.customizedTc	Cs�td�td�f}|rT|�|�}t|���D]$}||r*td|||df�q*dS|�|�}t|�dkrndS|r�tdtd�td�td	�td
�f�t|���D]>}||r�td||||d|||d|�|�f�q�dS)Nr�r�z%s=%sr�rz%-30s %s  %s %s
zSELinux boolean�StateZDefaultZDescriptionz%-30s (%-5s,%5s)  %s)rr�r�r�r�r]r)r(r�r�rZon_offr�r�r)r)r*r�&s

$zbooleanRecords.list)N)NF)r)TFF)rKrLrMr+rr�rr�rxr�rrr|r�r)r)r)r*r�
s


r)rP)rP)>r�r�r\r�rUr3r�rrCZPROGNAMEroZsetools.policyreprZsetools.typequeryrr��gettext�kwargs�version_infoZtranslationr�r�builtinsr5�__dict__r�Z__builtin__rrQr�ZSEMANAGE_FCONTEXT_ALLZSEMANAGE_FCONTEXT_REGZSEMANAGE_FCONTEXT_DIRZSEMANAGE_FCONTEXT_CHARZSEMANAGE_FCONTEXT_BLOCKZSEMANAGE_FCONTEXT_SOCKZSEMANAGE_FCONTEXT_LINKZSEMANAGE_FCONTEXT_PIPEr�r�r"Zaudit_closer#r r�rRrYrcrdrer~r�r�r�r�rrSrvr�r�r�rr)r)r)r*�<module>s�

���
�	�
$$	

ik
H} wC

Youez - 2016 - github.com/yon3zu
LinuXploit