
    M|ey             
          d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlT dZ	d dl
Z
d dlmZ d dlmZ d dlZ	 d dlZi Zej        dk     rded<    ej        e	fd	d
ieddiZej        Zn0#  	 d dlZeej        d<   n# e$ r d dlZeej        d<   Y nw xY wY nxY wd dlZi Zeed<   eed<   eed<   eed<   eed<   eed<   e ed<   e ed<   e ed<   e!ed<   e!ed<   e!ed<   e"ed<   e"ed<   e"ed<   e#ed<   e#ed<   e#ed<   e$ed<   e$ed <   e$ed!<   e%ed"<   e%ed#<   e%ed$<   ddddddd d"d%Z&d&d&d'd(d)d*d+d,dd-	Z'	 d dl(Z( e(j)         e(j*                                G d. d/          Z+n# e,ef$ r  G d0 d/          Z+Y nw xY w G d1 d2          Z-d3 Z.dQd5Z/dQd6Z0 G d7 d8          Z1 G d9 d:e1          Z2 G d; d<e1          Z3 G d= d>e1          Z4 G d? d@e1          Z5 G dA dBe1          Z6 G dC dDe1          Z7 G dE dFe1          Z8 G dG dHe1          Z9 G dI dJe1          Z: G dK dLe1          Z; G dM dNe1          Z< G dO dPe1          Z=dS )R    N)*zselinux-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   r   r   r   r   r   r   r   anyblockchardirfilesymlinkpipe)	r   r   r   r   r   r   r   r   r   c                   0    e Zd Zd ZddZddZd Zd ZdS )	loggerc                 R    t          j                    | _        g | _        g | _        d S N)audit
audit_openaudit_fdlog_listlog_change_listselfs    -/usr/lib/python3.11/site-packages/seobject.py__init__zlogger.__init__n   s'    !,..DMDM#%D       r   c	                    d}	||k    r
||	dz   z  }d}	||k    r
||	dz   z  }d}	||k    r
||	dz   z  }d}	| j                             | j        t          j        t
          j        d         t          |          |d||||||dddg           d S )N-sename,roleranger   r   )r*   appendr)   r'   AUDIT_ROLE_ASSIGNsysargvstr)
r-   msgnamer3   seroleserange	oldsename	oldserole
oldserangeseps
             r.   logz
logger.logs   s    C" sX~%" sV|#*$ sW}$M  $-1H#(ST+WZ[^W_W_aeghjprx  {B  DM  OX  Zd  fh  jl  np  "q  r  r  r  r  rr0   c	                     | j                             | j        t          j        t
          j        d         t          |          |d||||||dddg           d S )Nr   r   )r*   r7   r)   r'   AUDIT_ROLE_REMOVEr9   r:   r;   	r-   r<   r=   r3   r>   r?   r@   rA   rB   s	            r.   
log_removezlogger.log_remove   s    M  $-1H#(ST+WZ[^W_W_aeghjprx  {B  DM  OX  Zd  fh  jl  np  "q  r  r  r  r  rr0   c           	          | j                             | j        t          j        t          |          ddddg           d S )Nsemanager   )r+   r7   r)   r'   AUDIT_USER_MAC_CONFIG_CHANGEr;   r-   r<   s     r.   
log_changezlogger.log_change   sA     ''8Z\_`c\d\dfprtvxz|(}~~~~~r0   c                     | j         D ]}t          j        ||gz     | j        D ]}t          j        ||gz     g | _         g | _        d S r&   )r*   r'   audit_log_semanage_messager+   audit_log_user_comm_message)r-   successr   s      r.   commitzlogger.commit   sl    ] C C01y=BBB) D D1A	MCCCDM#%D   r0   Nr   r   r   r   r   r   r   __name__
__module____qualname__r/   rD   rH   rM   rR    r0   r.   r$   r$   l   st        	& 	& 	&
	r 	r 	r 	r	r 	r 	r 	r	 	 		& 	& 	& 	& 	&r0   r$   c                   0    e Zd Zd ZddZddZd Zd ZdS )	r$   c                     g | _         d S r&   )r*   r,   s    r.   r/   zlogger.__init__   s    DMMMr0   r   c	                     d|d|}	|dk    r|	d|z   z  }	|dk    r|	d|z   z  }	|dk    r|	d|z   z  }	|dk    r|	d|z   z  }	|dk    r
||	d|z   z  }	|dk    r
||	d	|z   z  }	| j                             |	           d S )
N z name=r   z sename=z oldsename=z role=z
 old_role=z
 MLSRange=z old_MLSRange=r*   r7   )
r-   r<   r=   r3   r>   r?   r@   rA   rB   messages
             r.   rD   z
logger.log   s     '*ssDD1G| /:..B 5=944| -8f,,B 4<)33"} 2 2<'11R 9J 9+j88M  )))))r0   c	           
      >    |                      ||||||||           d S r&   )rD   rG   s	            r.   rH   zlogger.log_remove   s(    HHS$IzZZZZZr0   c                 @    | j                             d|z             d S )Nz %sr]   rL   s     r.   rM   zlogger.log_change   s"    M  -----r0   c                 t    |dk    rd}nd}| j         D ]$}t          j        t          j        ||z              %d S )N   zSuccessful: zFailed: )r*   syslogLOG_INFO)r-   rQ   r^   r   s       r.   rR   zlogger.commit   sP    !| %($] < <fow{;;;;< <r0   NrS   rT   rX   r0   r.   r$   r$      sm        	 	 		* 	* 	* 	* 	[ 	[ 	[ 	[	. 	. 	.	< 	< 	< 	< 	<r0   c                   *    e Zd ZddZddZd Zd ZdS )
nullloggerr   c	                     d S r&   rX   rG   s	            r.   rD   znulllogger.log       r0   c	                     d S r&   rX   rG   s	            r.   rH   znulllogger.log_remove   rh   r0   c                     d S r&   rX   rL   s     r.   rM   znulllogger.log_change   rh   r0   c                     d S r&   rX   )r-   rQ   s     r.   rR   znulllogger.commit   rh   r0   NrS   )rU   rV   rW   rD   rH   rM   rR   rX   r0   r.   rf   rf      sZ                    r0   rf   c                     d}d}|dz   |z   dz   }|dz   |z   dz   }|dz   |z   dz   dz   |z   dz   }t          j        d	|z   d
z   |           S )Nzs[0-9]*zc[0-9]*z(\.z)?z(\,z)*z(-z(:^$)research)rawsensitivitycategory	cat_range
categoriesregs         r.   validate_levelrw      sq    KH6!H,t3IV#i/$6J

{
*T
1D
8:
E
LC9S3Y_c***r0   rb   c                     d}|dk    r|| }n| }t          j        |          \  }}|dk    r| S |r|t          |          d          }|dk    r| S |S Nza:b:c:rb   r   r   )selinuxselinux_raw_to_trans_contextlen)rq   prependfillercontextrctranss         r.   	translater      s    F!| "FCC(6w??KR	Qw 
 $c&kkll#{ 
r0   c                     d}|dk    r|| }n| }t          j        |          \  }}|dk    r| S |r|t          |          d          }|dk    r| S |S ry   )rz   selinux_trans_to_raw_contextr|   )r   r}   r~   r   r   rq   s         r.   untranslater      s    F!| "FEE*4W==IR	Qw   #f++,,
by 
r0   c                   V    e Zd ZdZdZdZdZddZd Zd Z	d Z
d Zd Zd	 Zd
 Zd ZdS )semanageRecordsFNc                 2   |r't          |          t          k    r|| _        n|| _        t	          |dd          | _        | j        st	          |dd          | _        |                     | j                  | _        t          j	                    \  }}| j        dk    s| j        |k    rt                      | _        d S t          j        | j                   t          j        t          j                    | j                   t!                      | _        d S )NnoreloadFstorer   )typer;   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/   zsemanageRecords.__init__   s     	!DzzS  !!

 	j%88z 	4 w33DJ//$*-- 688J: 	&tzZ7 	&DJJJ&tz222+g6J6L6L6Ldjj,YZZZ#DJJJr0   c                     | | _         d S r&   )r   )r-   loads     r.   
set_reloadzsemanageRecords.set_reload  s     r0   c                 *   t           j        rt           j        S t                      }|st          t	          d                    t           j        s(|dk    r"t          ||t                     |t           _        t          |          s+t          |           t          t	          d                    t          |          }|t          k     r+t          |           t          t	          d                    t          |          }|dk     r+t          |           t          t	          d                    t          |          at          dk     r+t          |           t          t	          d                    |t           _        t           j        S )Nz Could not create semanage handler   z:SELinux policy is not managed or store cannot be accessed.zCannot read policy store.r   z'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   zsemanageRecords.get_handle  sz    ! 	*"))')) 	DQABBCCC* 	*u{ 	*!&%1DEEE$)O!"6** 	^#F+++Q[\\]]]"6**!! 	=#F+++Q:;;<<<f%%6 	K#F+++QHIIJJJ-f55A 	E#F+++QBCCDDD!'%%r0   c                 :    t          t          d                    NzNot yet implementedr   r
   r,   s    r.   	deleteallzsemanageRecords.deleteall3      011222r0   c                     t           j        rt          t          d                    |                                  dt           _        d S )Nz(Semanage transaction already in progressT)r   r   r   r
   beginr,   s    r.   startzsemanageRecords.start6  s@    & 	LQIJJKKK

&*###r0   c                     t           j        rd S t          | j                  }|dk     rt	          t          d                    d S )Nr   z$Could not start semanage transaction)r   r   semanage_begin_transactionr   r   r
   r-   r   s     r.   r   zsemanageRecords.begin<  sQ    & 	F'006 	HQEFFGGG	H 	Hr0   c                 :    t          t          d                    r   r   r,   s    r.   
customizedzsemanageRecords.customizedC  r   r0   c                 .   t           j        rd S | j        rt          | j        d           t          | j                  }|dk     r6| j                            d           t          t          d                    | j                            d           d S )Nr   z%Could not commit semanage transactionrb   )
r   r   r   semanage_set_reloadr   semanage_commitr   rR   r   r
   r   s     r.   rR   zsemanageRecords.commitF  s    & 	F= 	,+++TW%%6 	IJa   QFGGHHH
!r0   c                     t           j        st          t          d                    dt           _        |                                  d S )Nz$Semanage transaction not in progressF)r   r   r   r
   rR   r,   s    r.   finishzsemanageRecords.finishR  s>    * 	HQEFFGGG&+#r0   r&   )rU   rV   rW   r   r   r   r   r/   r   r   r   r   r   r   rR   r   rX   r0   r.   r   r      s        KFED& & & &,! ! !"& "& "&H3 3 3+ + +H H H3 3 3
 
 
    r0   r   c                   B    e Zd ZddZd Zd ZddZd Zd	 Zd
 Z	d Z
dS )moduleRecordsNc                 <    t                               | |           d S r&   r   r/   r-   r   s     r.   r/   zmoduleRecords.__init__[        t,,,,,r0   c                 &   g }t          | j                  \  }}}|dk     rt          t          d                    t	          |          D ]}t          ||          }t          | j        |          \  }}|dk     rt          t          d                    t          | j        |          \  }}|dk     rt          t          d                    t          | j        |          \  }}	|dk     rt          t          d                    t          | j        |          \  }}
|dk     rt          t          d                    |
                    |||	|
f           |                    d d	           |                    d
            |S )Nr   Could not list SELinux moduleszCould not get module namezCould not get module enabledzCould not get module priorityzCould not get module lang_extc                     | d         S )Nr   rX   ts    r.   <lambda>z'moduleRecords.get_all.<locals>.<lambda>z  
    QqT r0   T)keyreversec                     | d         S Nr   rX   r   s    r.   r   z'moduleRecords.get_all.<locals>.<lambda>{  r   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-   r   r   mlistnumberimodr=   enabledprioritylang_exts              r.   get_allzmoduleRecords.get_all^  s   6tw??UF6 	BQ?@@AAAv 	: 	:A*5!44C4TWcBBHBAv A #>!?!?@@@:47CHHKBAv D #A!B!BCCC<TWcJJLBAv E #B!C!CDDD<TWcJJLBAv E #B!C!CDDDHHdGXx89999 	
>>4000	>>"""r0   c                     |                                  }t          |          dk    rg S d d |D             D             S )Nr   c                 $    g | ]}d |d         z  S )z-d %sr   rX   .0xs     r.   
<listcomp>z,moduleRecords.customized.<locals>.<listcomp>  s     FFF1!A$FFFr0   c                 *    g | ]}|d          dk    |S rb   r   rX   r   r   s     r.   r   z,moduleRecords.customized.<locals>.<listcomp>  s%    (E(E(Eq1Q419(E(E(E(Er0   )r   r|   )r-   alls     r.   r   zmoduleRecords.customized~  sI    llnns88q= 	IFF(E(EC(E(E(EFFFFr0   rb   r   c           
         |                                  }t          |          dk    rd S |rBt          dt          d          ddt          d          ddt          d          d           |D ]R}|d	         dk    rt          d
          }n|r!d}t          |d         dd|d         dd|d         dd|           Sd S )Nr   
zModule Name25r\   Priority9Languagerb   Disabledr      r   5)r   r|   printr
   )r-   heading	locallistr   r   disableds         r.   listzmoduleRecords.list  s    llnns88q= 	F 	ZE=)9)9)9)9)91Z=====!J----XYYY 	G 	GAtqy Z== !A$$$$!addddHHEFFFF	G 	Gr0   c                 X   t           j                            |          st          t	          d          |z            t          | j        |          }|dk     rt          t	          d          |z            t          | j        |          }|dk    r|                                  d S d S )NzModule 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.   addzmoduleRecords.add  s    w~~d## 	EQ;<<tCDDD*47H==6 	bQTUUX``aaa)$'4887 	KKMMMMM	 	r0   c                    |                                 D ]}t          | j                  \  }}|dk     rt          t	          d                    t          | j        ||          }|dk     rt          t	          d                    t          | j        ||          }|dk     r@|rt          t	          d          |z            t          t	          d          |z            |                                  d S )Nr   zCould not create module keyzCould not set module key namezCould not enable module %szCould 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_enabledzmoduleRecords.set_enabled  s    	K 	KA099GBAv C #@!A!ABBB-dgsA>>BAv E #B!C!CDDD,TWc6BBBAv K K$Q'C%D%Dq%HIII$Q'D%E%E%IJJJ	K
 	r0   c                 P   t          | j        |          }|dk     rt          t          d          |z            |                                D ]B}t          | j        |          }|dk     r%|dk    rt          t          d          |z            C|                                  d S )Nr   r   z*Could not remove module %s (remove failed))r   r   r   r
   r   semanage_module_removerR   )r-   r   r   r   r  s        r.   deletezmoduleRecords.delete  s    *47H==6 	bQTUUX``aaa 	V 	VA'33BAv V"( V #O!P!PST!TUUUr0   c                     d d |                                  D             D             }|D ]}|                     |d           d S )Nc                     g | ]
}|d          S r   rX   r   s     r.   r   z+moduleRecords.deleteall.<locals>.<listcomp>  s    DDDaQqTDDDr0   c                 *    g | ]}|d          dk    |S r   rX   r   s     r.   r   z+moduleRecords.deleteall.<locals>.<listcomp>  s%    CCC!1CACCCr0   T)r   r  )r-   r   r  s      r.   r   zmoduleRecords.deleteall  s^    DDCCt||~~CCCDDD 	& 	&AQ%%%%	& 	&r0   r&   r   )rU   rV   rW   r/   r   r   r   r   r  r  r   rX   r0   r.   r   r   Y  s        - - - -  @G G GG G G G 
 
 
  $
 
 
& & & & &r0   r   c                       e Zd ZddZd ZdS )dontauditClassNc                 <    t                               | |           d S r&   r   r   s     r.   r/   zdontauditClass.__init__  r   r0   c                     |dvrt          t          d                    |                                  t          | j        |dk               |                                  d S )N)onoffz'dontaudit requires either 'on' or 'off'r  )r   r
   r   semanage_set_disable_dontauditr   rR   )r-   	dontaudits     r.   togglezdontauditClass.toggle  s\    M) 	KQHIIJJJ

&tw	U0BCCCr0   r&   )rU   rV   rW   r/   r  rX   r0   r.   r  r    s7        - - - -    r0   r  c                   <    e Zd ZddZd Zd ZddZd Zd	 Zd
 Z	dS )permissiveRecordsNc                 <    t                               | |           d S r&   r   r   s     r.   r/   zpermissiveRecords.__init__  r   r0   c                 j   g }t          | j                  \  }}}|dk     rt          t          d                    t	          |          D ]f}t          ||          }t          |          }|rC|                    d          r.|                    |	                    d          d                    g|S )Nr   r   permissive_rb   )
semanage_module_listr   r   r
   r6   r   semanage_module_get_name
startswithr7   r   )r-   r   r   r   r   r   r   r=   s           r.   r   zpermissiveRecords.get_all  s    247;;UF6 	BQ?@@AAAv 	7 	7A*5!44C+C00D 766 7M2215666r0   c                 X    d t          |                                           D             S )Nc                     g | ]}d |z  S )z-a %srX   r   s     r.   r   z0permissiveRecords.customized.<locals>.<listcomp>  s    <<<!<<<r0   )sortedr   r,   s    r.   r   zpermissiveRecords.customized  s&    <<VDLLNN%;%;<<<<r0   rb   r   c                    d d t          j        t           j                  D             D             }t          |          dk    rd S |rt	          dt          d          z             |                                 }|D ]}||vrt	          |           t          |          dk    rd S |rt	          dt          d          z             |D ]}t	          |           d S )Nc                     g | ]
}|d          S )r=   rX   )r   ys     r.   r   z*permissiveRecords.list.<locals>.<listcomp>  s    ___Qqy___r0   c                 "    g | ]}|d          
|S )
permissiverX   r   s     r.   r   z*permissiveRecords.list.<locals>.<listcomp>  s"    "^"^"^aP\o"^1"^"^"^r0   r   z
%-25s
zBuiltin Permissive TypeszCustomized Permissive Types)r   infoTYPEr|   r   r
   r   )r-   r   r   r   r   r   s         r.   r   zpermissiveRecords.list  s   __"^"^hmHM.J.J"^"^"^___s88q= 	F 	A+#=!>!>?@@@\\^^
 	 	A
" az??a 	F 	D+#@!A!ABCCC 	 	A!HHHH	 	r0   c                     d|z  }d|z  }t          | j        |t          |          |d          }|dk    r|                                  |dk     rt	          t          d          |z            d S )Npermissive_%sz(typepermissive %s)cilr   z?Could not set permissive domain %s (module installation failed))semanage_module_installr   r|   rR   r   r
   )r-   r   r=   modtxtr   s        r.   r   zpermissiveRecords.add  s    %&-$TWfc&kk4OO7 	KKMMM6 	jQ`aadhhiii	j 	jr0   c                     |                                 D ]?}t          | j        d|z            }|dk     rt          t	          d          |z            @|                                  d S )Nr'  r   z5Could not remove permissive domain %s (remove failed))r   r  r   r   r
   rR   )r-   r=   nr   s       r.   r  zpermissiveRecords.delete  st     	d 	dA'11DEEBAv d #Z![![^b!bcccd 	r0   c                     |                                  }t          |          dk    r,d                    |          }|                     |           d S d S )Nr   r\   )r   r|   joinr  )r-   r   r   s      r.   r   zpermissiveRecords.deleteall  sR    LLNNq66A: 	((1++CKK	 	r0   r&   r   )
rU   rV   rW   r/   r   r   r   r   r  r   rX   r0   r.   r  r    s        - - - -  = = =   (	j 	j 	j      r0   r  c                   `    e Zd ZddZd Zd ZddZddZd Zd	 Z	d
 Z
d ZddZd ZddZdS )loginRecordsNc                 t    t                               | |           d | _        d | _        d | _        d | _        d S r&   )r   r/   r@   rB   r3   r?   r   s     r.   r/   zloginRecords.__init__  s8      t,,,r0   c                 B   t          j        |          \  }| _        | _        |dk    rd}t	          | j                  }|                    | j                  \  }\  }}|                    |          \  }\  }}	t          dk    r|dk    rt          |          }n|}t          | j
        |          \  }}
|dk     rt          t          d          |z            t          | j
        |
          \  }}|dk     rt          t          d          |z            |rt          t          d          |z            |d         dk    rJ	 t          j        |dd                     nf#  t          t          d	          |dd          z            xY w	 t!          j        |           n$#  t          t          d
          |z            xY wt%          | j
                  \  }}|dk     rt          t          d          |z            t'          | j
        ||          }|dk     rt          t          d          |z            t          dk    rA|dk    r;t)          | j
        ||          }|dk     rt          t          d          |z            t+          | j
        ||          }|dk     rt          t          d          |z            t-          | j
        |
|          }|dk     rt          t          d          |z            t/          |
           t1          |           d S )Nr   user_urb   r   Could not create a key for %s2Could not check if login mapping for %s is definedz'Login mapping for %s is already defined%zLinux Group %s does not existzLinux 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
   semanage_seuser_exists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=   r3   r?   recuserrecr6   r   rA   r>   kr   us                r.   __addzloginRecords.__add  sI   /6/Ft/L/L,T^T_R< 	F ++!(T^!<!<I%kk&11|FQ 	 "}  %g..,TWd;;Q6 	HQ>??$FGGG-dgq99V6 	]QSTTW[[\\\ 	RQHIIDPQQQ7c> 		KPT!""X&&&&P #B!C!Cd122h!NOOOKT""""K #A!B!BT!IJJJ(11Q6 	PQFGG$NOOO%dgq$776 	DQ:;;dBCCCa 	Mgm 	M-dgq'BBBAv M #C!D!Dt!KLLL'F;;6 	LQBCCdJKKK)$'1a886 	MQCDDtKLLL ###Qs   E" ")FF$ $!Gc                     	 |                                   |                     |||           |                                  d S # t          $ r}|d }~ww xY wr&   )r   _loginRecords__addrR   r   r-   r=   r3   r?   errors        r.   r   zloginRecords.addX  s_    	JJLLLJJtVW---KKMMMMM 	 	 	K	   ?A 
AAAr   c                    t          j        |          \  }| _        | _        |dk    r"|dk    rt	          t          d                    t          | j                  }|                    | j                  \  }\  }}|dk    r|                    |          \  }\  }}	n|}	|dk    r|| _	        n|| _	        t          | j        |          \  }}
|dk     rt	          t          d          |z            t          | j        |
          \  }}|dk     rt	          t          d          |z            |st	          t          d          |z            t          | j        |
          \  }}|dk     rt	          t          d          |z            t          |          | _        t          |          | _        t           dk    r)|dk    r#t#          | j        |t%          |                     |dk    rt'          | j        ||           || _        n| j        | _        t+          | j        |
|          }|dk     rt	          t          d	          |z            t-          |
           t/          |           d S )
Nr   zRequires seuser or seranger   r4  r5  #Login mapping for %s is not definedzCould not query seuser for %srb   z%Could not modify login mapping for %s)rz   r9  r@   rB   r   r
   r:  r   r;  r?   r<  r   r=  semanage_seuser_querysemanage_seuser_get_mlsrangesemanage_seuser_get_senamer   rD  r   rE  r3   rF  rG  rH  rI  s                r.   __modifyzloginRecords.__modify`  s   /6/Ft/L/L,T^T_R< 	>GrM 	>Q;<<=== ++!(T^!<!<IR< 	")++f"5"5E<BFb= 	!"DLL DL,TWd;;Q6 	HQ>??$FGGG-dgq99V6 	]QSTTW[[\\\ 	NQDEELMMM'33Q6 	HQ>??$FGGG6q993A66a 	Kgm 	K(![5I5IJJJR< 	)&tw6::: DKK.DK)$'1a886 	PQFGG$NOOO ###Qr0   c                     	 |                                   |                     |||           |                                  d S # t          $ r}|d }~ww xY wr&   )r   _loginRecords__modifyrR   r   rQ  s        r.   modifyzloginRecords.modify  s_    	JJLLLMM$000KKMMMMM 	 	 	K	rS  c                    t          j        |          \  }| _        | _        t	          | j                  }|                    | j                  \  }\  }}t          | j        |          \  }}|dk     rt          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          }|dk     rt          t          d          |z            t          |           t          j        d          \  }| _        | _        |                    | j                  \  }\  }}	d S )Nr   r4  r5  rU  z<Login mapping for %s is defined in policy, cannot be deletedz%Could not delete login mapping for %s__default__)rz   r9  r@   rB   r:  r   r;  r<  r   r   r
   r=  semanage_seuser_exists_localsemanage_seuser_del_localrG  r3   r?   )
r-   r=   rJ  rK  r6   r   rA   rL  r   r>   s
             r.   __deletezloginRecords.__delete  s   /6/Ft/L/L,T^T_ ++!(T^!<!<I,TWd;;Q6 	HQ>??$FGGG-dgq99V6 	]QSTTW[[\\\ 	NQDEELMMM3DGQ??V6 	]QSTTW[[\\\ 	gQ]^^aeefff&tw226 	PQFGG$NOOO ###)0)@)O)O&T[$,%kk$+66|FFFr0   c                     	 |                                   |                     |           |                                  d S # t          $ r}|d }~ww xY wr&   )r   _loginRecords__deleterR   r   r-   r=   rR  s      r.   r  zloginRecords.delete  s[    	JJLLLMM$KKMMMMM 	 	 	K	s   =A 
AAAc                 @   t          | j                  \  }}|dk     rt          t          d                    	 |                                  |D ]$}|                     t          |                     %|                                  d S # t          $ r}|d }~ww xY wNr   Could not list login mappings)semanage_seuser_list_localr   r   r
   r   rc  semanage_seuser_get_namerR   r-   r   ulistrM  rR  s        r.   r   zloginRecords.deleteall  s    099U6 	AQ>??@@@	JJLLL ; ;6q99::::KKMMMMM 	 	 	K	s   AB 
BBBc                    i }t          j                    dz   | _        t          j        | j                  D ]\  }}}|| j        k    r|D ]}	 t          |dz   |z             }|                                                                                    d          }|	                                 |d         |d         |d         f||<   # t          $ r Y w xY w|S )Nz/logins/:rb   r   r   )rz   selinux_policy_rootlogins_pathr   walkopenreadrstripr   close
IndexError)r-   ddictr   dirsfilesr=   fdrJ  s           r.   get_all_loginszloginRecords.get_all_logins  s    "6889D!#)9!:!: 		 		D$t'' !  D!$*t"344 ggii..0066s;;


'*1vs1vs1v&>d%   s   A<C


CCr   c                 :   i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]3}t          |          }t          |          t          |          df||<   4|S )Nr   rg  r   )	rh  r   rk  semanage_seuser_listr   r
   ri  rX  rW  )r-   r   rw  r   rM  r=   s         r.   r   zloginRecords.get_all  s     	=9$'BBR3DG<<R6 	AQ>??@@@ 	` 	`A+A..D5a88:VWX:Y:Y[^_E$KKr0   c           	      T   g }|                      d          }t          |                                          D ]n}||         d         r7|                    d||         d         d||         d         d|           G|                    d||         d         d|           o|S )NTrb   z-a -s r    -r '' r\   r   r  keysr7   r-   r   rw  rL  s       r.   r   zloginRecords.customized      T""

%% 	; 	;AQx{ ;%(1+++uQx{{{AANOOOO%(1+++qq9::::r0   rb   c                    |                      |          }|                                 }t          |                                          }t          |                                          }t	          |          dk    rt	          |          dk    rd S t
          dk    r|rSt          dt          d          ddt          d          ddt          d          ddt          d	          d	           |D ]F}||         }t          |dd|d         ddt          |d                   dd|d
                    Gt	          |          rt          d| j	        z             |D ]F}||         }t          |dd|d         ddt          |d                   dd|d
                    Gd S |r2t          dt          d          ddt          d          dd           |D ]$}t          |dd||         d         d           %d S )Nr   rb   r   z
Login Name20r\   SELinux UserzMLS/MCS RangeServicer   z
Local customization in %sr   )
r   r{  r  r  r|   r   r   r
   r   rp  )	r-   r   r   rw  ldictlkeysr  rL  rM  s	            r.   r   zloginRecords.list  sI   Y''##%%uzz||$$ejjll##t99> 	c%jjAo 	FQ 	8 {AlOOOOOQ~EVEVEVEVEVXYZiXjXjXjXjXjlmnwlxlxlxlxyzzz Q Q!H1Q44441Q4!A$$OPPPP5zz H3d6FFGGG Q Q!H1Q44441Q4!A$$OPPPPQ Q  P1\?????An<M<M<M<M<MNOOO 8 8qqqq%(1+++677778 8r0   r&   )r   r   r	  r   )rU   rV   rW   r/   rP  r   r[  r\  rc  r  r   r{  r   r   r   rX   r0   r.   r0  r0    s           9  9  9 v  0  0  0  0 d   7 7 7<           8 8 8 8 8 8r0   r0  c                   p    e Zd ZddZd Zd Zd Zg dddfdZg dddfdZd	 Z	d
 Z
d ZddZd ZddZdS )r:  Nc                 <    t                               | |           d S r&   r   r   s     r.   r/   zseluserRecords.__init__  r   r0   c                    t          | j        |          \  }}|dk     rt          t          d          |z            t	          | j        |          \  }}|dk     rt          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            t          |          }t          | j        |          }t          |           t          |           ||fS )Nr   r4  -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   rL  r   rM  r?   r>   s           r.   r;  zseluserRecords.get  s   *47D99Q6 	HQ>??$FGGG+DGQ77V6 	XQNOORVVWWW%dgq11Q6 	FQ<==DEEE,Q//(!44q!!!1r0   c                    t           dk    r0|dk    rd}nt          |          }|dk    rd}nt          |          }t          |          dk     rt          t	          d          |z            t          | j        |          \  }}|dk     rt          t	          d          |z            t          | j        |          \  }}|dk     rt          t	          d          |z            |rt          t	          d          |z            t          | j                  \  }}	|dk     rt          t	          d	          |z            t          | j        |	|          }|dk     rt          t	          d
          |z            |D ]O}
t          | j        |	|
          }|dk     r1t          t	          d                              |
|                    Pt           dk    rvt          | j        |	|          }|dk     rt          t	          d          |z            t          | j        |	|          }|dk     rt          t	          d          |z            t          | j        |	|          }|dk     r1t          t	          d                              |
|                    t          | j        |	          \  }}|dk     rt          t	          d          |z            t!          | j        ||	          }|dk     rt          t	          d          |z            t#          |           t%          |	           | j                            d|d                    |          |           d S )Nrb   r   s0z%You must add at least one role for %sr   r4  r  z"SELinux user %s is already definedz$Could not create SELinux user for %sr7  z$Could not add role {role} for {name})r5   r=   r8  zCould not set MLS level for %sz(Could not add prefix {prefix} for {role})r5   prefixzCould not extract key for %szCould not add SELinux user %sseuserr4   )r3   r>   r?   )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   rD   r.  )r-   r=   rolesselevelr?   r  r   rL  r   rM  rr   s               r.   rN  zseluserRecords.__add%  s   Q 		/"} /%g.."} /%g..u::> 	PQFGG$NOOO*47D99Q6 	HQ>??$FGGG+DGQ77V6 	XQNOORVVWWW 	MQCDDtKLLL&tw//Q6 	OQEFFMNNN#DGQ556 	DQ:;;dBCCC 	f 	fA'A66BAv f #I!J!J!Q!QWX_c!Q!d!deeef Q 	M+DGQ@@BAv M #C!D!Dt!KLLL+DGQ@@BAv M #C!D!Dt!KLLL%dgq&996 	jQIJJQQWXagQhhiii-dgq99	S6 	GQ=>>EFFF'A666 	HQ>??$FGGGq!!!1
xSXXe__gVVVVVr0   c                     	 |                                   |                     |||||           |                                  d S # t          $ r!}| j                            d           |d }~ww xY wr   )r   _seluserRecords__addrR   r   r   r-   r=   r  r  r?   r  rR  s          r.   r   zseluserRecords.addb  sy    	JJLLLJJtUGWf===KKMMMMM 	 	 	Ja   K	   AA 
A0A++A0r   c           	      j   d}d}d                     |          }|dk    rbt          |          dk    rO|dk    rI|dk    rCt          dk    rt          t	          d                    t          t	          d                    t          | j        |          \  }	}
|	dk     rt          t	          d          |z            t          | j        |
          \  }	}|	dk     rt          t	          d          |z            |st          t	          d	          |z            t          | j        |
          \  }	}|	dk     rt          t	          d
          |z            t          |          }t          | j        |          \  }	}|	dk    rd                     |          }t          dk    r)|dk    r#t          | j        |t          |                     t          dk    r)|dk    r#t          | j        |t          |                     |dk    rt          | j        ||           t          |          dk    r8|D ]}||vrt          ||           |D ]}||vrt!          | j        ||           t#          | j        |
|          }	|	dk     rt          t	          d          |z            t%          |
           t'          |           d                     |                                          }d                     |                                          }| j                            d||||||           d S )Nr   r\   r   rb   z&Requires prefix, roles, level or rangezRequires prefix or rolesr4  r  SELinux user %s is not definedr  z Could not modify SELinux user %sr4   r  )r3   r@   r>   r?   rA   rB   )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  rA   rB   newrolesr   rL  r   rM  rlistr  r5   s                   r.   rY  zseluserRecords.__modifyk  sq   	
88E??R< 	@CJJ!O 	@2 	@'R- 	@" @ #K!L!LMMM #=!>!>???*47D99Q6 	HQ>??$FGGG+DGQ77V6 	XQNOORVVWWW 	IQ?@@4GHHH%dgq11Q6 	FQ<==DEEE/22
-dgq99U7 	(Ia 	Igm 	I&tw;w3G3GHHHa 	Igm 	I&tw;w3G3GHHHR< 	9$TWa888u::? 	: 1 1E> 1*1a000 : :E> :*47Aq999'A666 	KQABBTIJJJq!!!1xx(())HHY__..//	
xTSZfo  }G  	H  	H  	H  	H  	Hr0   c                     	 |                                   |                     |||||           |                                  d S # t          $ r!}| j                            d           |d }~ww xY wr   )r   _seluserRecords__modifyrR   r   r   r  s          r.   r\  zseluserRecords.modify  sy    	JJLLLMM$w@@@KKMMMMM 	 	 	Ja   K	r  c                    t          | j        |          \  }}|dk     rt          t          d          |z            t	          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            t          |          }t          | j        |          \  }}d	                    |          }t          | j        |          }|dk     rt          t          d          |z            t          |           t          |           | j                            d	|||
           d S )Nr   r4  r  r  z7SELinux user %s is defined in policy, cannot be deletedr  r4   z Could not delete SELinux user %sr  )r@   rB   rA   )r  r   r   r
   r  semanage_user_exists_localr  r  r  r.  semanage_user_del_localr  r  r   rH   )	r-   r=   r   rL  r   rM  rB   r  rA   s	            r.   ra  zseluserRecords.__delete  s   *47D99Q6 	HQ>??$FGGG+DGQ77V6 	XQNOORVVWWW 	IQ?@@4GHHH1$'1==V6 	XQNOORVVWWW 	bQXYY\``aaa%dgq11Q6 	FQ<==DEEE/22
-dgq99UHHUOO	$TWa006 	KQABBTIJJJq!!!1
h$:Ybcccccr0   c                     	 |                                   |                     |           |                                  d S # t          $ r!}| j                            d           |d }~ww xY wr   )r   _seluserRecords__deleterR   r   r   rd  s      r.   r  zseluserRecords.delete  sq    	JJLLLMM$KKMMMMM 	 	 	Ja   K	s   =A 
A,A''A,c                 t   t          | j                  \  }}|dk     rt          t          d                    	 |                                  |D ]$}|                     t          |                     %|                                  d S # t          $ r!}| j                            d           |d }~ww xY wrf  )	semanage_user_list_localr   r   r
   r   r  semanage_user_get_namerR   r   rj  s        r.   r   zseluserRecords.deleteall  s    .tw77U6 	AQ>??@@@	JJLLL 9 94Q778888KKMMMMM 	 	 	Ja   K	s   AB 
B7B22B7r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}t          |          }t          | j        |          \  }}|dk     rt	          t          d          |z            d                    |          }t          |          t          |          t          |          |f|t          |          <   |S )Nr   zCould not list SELinux usersz Could not list roles for user %sr\   )r  r   rk  semanage_user_listr   r
   r  r  r.  semanage_user_get_prefixsemanage_user_get_mlslevelr  )r-   r   rw  r   rM  r=   r  r  s           r.   r   zseluserRecords.get_all  s&    	;7@@R1$'::R6 	@Q=>>??? 	R 	RA)!,,D1$'1==KRAv O #E!F!F!MNNNHHUOOE0H0K0KMghiMjMj  mG  HI  mJ  mJ  LQ  0RE(++,,r0   c                    g }|                      d          }t          |                                          D ]}||         d         s||         d         rF|                    d||         d         d||         d         d||         d         d|           d|                    d	||         d         d|           |S )
NTrb   r   z-a -L z -r z -R 'r   r  z-a -R 'r  r  s       r.   r   zseluserRecords.customized  s    T""

%% 	= 	=AQx{ =eAhqk =aU1Xa[[[RWXYRZ[\R]R]R]_`_`abbbbE!HQKKK;<<<<r0   rb   c                    |                      |          }t          |          dk    rd S t          |                                          }t          dk    r|rt          ddddt          d          ddt          d	          ddt          d	          d
           t          t          d          ddt          d          ddt          d          ddt          d          d
dt          d          d
           |D ]m}t          |dd||         d         ddt          ||         d                   ddt          ||         d                   d
d||         d         	           nd S |r0t          t          d          ddt          d          d           |D ]#}t          |dd||         d                    $d S )Nr   rb   r   r   15r\   Labeling10zMLS/30r  Prefixz	MCS Levelz	MCS RangezSELinux Rolesr   r   )r   r|   r  r  r   r   r
   r   r-   r   r   rw  r  rL  s         r.   r   zseluserRecords.list  sY   Y''u::? 	Fejjll##Q 
	5 MRRRR:&					STU[S\S\S\S\]^^^.8I8I8I8I8I1X;;;;;XYZeXfXfXfXfXfhijuhvhvhvhvhvxy  {J  yK  yK  yK  yK  L  M  M  M D Daaaaq!iPUVWPXYZP[F\F\F\F\F\^ghmnohpqrhs^t^t^t^t^tv{|}v~  @A  wB  wB  C  D  D  D  DD D  Na&7&7&7&7&7?9K9K9K9KLMMM 5 5AAAAuQx{{344445 5r0   r&   r	  r   )rU   rV   rW   r/   r;  r  r   r  r\  r  r  r   r   r   r   rX   r0   r.   r:  r:    s       - - - -   ;W ;W ;Wz   $&r2b 6H 6H 6H 6Hp "$RB    d d dB       (  5 5 5 5 5 5r0   r:  c                   h    e Zd Zg ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZddZd ZddZdS )portRecordsNc                     t                               | |           	 t          t          t          j        t          j        d                    d         d                   | _        d S # t          $ r Y d S w xY w)N	port_typer   types)r   r/   r   r   r$  	ATTRIBUTEvalid_typesRuntimeErrorr   s     r.   r/   zportRecords.__init__  sx      t,,,	#Dx7I;)W)W$X$XYZ$[\c$deeD 	 	 	DD	s   A
A) )
A76A7c                    t           t          t          t          d}||                                v r	||         }nt          t          d                    |dk    rt          t          d                    t          |t                    r|	                    dd          }n|f}t          |          dk    rt          |d                   x}}n*t          |d                   }t          |d                   }|dk    rt          t          d	                    t          | j        |||          \  }}	|dk     r1t          t          d
                              ||                    |	|||fS )N)tcpudpsctpdccpz0Protocol has to be one of udp, tcp, dccp or sctpr   zPort is requiredr2   rb   r     zInvalid Portz)Could not create a key for {proto}/{port}protoport)SEMANAGE_PROTO_TCPSEMANAGE_PROTO_UDPSEMANAGE_PROTO_SCTPSEMANAGE_PROTO_DCCPr  r   r
   
isinstancer;   r   r|   intsemanage_port_key_creater   r  )
r-   r  r  	protocolsproto_dportshighlowr   rL  s
             r.   __genkeyzportRecords.__genkey!  sq   ..002 2	
 INN$$$ 	T&GGQQRRSSS2: 	4Q122333dC   	JJsA&&EEGEu::? 	!U1X&D33eAh--CuQx==D%< 	0Q~..///*47CwGGQ6 	lQJKKRRY^eiRjjkkk7C&&r0   c                 P   t           dk    r|dk    rd}nt          |          }|dk    rt          t          d                    t	          j        |          }|| j        vrt          t          d          |z            |                     ||          \  }}}}t          | j	        |          \  }	}
|	dk     r1t          t          d          
                    ||                    |
r1t          t          d	          
                    ||                    t          | j	                  \  }	}|	dk     r1t          t          d
          
                    ||                    t          ||           t          |||           t          | j	                  \  }	}|	dk     r1t          t          d          
                    ||                    t          | j	        |d          }	|	dk     r1t          t          d          
                    ||                    t!          | j	        |d          }	|	dk     r1t          t          d          
                    ||                    t#          | j	        ||          }	|	dk     r1t          t          d          
                    ||                    t           dk    rS|dk    rMt%          | j	        ||          }	|	dk     r1t          t          d          
                    ||                    t'          | j	        ||          }	|	dk     r1t          t          d          
                    ||                    t)          | j	        ||          }	|	dk     r1t          t          d          
                    ||                    t+          |           t-          |           t/          |           | j                            d|dt5          j        |          ddddd|d|           d S )Nrb   r   r  Type is required'Type %s is invalid, must be a port typer   1Could not check if port {proto}/{port} is definedr  z#Port {proto}/{port} already definedz(Could not create port for {proto}/{port}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}zresrc=port op=add lport= proto=
 tcontext=rn  )r   r   r   r
   r   get_real_type_namer  _portRecords__genkeysemanage_port_existsr   r  semanage_port_create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   rM   r   getprotobyname)r-   r  r  r?   r   rL  r  r  r  r   r   r   cons                r.   rN  zportRecords.__addA  s   Q 	/"} /%g..2: 	4Q122333*400t'' 	RQHIIDPQQQ"&--e"<"<GS$+DGQ77V6 	tQRSSZZafmqZrrsss 	fQDEELLSX_cLddeee&tw//Q6 	kQIJJQQX]dhQiijjj7+++3---+DG44	S6 	nQLMMTT[`gkTllmmm&twZ@@6 	xQVWW^^ejqu^vvwww&twZ@@6 	xQVWW^^ejqu^vvwww&twT::6 	xQVWW^^ejqu^vvwwwa 	Bgm 	B)$'3@@BAv B #`!a!a!h!hot{!h  "A  "A  B  B  B"47As336 	pQNOOVV]bimVnnooo'A666 	dQBCCJJQV]aJbbcccc"""q!!!1
\`\`\`bhbwx}b~b~b~b~  AK  AK  AK  MW  MW  MW  Y]  Y]  Y]  _f  _f  g  	h  	h  	h  	h  	hr0   c                     |                                   |                     ||||           |                                  d S r&   )r   _portRecords__addrR   )r-   r  r  r?   r   s        r.   r   zportRecords.add  s8    



4...r0   c                    |dk    rI|dk    rCt           dk    rt          t          d                    t          t          d                    t          j        |          }|r(|| j        vrt          t          d          |z            |                     ||          \  }}}}t          | j        |          \  }	}
|	dk     r1t          t          d          	                    ||                    |
s1t          t          d	          	                    ||                    t          | j        |          \  }	}|	dk     r1t          t          d
          	                    ||                    t          |          }t           dk    r,|dk    rd}n#t          | j        |t          |                     |dk    rt          | j        ||           t          | j        ||          }	|	dk     r1t          t          d          	                    ||                    t!          |           t#          |           | j                            d|dt)          j        |          ddddd|d|           d S )Nr   rb   Requires setype or serangeRequires setyper  r   r  r  "Port {proto}/{port} is not definedz#Could not query port {proto}/{port}r  z$Could not modify port {proto}/{port}zresrc=port op=modify lport=r  r  r  rn  r  )r   r   r
   r   r  r  r  r  r   r  semanage_port_querysemanage_port_get_conr  r   r  r  r  r  r   rM   r   r  )r-   r  r  r?   setyperL  r  r  r  r   r   r   r  s                r.   rY  zportRecords.__modify  s
   b= 	7Vr\ 	7" 7 #?!@!@AAA #4!5!5666,V44 	TfD$44 	TQHIIFRSSS"&--e"<"<GS$+DGQ77V6 	tQRSSZZafmqZrrsss 	eQCDDKKRW^bKccddd%dgq11Q6 	fQDEELLSX_cLddeee#A&&Q 	M"} M(#{77K7KLLLR< 	<%dgsF;;;'A666 	gQEFFMMTY`dMeefffq!!!1
_c_c_cekez  |A  fB  fB  fB  fB  DN  DN  DN  PZ  PZ  PZ  \b  \b  \b  dk  dk  l  	m  	m  	m  	m  	mr0   c                     |                                   |                     ||||           |                                  d S r&   )r   _portRecords__modifyrR   )r-   r  r  r?   r  s        r.   r\  zportRecords.modify  s8    

dE7F333r0   c           	         t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]	}t          |          }t          |          }t          |          }t          |          }|d|}| 	                    ||          \  }	}
}}|dk     rt          t          d          |z            t          | j        |	          }|dk     rt          t          d          |z            t          |	           ||k    r|}| j                            d|dt          j        |                     |                                  d S )Nr   zCould not list the portsr2   r4  zCould 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   rM   r   r  rR   )r-   r   plistr  r  	proto_strr  r  port_strrL  r  s              r.   r   zportRecords.deleteall  s~   .tw77U6 	<Q9::;;;

 	{ 	{D+D11E3E::I'--C)$//D"%##tt,H&*mmHi&H&H#QdAv P #B!C!Ch!NOOO(!44BAv O #A!B!BX!MNNN"1%%%d{ J!!!hhhX^XmnwXxXxXx"yzzzzr0   c                 ^   |                      ||          \  }}}}t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          }|dk     r1t          t	          d                              ||                    t          |           | j	        
                    d|dt          j        |                     d S )	Nr   r  r  r  z;Port {proto}/{port} is defined in policy, cannot be deletedz$Could not delete port {proto}/{port}r
  r  )r  r  r   r   r
   r  semanage_port_exists_localr  r  r   rM   r   r  )	r-   r  r  rL  r  r  r  r   r   s	            r.   ra  zportRecords.__delete  s   "&--e"<"<GS$+DGQ77V6 	tQRSSZZafmqZrrsss 	eQCDDKKRW^bKccddd1$'1==V6 	tQRSSZZafmqZrrsss 	~Q\]]ddkpw{d||}}}$TWa006 	gQEFFMMTY`dMeefffq!!!
$$$PVPefkPlPlPlmnnnnnr0   c                     |                                   |                     ||           |                                  d S r&   )r   _portRecords__deleterR   )r-   r  r  s      r.   r  zportRecords.delete  s4    

dE"""r0   r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]u}t          |          }t          |          }t          |          }t          |          }t          |          }	t          |          }
t          |          }||f||
||	f<   v|S )Nr   Could not list ports)r  r   r  semanage_port_listr   r
   r  semanage_context_get_typesemanage_context_get_mlsr  r  r  r  )r-   r   rw  r   r  r  ctypelevelr  r  r  r  s               r.   r   zportRecords.get_all  s     	;7@@R1$'::R6 	8Q566777J 	; 	;D'--C-c22E,S11E+D11E3E::I'--C)$//D-2ENE3i())r0   c                 \   i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}t          |          }t          |          }t          |          }t          |          }t          |          }	t          |          }
||f|                                vrg |||f<   |	|
k    r!|||f                             d|	z             |||f                             d|	|
fz             |S )Nr   r  z%dz%d-%d)r  r   r  r  r   r
   r  r  r  r  r  r  r  r7   )r-   r   rw  r   r  r  r  r  r  r  r  s              r.   get_all_by_typezportRecords.get_all_by_type  sK    	;7@@R1$'::R6 	8Q566777J 	H 	HD'--C-c22E+D11E3E::I'--C)$//Dy!5 /,.ui()d{ Hui()00<<<<ui()00C;1FGGGGr0   c                    g }|                      d          }t          |                                          D ]}|d         |d         k    r|d         n|d         d|d         }||         d         r@|                    d||         d         d||         d         d|d         d	|           }|                    d||         d         d
|d         d	|           |S )NTr   rb   r2   -a -t r  z' -p r   r\    -p r  r-   r   rw  rL  r  s        r.   r   zportRecords.customized  s    T""

%% 	J 	JAQ41Q4<C1Q44!add-CDQx{ JaU1Xa[[[RSTURVRVRVX\X\]^^^^aQqTTT44HIIIIr0   rb   c           	         |                      |          }t          |          dk    rd S t          |                                          }|rAt	          t          d          ddt          d          ddt          d          d           |D ]E}d	|z  }|d
||         d         z  z  }||         dd          D ]
}|d|z  z  }t	          |           Fd S )Nr   zSELinux Port Typer  r\   Proto8Port Numberr   z%-30s %-8s %srb   , %s)r   r|   r  r  r   r
   r-   r   r   rw  r  r   rJ  r   s           r.   r   zportRecords.list%  s    $$Y//u::? 	Fejjll## 	^q)<'='='='='=qzzzzz1]K[K[K[K[\]]] 	 	A!#C4%(1+%%C1Xabb\ " "vz!#JJJJ	 	r0   r&   r	  r   )rU   rV   rW   r  r/   r  r  r   r  r\  r   r  r  r   r   r   r   rX   r0   r.   r  r    s        K   ' ' '@>h >h >h@  
(m (m (mT  
  <o o o,  
   (   0	 	 	     r0   r  c                   h    e Zd Zg ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZddZd ZddZdS )ibpkeyRecordsNc                    t                               | |           	 t          t          t	          j        | j                            dg          }t          d |                                D                       | _	        d S #  Y d S xY w)Nibpkey_typeattrsc              3   4   K   | ]}t          |          V  d S r&   r;   r   s     r.   	<genexpr>z)ibpkeyRecords.__init__.<locals>.<genexpr><  s(      %B%Bc!ff%B%B%B%B%B%Br0   )
r   r/   r   r   r   get_store_policyr   r  resultsr  r-   r   qs      r.   r/   zibpkeyRecords.__init__8  s      t,,,	-(A$*(M(MNNWdVefffA%%B%Baiikk%B%B%BBBD	DD   A&B B
c                    |dk    rt          t          d                    |                    d          }t          |          dk    rt	          |d         d          x}}n,t	          |d         d          }t	          |d         d          }|dk    rt          t          d                    t          | j        |||          \  }}|dk     r1t          t          d                              ||	                    ||||fS )
Nr   zSubnet Prefix is requiredr2   rb   r   r  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   rL  s           r.   r  zibpkeyRecords.__genkey@  s   B 	=Q:;;<<<

3u::? 	$U1Xq)))D33eAh""CuQx##D%< 	0Q~..///,TWmS$OOQ6 	DQRSSZZiv  ~BZ  C  C  D  D  D=#t,,r0   c                    t           dk    r|dk    rd}nt          |          }|dk    rt          t          d                    t	          j        |          }|| j        vrt          t          d          |z            |                     ||          \  }}}}t          | j	        |          \  }}	|dk     r1t          t          d          
                    ||                    |	r1t          t          d	                              ||                    t          | j	                  \  }}
|dk     r1t          t          d
                              ||                    t          | j	        |
|           t          |
||           t          | j	                  \  }}|dk     r1t          t          d                              ||                    t!          | j	        |d          }|dk     r1t          t          d                              ||                    t#          | j	        |d          }|dk     r1t          t          d                              ||                    t%          | j	        ||          }|dk     r1t          t          d                              ||                    t           dk    rS|dk    rMt'          | j	        ||          }|dk     r1t          t          d                              ||                    t)          | j	        |
|          }|dk     r1t          t          d                              ||                    t+          | j	        ||
          }|dk     r1t          t          d                              ||                    t-          |           t/          |           t1          |
           d S )Nrb   r   r  r  )Type %s is invalid, must be a ibpkey typer   ;Could not check if ibpkey {subnet_prefix}/{pkey} is definedr;  z-ibpkey {subnet_prefix}/{pkey} already definedz2Could not create ibpkey for {subnet_prefix}/{pkey}z3Could 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_existsr   formnatr  semanage_ibpkey_create!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?   r   rL  r  r  r   r   r   r  s               r.   rN  zibpkeyRecords.__addS  s   Q 	/"} /%g..2: 	4Q122333*400t'' 	TQJKKdRSSS(,dM(J(J%M3-dgq99V6 	OQ\]]ee  uB  IMe  N  N  O  O  O 	@QNOOVVery}V~~(11Q6 	EQSTT[[jw  C[  D  D  E  E  E)$'1mDDD!!S$///+DG44	S6 	FQTUU\\kx  @D\  E  E  F  F  F&twZ@@6 	RQ`aahh  xE  LPh  Q  Q  R  R  R&twZ@@6 	RQ`aahh  xE  LPh  Q  Q  R  R  R&twT::6 	RQ`aahh  xE  LPh  Q  Q  R  R  Ra 	\gm 	\)$'3@@BAv \ #j!k!k!r!r  BO  VZ!r  "[  "[  \  \  \$TWa556 	JQXYY``o|  DH`  I  I  J  J  J)$'1a886 	~QLMMTTcpw{T||}}}c""" ###Qr0   c                     |                                   |                     ||||           |                                  d S r&   )r   _ibpkeyRecords__addrR   )r-   r=  r<  r?   r   s        r.   r   zibpkeyRecords.add  s8    



4666r0   c                    |dk    rI|dk    rCt           dk    rt          t          d                    t          t          d                    t          j        |          }|r(|| j        vrt          t          d          |z            |                     ||          \  }}}}t          | j        |          \  }}	|dk     r1t          t          d          	                    ||                    |	s1t          t          d	          	                    ||                    t          | j        |          \  }}
|dk     r1t          t          d
          	                    ||                    t          |
          }t           dk    r)|dk    r#t          | j        |t          |                     |dk    rt          | j        ||           t          | j        ||
          }|dk     r1t          t          d          	                    ||                    t!          |           t#          |
           d S )Nr   rb   r  r  rA  r   rB  r;  ,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  rC  rD  r   r  semanage_ibpkey_querysemanage_ibpkey_get_conr  r   r  rJ  rK  rL  )r-   r=  r<  r?   r  rL  r  r  r   r   r   r  s               r.   rY  zibpkeyRecords.__modify  sw   b= 	7Vr\ 	7" 7 #?!@!@AAA #4!5!5666,V44 	VfD$44 	VQJKKfTUUU(,dM(J(J%M3-dgq99V6 	NQ\]]dd  tA  HLd  M  M  N  N  N 	QMNNUUdqx|U}}~~~'33Q6 	@QNOOVVery}V~~%a((a 	Igm 	I$TWc;w3G3GHHHR< 	<%dgsF;;;)$'1a886 	AQOPPWWfsz~W  A  A  A ###Qr0   c                     |                                   |                     ||||           |                                  d S r&   )r   _ibpkeyRecords__modifyrR   )r-   r=  r<  r?   r  s        r.   r\  zibpkeyRecords.modify  s8    

dM7F;;;r0   c                 ^   t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]}t          | j        |          \  }}t          |          }t          |          }|d|}|                     ||          \  }}}}|dk     rt          t          d          |z            t          | j        |          }|dk     rt          t          d          |z            t          |           |                                  d S )Nr   zCould not list the ibpkeysr2   r4  zCould not delete the ibpkey %s)semanage_ibpkey_list_localr   r   r
   r   !semanage_ibpkey_get_subnet_prefixsemanage_ibpkey_get_lowsemanage_ibpkey_get_highrC  semanage_ibpkey_del_localrK  rR   )	r-   r   r  ibpkeyr<  r  r  pkey_strrL  s	            r.   r   zibpkeyRecords.deleteall  s5   099U6 	>Q;<<===

 	( 	(F"CDGV"T"TR)&11C+F33D"%##tt,H,0MM(M,R,R)QsDAv P #B!C!Ch!NOOO*47A66BAv Q #C!D!Dx!OPPP$Q''''r0   c                    |                      ||          \  }}}}t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          }|dk     r1t          t	          d                              ||                    t          |           d S )Nr   rB  r;  rP  zEibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deletedz.Could not delete ibpkey {subnet_prefix}/{pkey})	rC  rD  r   r   r
   r  semanage_ibpkey_exists_localrZ  rK  )r-   r=  r<  rL  r  r  r   r   s           r.   ra  zibpkeyRecords.__delete  s   (,dM(J(J%M3-dgq99V6 	NQ\]]dd  tA  HLd  M  M  N  N  N 	QMNNUUdqx|U}}~~~3DGQ??V6 	NQ\]]dd  tA  HLd  M  M  N  N  N 	XQfggnn  ~K  RVn  W  W  X  X  X&tw226 	AQOPPWWfsz~W  A  A  A #####r0   c                     |                                   |                     ||           |                                  d S r&   )r   _ibpkeyRecords__deleterR   )r-   r=  r<  s      r.   r  zibpkeyRecords.delete  s4    

dM***r0   r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]v}t          |          }t          |          }|dk    r't          |          }t          | j        |          \  }}t          |          }	t          |          }
||f||	|
|f<   w|S )Nr   Could not list ibpkeysreserved_ibpkey_t)rV  r   r  semanage_ibpkey_listr   r
   rR  r  r  rW  rX  rY  )r-   r   rw  r   r[  r  r  r  r<  r  r  s              r.   r   zibpkeyRecords.get_all  s     	=9$'BBR3DG<<R6 	:Q788999j 		? 		?F)&11C-c22E++ ,S11E"CDGV"T"TR)&11C+F33D16E3m,--r0   c                 P   i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}t          |          }t          |          }t          | j        |          \  }}t          |          }t          |          }	||f|                                vrg |||f<   ||	k    r!|||f                             d|z             |||f                             d||	fz             |S )Nr   rb  0x%xz	0x%x-0x%x)rV  r   r  rd  r   r
   rR  r  rW  rX  rY  r  r7   )
r-   r   rw  r   r[  r  r  r<  r  r  s
             r.   r   zibpkeyRecords.get_all_by_type  sG    	=9$'BBR3DG<<R6 	:Q788999j 	P 	PF)&11C-c22E"CDGV"T"TR)&11C+F33D}%UZZ\\9 302um,-d{ Pum,-44Vc\BBBBum,-44[C;5NOOOOr0   c                    g }|                      d          }t          |                                          D ]}|d         |d         k    r|d         n|d         d|d         }||         d         r@|                    d||         d         d||         d         d|d         d	|           }|                    d||         d         d
|d         d	|           |S )NTr   rb   r2   r"  r  z' -x r   r\   z -x r  r$  s        r.   r   zibpkeyRecords.customized  s    T""

%% 	J 	JAQ41Q4<C1Q44!add-CDQx{ JaU1Xa[[[RSTURVRVRVX\X\]^^^^aQqTTT44HIIIIr0   rb   c           	         |                      |          }|                                }t          |          dk    rd S |rAt          t	          d          ddt	          d          ddt	          d          d           t          |          D ]E}d	|z  }|d
||         d         z  z  }||         dd          D ]
}|d|z  z  }t          |           Fd S )Nr   zSELinux IB Pkey Typer  r\   Subnet_Prefix18zPkey Numberr   %-30s %-18s r)  rb   r*  r   r  r|   r   r
   r  r+  s           r.   r   zibpkeyRecords.list)  s   $$Y//zz||t99> 	F 	j*@(A(A(A(A(A1_CUCUCUCUCUWXYfWgWgWgWghiii 	 	A 1$C4%(1+%%C1Xabb\ " "vz!#JJJJ	 	r0   r&   r	  r   )rU   rV   rW   r  r/   rC  rN  r   rT  r\  r   r`  r  r   r   r   r   rX   r0   r.   r-  r-  4  s        K   - - -&<  <  < |  
$  $  $ L  
  .$ $ $(  
   *   .
 
 
     r0   r-  c                   h    e Zd Zg ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZddZd ZddZdS )ibendportRecordsNc                    t                               | |           	 t          t          t	          j        | j                            dg          }t          d |                                D                       | _	        d S #  Y d S xY w)Nibendport_typer0  c              3   4   K   | ]}t          |          V  d S r&   r3  r   s     r.   r4  z,ibendportRecords.__init__.<locals>.<genexpr>@  s(      "?"?a3q66"?"?"?"?"?"?r0   )
r   r/   r   r   r   r5  r   setr6  r  r7  s      r.   r/   zibendportRecords.__init__<  s      t,,,	-(A$*(M(MNNWgVhiiiA""?"?199;;"?"?"???D	DDr9  c                 ^   |dk    rt          t          d                    t          |          }|dk    s|dk     rt          t          d                    t          | j        ||          \  }}|dk     r1t          t          d                              ||                    |||fS )	Nr   zIB device name is required   rb   zInvalid Port Numberr   z=Could not create a key for ibendport {ibdev_name}/{ibendport}
ibdev_name	ibendport)r   r
   r  semanage_ibendport_key_creater   r  )r-   rw  rv  r  r   rL  s         r.   r  zibendportRecords.__genkeyD  s     	>Q;<<===9~~#: 	7 	7Q455666/TJJQ6 	TQ^__ffr|  IRf  S  S  T  T  T:t$$r0   c                    t           dk    r|dk    rd}nt          |          }|dk    rt          t          d                    t	          j        |          }|| j        vrt          t          d          |z            |                     ||          \  }}}t          | j	        |          \  }}|dk     r1t          t          d          
                    ||                    |r1t          t          d	          
                    ||                    t          | j	                  \  }}	|dk     r1t          t          d
          
                    ||                    t          | j	        |	|           t          |	|           t          | j	                  \  }}
|dk     r1t          t          d          
                    ||                    t          | j	        |
d          }|dk     r1t          t          d          
                    ||                    t!          | j	        |
d          }|dk     r1t          t          d          
                    ||                    t#          | j	        |
|          }|dk     r1t          t          d          
                    ||                    t           dk    rS|dk    rMt%          | j	        |
|          }|dk     r1t          t          d          
                    ||                    t'          | j	        |	|
          }|dk     r1t          t          d          
                    ||                    t)          | j	        ||	          }|dk     r1t          t          d          
                    ||                    t+          |
           t-          |           t/          |	           d S )Nrb   r   r  r  -Type %s is invalid, must be an ibendport typer   z;Could not check if ibendport {ibdev_name}/{port} is definedrv  r  z-ibendport {ibdev_name}/{port} already definedz2Could not create ibendport for {ibdev_name}/{port}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_existsr   r  semanage_ibendport_create!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-   rw  rv  r?   r   rL  r  r   r   r   r  s              r.   rN  zibendportRecords.__addR  sq   Q 	/"} /%g..2: 	4Q122333*400t'' 	XQNOORVVWWW#}}Y
CCIt0!<<V6 	HQ\]]ddpz  BFd  G  G  H  H  H 	zQNOOVVblswVxxyyy+DG44Q6 	QSTT[[gqx|[}}~~~)$'1jAAA#At,,,+DG44	S6 	|QPQQXXdnuyXzz{{{&twZ@@6 	LQ`aahht~  FJh  K  K  L  L  L&twZ@@6 	LQ`aahht~  FJh  K  K  L  L  L&twT::6 	LQ`aahht~  FJh  K  K  L  L  La 	Vgm 	V)$'3@@BAv V #j!k!k!r!r  I  PT!r  "U  "U  V  V  V'C886 	DQXYY``lv  ~B`  C  C  D  D  D,TWa;;6 	xQLMMTT`jquTvvwwwc"""#A&&&"""""r0   c                     |                                   |                     ||||           |                                  d S r&   )r   _ibendportRecords__addrR   )r-   rw  rv  r?   r   s        r.   r   zibendportRecords.add  s8    



9j'4888r0   c                    |dk    rI|dk    rCt           dk    rt          t          d                    t          t          d                    t          j        |          }|r(|| j        vrt          t          d          |z            |                     ||          \  }}}t          | j        |          \  }}|dk     r1t          t          d          	                    ||                    |s1t          t          d	          	                    ||                    t          | j        |          \  }}	|dk     r1t          t          d
          	                    ||                    t          |	          }
t           dk    r)|dk    r#t          | j        |
t          |                     |dk    rt          | j        |
|           t          | j        ||	          }|dk     r1t          t          d          	                    ||                    t!          |           t#          |	           d S )Nr   rb   r  r  rz  r   @Could not check if ibendport {ibdev_name}/{ibendport} is definedru  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-   rw  rv  r?   r  rL  r  r   r   r   r  s              r.   rY  zibendportRecords.__modify  s   b= 	7Vr\ 	7" 7 #?!@!@AAA #4!5!5666,V44 	ZfD$44 	ZQNOORXXYYY $i D DJ0!<<V6 	WQabbiiu  LUi  V  V  W  W  W 	HQRSSZZfp  }FZ  G  G  H  H  H*47A66Q6 	IQSTT[[gq  ~G[  H  H  I  I  I(++a 	Igm 	I$TWc;w3G3GHHHR< 	<%dgsF;;;,TWa;;6 	JQTUU\\hr  H\  I  I  J  J  J#A&&&"""""r0   c                     |                                   |                     ||||           |                                  d S r&   )r   _ibendportRecords__modifyrR   )r-   rw  rv  r?   r  s        r.   r\  zibendportRecords.modify  s8    

iWf===r0   c                    t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]}t          | j        |          \  }}t          |          }|                     t          |          |          \  }}}|dk     r1t          t          d          	                    ||                    t          | j        |          }|dk     r1t          t          d          	                    ||                    t          |           |                                  d S )Nr   zCould 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  rw  rv  r  rL  s          r.   r   zibendportRecords.deleteall  sP   3DG<<U6 	AQ>??@@@

 
	+ 
	+I@)TTR.y99D$(MM#d))Z$H$H!Q
DAv  #S!T!T![![gqx|![!}!}~~~-dgq99BAv C #W!X!X!_!_ku  }A!_  "B  "B  C  C  C'****r0   c                    |                      ||          \  }}}t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          \  }}|dk     r1t          t	          d                              ||                    |s1t          t	          d                              ||                    t          | j        |          }|dk     r1t          t	          d                              ||                    t          |           d S )Nr   r  ru  r  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-   rw  rv  rL  r  r   r   s          r.   ra  zibendportRecords.__delete  s    $i D DJ0!<<V6 	WQabbiiu  LUi  V  V  W  W  W 	HQRSSZZfp  }FZ  G  G  H  H  H6twBBV6 	WQabbiiu  LUi  V  V  W  W  W 	aQkllss  @J  V_s  `  `  a  a  a)$'1556 	JQTUU\\hr  H\  I  I  J  J  J#A&&&&&r0   c                     |                                   |                     ||           |                                  d S r&   )r   _ibendportRecords__deleterR   )r-   rw  rv  s      r.   r  zibendportRecords.delete  s4    

i,,,r0   r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]f}t          |          }t          |          }|dk    r't          |          }t          | j        |          \  }}t          |          }	||f||	|f<   g|S )Nr   Could not list ibendportsreserved_ibendport_t)r  r   r  semanage_ibendport_listr   r
   r  r  r  r  r  )
r-   r   rw  r   rw  r  r  r  rv  r  s
             r.   r   zibendportRecords.get_all  s     	@<TWEER6tw??R6 	=Q:;;<<< 	7 	7I,Y77C-c22E.. ,S11E@)TTR.y99D).E4$%%r0   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}t          |          }t          |          }t          | j        |          \  }}t          |          }||f|
                                vrg |||f<   |||f                             d|z             |S )Nr   r  rf  )r  r   r  r  r   r
   r  r  r  r  r  r7   )	r-   r   rw  r   rw  r  r  rv  r  s	            r.   r   z ibendportRecords.get_all_by_type  s    	@<TWEER6tw??R6 	=Q:;;<<< 	= 	=I,Y77C-c22E@)TTR.y99Dz"%**,,6 0-/uj)*5*%&--ftm<<<<r0   c                    g }|                      d          }t          |                                          D ]}||         d         rF|                    d||         d         d||         d         d|d         d|d                    V|                    d||         d         d|d         d|d                    |S )	NTrb   r"  r   r  z' -z r\   z -z r  r  s       r.   r   zibendportRecords.customized  s    T""

%% 	J 	JAQx{ JaU1Xa[[[RSTURVRVRVXYZ[X\X\]^^^^aQqTTT1Q44HIIIIr0   rb   c           	         |                      |          }|                                }t          |          dk    rd S |rAt          t	          d          ddt	          d          ddt	          d          d           t          |          D ]E}d	|z  }|d
||         d         z  z  }||         dd          D ]
}|d|z  z  }t          |           Fd S )Nr   zSELinux IB End Port Typer  r\   zIB Device Namerj  r(  r   rk  r)  rb   r*  rl  r+  s           r.   r   zibendportRecords.list  s   $$Y//zz||t99> 	F 	o*D(E(E(E(E(EqIYGZGZGZGZGZ\]^k\l\l\l\lmnnn 	 	A 1$C4%(1+%%C1Xabb\ " "vz!#JJJJ	 	r0   r&   r	  r   )rU   rV   rW   r  r/   r|  r  r   r  r\  r   r  r  r   r   r   r   rX   r0   r.   rn  rn  8  s        K   % % %;# ;# ;#z  
$# $# $#L  
  *' ' '(  
   (   &	 	 	     r0   rn  c                   `    e Zd Zg ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd ZddZdS )nodeRecordsNc                    t                               | |           ddg| _        	 t          t          t	          j        t          j        d                    d         d                   | _        d S # t          $ r Y d S w xY w)Nipv4ipv6	node_typer   r  )	r   r/   protocolr   r   r$  r  r  r  r   s     r.   r/   znodeRecords.__init__2  s      t,,,(	#Dx7I;)W)W$X$XYZ$[\c$deeD 	 	 	DD	s   A
A2 2
B ?B c                 @   |}|}d}|dk    rt          t          d                    t          |          dk    s|d         dk    rIt          j        ||z             }t          |j                  }t          |j                  }d|j        z  }	 | j	        
                    |          }n!#  t          t          d                    xY w	 t          j        |          }n6#  |dk    rt          j        }nt          t          d                    Y nxY w||||fS )Nr   zNode Address is requiredr   rm  zipv%dzUnknown or missing protocolr  )r   r
   r|   	ipaddress
ip_networkr;   network_addressnetmaskversionr  indexr   r  IPPROTO_IPIP)	r-   addrmaskr  newaddrnewmasknewprotocolr   audit_protocols	            r.   validateznodeRecords.validate:  s;   2: 	<Q9::;;; t99> 	+T!W^ 	+$TD[11A!+,,G!)nnG*H	?---h77KK	?Q<==>>>
	C#28<<NN	C
 F" C!'!4 #@!A!ABBB  n<<s   B- -CC$ $1Dc                    |                      |||          \  }}}}t          dk    r|dk    rd}nt          |          }|dk    rt          t	          d                    t          j        |          }|| j        vrt          t	          d          |z            t          | j	        |||          \  }}|dk     rt          t	          d          |z            t          | j	        |          \  }}	|dk     rt          t	          d          |z            |	rt          t	          d	          |z            t          | j	                  \  }}
|dk     rt          t	          d
          |z            t          |
|           t          | j	        |
||          }t          | j	                  \  }}|dk     rt          t	          d          |z            t          | j	        |
||          }|dk     rt          t	          d          |z            t!          | j	        |d          }|dk     rt          t	          d          |z            t#          | j	        |d          }|dk     rt          t	          d          |z            t%          | j	        ||          }|dk     rt          t	          d          |z            t          dk    rA|dk    r;t'          | j	        ||          }|dk     rt          t	          d          |z            t)          | j	        |
|          }|dk     rt          t	          d          |z            t+          | j	        ||
          }|dk     rt          t	          d          |z            t-          |           t/          |           t1          |
           | j                            d|d|d|ddddd|d|           d S )Nrb   r   r  zSELinux 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 definedzAddr %s already definedzCould not create addr for %sCould not create context for %szCould 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 %szCould not add addr %szresrc=node op=add laddr=	 netmask=r  r  rn  )r  r   r   r   r
   r   r  r  semanage_node_key_creater   semanage_node_exists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   rL  r   noder  s               r.   rN  znodeRecords.__add\  su   )-tT5)I)I&dE;Q 	/"} /%g..B; 	AQ>??@@@+E22(( 	SQHIIEQRRR*47D$FFQ6 	FQ<==DEEE+DGQ77V6 	PQFGG$NOOO 	BQ899D@AAA)$'22
T6 	GQ=>>EFFFe,,,#DGT5$??+DG44	S6 	JQ@AADHIII#DGT5$??6 	DQ:;;dBCCC&twZ@@6 	TQJKKdRSSS&twZ@@6 	TQJKKdRSSS&twU;;6 	TQJKKdRSSSa 	^gm 	^)$'3@@BAv ^ #T!U!UX\!\]]]"47D#666 	LQBCCdJKKK'D996 	@Q677$>???c"""q!!!4   
gkgkgkmqmqmqs~s~s~  AK  AK  AK  MW  MW  MW  Y^  Y^  Y^  `g  `g  h  	i  	i  	i  	i  	ir0   c                     |                                   |                     |||||           |                                  d S r&   )r   _nodeRecords__addrR   )r-   r  r  r  r?   r  s         r.   r   znodeRecords.add  s:    



4ugu555r0   c                    |                      |||          \  }}}}|dk    r"|dk    rt          t          d                    t          j        |          }|r(|| j        vrt          t          d          |z            t          | j        |||          \  }}|dk     rt          t          d          |z            t          | j        |          \  }}	|dk     rt          t          d          |z            |	st          t          d          |z            t          | j        |          \  }}
|dk     rt          t          d          |z            t          |
          }t          d	k    r)|dk    r#t          | j        |t          |                     |dk    rt          | j        ||           t          | j        ||
          }|dk     rt          t          d
          |z            t!          |           t#          |
           | j                            d|d|d|ddddd|d|           d S )Nr   r  r  r   r  r  Addr %s is not definedzCould not query addr %srb   zCould not modify addr %szresrc=node op=modify laddr=r  r  r  r  rn  r  )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?   r  r  r   rL  r   r  r  s               r.   rY  znodeRecords.__modify  s   )-tT5)I)I&dE;b= 	>Vr\ 	>Q;<<===,V44 	TfD$44 	TQHIIFRSSS*47D$FFQ6 	FQ<==DEEE+DGQ77V6 	PQFGG$NOOO 	AQ7884?@@@(!44
T6 	BQ899D@AAA#D))a 	Igm 	I$TWc;w3G3GHHHR< 	<%dgsF;;;'D996 	CQ9::TABBBq!!!4   
jnjnjnptptpt  wB  wB  wB  DN  DN  DN  PZ  PZ  PZ  \b  \b  \b  dk  dk  l  	m  	m  	m  	m  	mr0   c                     |                                   |                     |||||           |                                  d S r&   )r   _nodeRecords__modifyrR   )r-   r  r  r  r?   r  s         r.   r\  znodeRecords.modify  s:    

dD%&999r0   c                    |                      |||          \  }}}}t          | j        |||          \  }}|dk     rt          t	          d          |z            t          | j        |          \  }}|dk     rt          t	          d          |z            |st          t	          d          |z            t          | j        |          \  }}|dk     rt          t	          d          |z            |st          t	          d          |z            t          | j        |          }|dk     rt          t	          d          |z            t          |           | j	        
                    d|d|d	|           d S )
Nr   r  r  r  z/Addr %s is defined in policy, cannot be deletedzCould not delete addr %szresrc=node op=delete laddr=r  r  )r  r  r   r   r
   r  semanage_node_exists_localsemanage_node_del_localr  r   rM   )r-   r  r  r  r  r   rL  r   s           r.   ra  znodeRecords.__delete  s   )-tT5)I)I&dE;*47D$FFQ6 	FQ<==DEEE+DGQ77V6 	PQFGG$NOOO 	AQ7884?@@@1$'1==V6 	PQFGG$NOOO 	ZQPQQTXXYYY$TWa006 	CQ9::TABBBq!!!
UYUYUY[_[_[_alalmnnnnnr0   c                     |                                   |                     |||           |                                  d S r&   )r   _nodeRecords__deleterR   )r-   r  r  r  s       r.   r  znodeRecords.delete  s6    

dD%(((r0   c           	         t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]c}|                     t          | j        |          d         t          | j        |          d         | j        t          |                              d| 
                                 d S )Nr   z!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   znodeRecords.deleteall  s    .tw77U6 	EQBCCDDD

 	\ 	\DMM0$??BDZ[_[bdhDiDijkDlnrn{  }T  UY  }Z  }Z  o[  \  \  \  \r0   r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}t          |          }t          | j        |          }t          | j        |          }| j	        t          |                   }t          |          t          |          t          |          t          |          f||d         |d         |f<   |S )Nr   zCould not list addrsrb   )r  r   ilistsemanage_node_listr   r
   r  r  r  r  r  semanage_context_get_usersemanage_context_get_roler  r  )	r-   r   rw  r   r  r  r  r  r  s	            r.   r   znodeRecords.get_all   s*    	;7@@R1$'::R6 	8Q566777J 	o 	oD'--C)$'488D)$'488DM"9$"?"?@E0I#0N0NPijmPnPn  qJ  KN  qO  qO  Qi  jm  Qn  Qn  0oE47DGU+,,r0   c                    g }|                      d          }t          |                                          D ]}||         d         rO|                    d|d         d|d         d||         d         d||         d         d	|d
         
           _|                    d|d         d|d         d||         d         d|d
                    |S )NTr   z-a -M rb   r#  r    -t r  r  r   r\   r  r  s       r.   r   znodeRecords.customized  s    T""

%% 	V 	VAQx{ VadddAaDDD%PQ(ST+++W\]^W_`aWbWbWbdefgdhdhijjjjadddAaDDD%(1+++qQRttTUUUUr0   rb   c                    |                      |          }t          |          dk    rd S t          |                                          }|rt	          ddz             t
          r|D ]}d}|D ]}|dz   t          |          z   }t	          |d         dd|d         dd|d	         d
d||         d         d||         d         d||         d	         dt          ||         d         d          d           d S |D ]\}t	          |d         dd|d         dd|d	         d
d||         d         d||         d         d||         d	         d           ]d S )Nr   z%-18s %-18s %-5s %-5s
)z
IP AddressNetmaskProtocolContextr   	rj  r\   rb   r   r   rn  r   F)r   r|   r  r  r   r   r;   r   )r-   r   r   rw  r  rL  valfieldss           r.   r   znodeRecords.list  s   Y''u::? 	Fejjll## 	`+.^^___ 	p R R 3 3F*s6{{2CC1qttttQqTTTT5QR8TU;;;X]^_X`abXcXcXcejklemnoepepepr{  }B  CD  }E  FG  }H  JO  sP  sP  sP  sP  Q  R  R  R  R	R R  p paddddAaDDDD!A$$$$aQRUZ[\U]^_U`U`U`bghibjklbmbmbmnoooop pr0   r&   r	  r   )rU   rV   rW   r  r/   r  r  r   r  r\  r  r  r   r   r   r   rX   r0   r.   r  r  .  s        K    =  =  =DFi Fi FiP  
&m &m &mP  
o o o6  
     $  p p p p p pr0   r  c                   V    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
ddZd ZddZdS )interfaceRecordsNc                 <    t                               | |           d S r&   r   r   s     r.   r/   zinterfaceRecords.__init__1  r   r0   c                    t           dk    r|dk    rd}nt          |          }|dk    rt          t          d                    t	          | j        |          \  }}|dk     rt          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |rt          t          d          |z            t          | j                  \  }}|dk     rt          t          d	          |z            t          | j        ||          }t          | j                  \  }}|dk     rt          t          d
          |z            t          | j        |d          }|dk     rt          t          d          |z            t          | j        |d          }|dk     rt          t          d          |z            t          | j        ||          }|dk     rt          t          d          |z            t           dk    rA|dk    r;t          | j        ||          }|dk     rt          t          d          |z            t          | j        ||          }|dk     rt          t          d          |z            t          | j        ||          }|dk     rt          t          d          |z            t!          | j        ||          }|dk     rt          t          d          |z            t#          |           t%          |           t'          |           | j                            d|ddddd|d|
           d S )Nrb   r   r  SELinux Type is requiredr   r  *Could not check if interface %s is definedzInterface %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 %szCould not add interface %szresrc=interface op=add netif=r  rn  )r   r   r   r
   semanage_iface_key_creater   semanage_iface_exists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?   r  r   rL  r   ifacer  s	            r.   rN  zinterfaceRecords.__add4  s   Q 	/"} /%g..B; 	<Q9::;;;+DGY??Q6 	KQ<==	IJJJ,TWa88V6 	ZQKLLyXYYY 	LQ=>>JKKK+DG44U6 	QQBCCiOPPP$TWeY??+DG44	S6 	OQ@AAIMNNN&twZ@@6 	^QOPPS\\]]]&twZ@@6 	^QOPPS\\]]]&twU;;6 	^QOPPS\\]]]a 	hgm 	h)$'3@@BAv h #Y!Z!Z]f!fggg%dguc::6 	VQGHH9TUUU&tws;;6 	TQEFFRSSS(!U;;6 	JQ;<<yHIIIc""""""E"""
XaXaXacmcmcmoyoyoy  |A  |A  |A  CJ  CJ  K  	L  	L  	L  	L  	Lr0   c                     |                                   |                     |||           |                                  d S r&   )r   _interfaceRecords__addrR   )r-   r  r?   r  s       r.   r   zinterfaceRecords.addt  s6    



9gu---r0   c                    |dk    r"|dk    rt          t          d                    t          | j        |          \  }}|dk     rt          t          d          |z            t	          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            t          |          }t          dk    r)|dk    r#t          | j        |t          |                     |dk    rt          | j        ||           t          | j        ||          }|dk     rt          t          d	          |z            t          |           t          |           | j                            d
|ddddd|d|
           d S )Nr   r  r   r  r  Interface %s is not definedzCould not query interface %srb   zCould not modify interface %sz resrc=interface op=modify netif=r  r  rn  r  )r   r
   r  r   r  semanage_iface_querysemanage_iface_get_ifconr   r  r   r  r  r  r  r   rM   )	r-   r  r?   r  r   rL  r   r  r  s	            r.   rY  zinterfaceRecords.__modifyy  s:   b= 	>Vr\ 	>Q;<<===+DGY??Q6 	KQ<==	IJJJ,TWa88V6 	ZQKLLyXYYY 	KQ<==	IJJJ*47A66U6 	LQ=>>JKKK&u--a 	Igm 	I$TWc;w3G3GHHHR< 	<%dgsF;;;(!U;;6 	MQ>??)KLLL"""E"""
[d[d[dfpfpfpr|r|r|  E  E  E  GN  GN  O  	P  	P  	P  	P  	Pr0   c                     |                                   |                     |||           |                                  d S r&   )r   _interfaceRecords__modifyrR   )r-   r  r?   r  s       r.   r\  zinterfaceRecords.modify  s6    

i&111r0   c                    t          | j        |          \  }}|dk     rt          t          d          |z            t	          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d          |z            t          | j        |          }|dk     rt          t          d          |z            t          |           | j        	                    d|z             d S )Nr   r  r  r  z4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s)
r  r   r   r
   r  semanage_iface_exists_localsemanage_iface_del_localr  r   rM   )r-   r  r   rL  r   s        r.   ra  zinterfaceRecords.__delete  sq   +DGY??Q6 	KQ<==	IJJJ,TWa88V6 	ZQKLLyXYYY 	KQ<==	IJJJ247A>>V6 	ZQKLLyXYYY 	dQUVVYbbccc%dgq116 	MQ>??)KLLL"""
BYNOOOOOr0   c                     |                                   |                     |           |                                  d S r&   )r   _interfaceRecords__deleterR   )r-   r  s     r.   r  zinterfaceRecords.delete  s2    

i   r0   c                    t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]$}|                     t          |                     %|                                  d S )Nr   z(Could not delete all interface  mappings)semanage_iface_list_localr   r   r
   r   r  semanage_iface_get_namerR   )r-   r   rk  r   s       r.   r   zinterfaceRecords.deleteall  s    /88U6 	LQIJJKKK

 	6 	6AMM1!445555r0   r   c                    i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ][}t          |          }t          |          t          |          t          |          t          |          f|t          |          <   \|S )Nr   zCould not list interfaces)r  r   r  semanage_iface_listr   r
   r  r  r  r  r  r  )r-   r   rw  r   r  r  s         r.   r   zinterfaceRecords.get_all  s     	<8AAR247;;R6 	=Q:;;<<< 	x 	xI*955C9RSV9W9WYrsvYwYw  zS  TW  zX  zX  Zr  sv  Zw  Zw  9xE))4455r0   c           	      T   g }|                      d          }t          |                                          D ]n}||         d         r7|                    d||         d         d||         d         d|           G|                    d||         d         d|           o|S )NTr   r"  r   r  r  r\   r  r  s       r.   r   zinterfaceRecords.customized  r  r0   rb   c                 `   |                      |          }t          |          dk    rd S t          |                                          }|r0t	          t          d          ddt          d          d           t          rd|D ]_}t	          |dd||         d         d||         d         d||         d	         dt          ||         d
         d          d
           `d S |D ]B}t	          |dd||         d         d||         d         d||         d	         d           Cd S )Nr   zSELinux Interfacer  r\   r  r   rn  rb   r   r   F)r   r|   r  r  r   r
   r   r   r  s         r.   r   zinterfaceRecords.list  sh   Y''u::? 	Fejjll## 	I!$7"8"8"8"8"8!I,,,,GHHH 	V x xaaaaq!eAhqkkk5QR8TU;;;XabghibjklbmotXuXuXuXuvwwwwx x  V V1111eAhqkkk58A;;;aQRTUUUUV Vr0   r&   r	  r   )rU   rV   rW   r/   r  r   r  r\  r  r  r   r   r   r   rX   r0   r.   r  r  /  s        - - - ->L >L >L@  
 P  P  PD  
P P P2  
       V V V V V Vr0   r  c                   ~    e Zd Zg ZddZd Zd Zd ZddZd Z	dd
Z
ddZd Zd Zd Zd Zd ZddZd ZddZdS )fcontextRecordsNc           
         t                               | |           	 t          t          t          j        t          j        d                    d         d                   | _        | xj        t          t          t          j        t          j        d                    d         d                   z  c_        n# t          $ r Y nw xY wi | _        i | _	        d| _
        	 t          t          j                    d          }|                                D ]a}|                                }t!          |          dk    r*|                    d          r@|                                \  }}|| j        |<   b|                                 n# t(          $ r Y nw xY w	 t          t          j                    d          }|                                D ]a}|                                }t!          |          dk    r*|                    d          r@|                                \  }}|| j	        |<   b|                                 d S # t(          $ r Y d S w xY w)N	file_typer   r  device_nodeFr  #)r   r/   r   r   r$  r  r  r  equiv
equiv_dist	equal_indrr  rz   selinux_file_context_subs_path	readlinesstripr|   r  r   ru  IOError#selinux_file_context_subs_dist_path)r-   r   rz  r   target
substitutes         r.   r/   zfcontextRecords.__init__  sG     t,,,	#Dx7I;)W)W$X$XYZ$[\c$deeDT(-8JM*Z*Z%[%[\]%^_f%g h hh 	 	 	D	 
	g<>>DDB\\^^ 0 0GGIIq66Q; <<$$ %&WWYY"
%/
6""HHJJJJ 	 	 	D		gACCSIIB\\^^ 5 5GGIIq66Q; <<$$ %&WWYY"
*4''HHJJJJJ 	 	 	DD	s8   BB; ;
CC!B+F 
FFB+I 
IIc                    | j         rt          j                    }d|z  }t          |d          }| j                                        D ](}|                    |d| j        |         d           )|                                 	 t          j	        |t          j
        |          t          j                            n#  Y nxY wt          j        ||           d| _         t                              |            d S )Nz%s.tmpwr\   r   F)r  rz   r  rr  r  r  writeru  r   chmodstatST_MODErenamer   rR   )r-   	subs_filetmpfilerz  r  s        r.   rR   zfcontextRecords.commit	  s    > 	#>@@I*Ggs##B*//++ C Cfffdj.@.@.@ABBBBHHJJJ"')"4"4T\"BCCCCIgy)))"DNt$$$$$s   7B? ?Cc           
         |                                   |dk    r+|d         dk    rt          t          d          |z            |dk    r+|d         dk    rt          t          d          |z            || j                                        v rt          t          d          |z            |                     |           | j        | j        fD ]G}|D ]B}|                    |dz             r(t          t          d          ||||         fz            CH| j        	                    dt          j        d|d	          d
t          j        d|d	                     || j        |<   d| _        |                                  d S )Nrm  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 sglobr   r\   tglobT)r   r   r
   r  r  r  r  r  r   rM   r'   audit_encode_nv_stringr  rR   )r-   r  r  fdictr   s        r.   	add_equalzfcontextRecords.add_equal+	  s   

S= 	jVBZ3. 	jQ^__bhhiii 	vB3!6 	vQfggjttuuuTZ__&&& 	TQHIIFRSSSfj$/2 	x 	xE x x<<-- x$Q']%^%^bhjkmrstmuav%vwwwxx 	
UEabikqstEuEuEuEuw|  xT  U\  ^h  jk  xl  xl  xl  m  	n  	n  	n'
6r0   c           
      |   |                                   || j                                        vrt          t	          d          |z            || j        |<   d| _        | j                            dt          j	        d|d          dt          j	        d|d                     | 
                                 d S )Nz'Equivalence class for %s does not existTzresrc=fcontext op=modify-equal r'  r   r\   r(  )r   r  r  r   r
   r  r   rM   r'   r)  rR   )r-   r  r  s      r.   modify_equalzfcontextRecords.modify_equalB	  s    

*** 	TQHIIFRSSS'
6
HdelntvwHxHxHxHxz  {W  X_  ak  mn  {o  {o  {o  p  	q  	q  	qr0   r  c                    t          | j                  \  }}|dk     rt          t          d          |z            |dk    rd}t	          | j        ||          }|dk     rt          t          d          |z            t          | j        |d          }|dk     rt          t          d          |z            t          dk    r;t          | j        |d	          }|dk     rt          t          d
          |z            |S )Nr   r  r   r  z)Could not set user in file context for %sr  z)Could not set role in file context for %srb   r  /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.   	createconzfcontextRecords.createconM	  s   +DG44	S6 	LQ@AAFJKKKR< 	 F&twV<<6 	VQJKKfTUUU&twZ@@6 	VQJKKfTUUUQ 	`)$'3==BAv ` #T!U!UX^!^___
r0   c           	         |dk    s|                     d          dk    rt          t          d                    |                     d          dk    rt          t          d                    | j        | j        fD ]d}|D ]_}|                    |dz             rEt          j        |||         |          }t          t          d	          ||||         |fz            `ed S )
Nr   r   r   zInvalid file specificationr\   r&  z)File specification can not include spacesrm  zMFile spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead)findr   r
   r  r  r  ro   sub)r-   r  r*  r   r   s        r.   r  zfcontextRecords.validatec	  s:   R< 	>6;;t,,1 	>Q;<<===;;sr! 	MQJKKLLLj$/2 	T 	TE T T$$QW-- Tq%(F33A$Q'v%w%w  |B  DE  GL  MN  GO  QR  {S  &S  T  T  TTT	T 	Tr0   r   c                    |                      |           t          dk    rt          |          }|dk    rt          t	          d                    |dk    r<t          j        |          }|| j        vrt          t	          d          |z            t          | j	        |t          |                   \  }}|dk     rt          t	          d          |z            t          | j	        |          \  }}|dk     rt          t	          d          |z            |s=t          | j	        |          \  }}|dk     rt          t	          d          |z            |rt          t	          d	          |z            t          | j	                  \  }}	|dk     rt          t	          d
          |z            t          | j	        |	|          }|dk    r|                     ||          }
t!          | j	        |
|          }|dk     rt          t	          d          |z            t          dk    rA|dk    r;t#          | j	        |
|          }|dk     rt          t	          d          |z            t%          | j	        |	|
          }|dk     rt          t	          d          |z            t'          |	t          |                    t)          | j	        ||	          }|dk     rt          t	          d          |z            |dk    rt+          |
           t-          |           t/          |	           |sd}| j                            dt5          j        d|d          dt8          |         d|ddd|d|           d S )Nrb   r   r  <<none>>1Type %s is invalid, must be a file or device typer   r  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  zresrc=fcontext op=add r(   ftype=r  rn  r  )r  r   r   r   r
   r   r  r  semanage_fcontext_key_creater   
file_typessemanage_fcontext_existssemanage_fcontext_exists_localsemanage_fcontext_createsemanage_fcontext_set_exprr0  r  r  semanage_fcontext_set_consemanage_fcontext_set_typesemanage_fcontext_modify_localr  semanage_fcontext_key_freesemanage_fcontext_freer   rM   r'   r)  ftype_to_audit)r-   r  r   ftyper?   r  r   rL  r   fcontextr  s              r.   rN  zfcontextRecords.__addn	  s8   fQ 	+!'**G2: 	<Q9::;;;: 	`.t44D4++ ` #V!W!WZ^!^___.tw
5@QRRQ6 	HQ<==FGGG/;;V6 	^QRSSV\\]]] 	b9$'1EELRAv b #V!W!WZ`!`aaa 	PQDEENOOO1$'::X6 	QQEFFOPPP'6BB: 	R..00C*47C>>BAv Z #N!O!ORX!XYYY!# d'R- d-dgsGDD6 d$Q'X%Y%Y\b%bccc*47HcBBBAv R #F!G!G&!PQQQ"8Z->???+DGQAA6 	NQBCCfLMMM: 	'!#&&&"1%%%x((( 	 F
Z_Zvw~  AG  IJ  [K  [K  [K  [K  M[  \a  Mb  Mb  Mb  dj  dj  dj  lv  lv  lv  x|  x|  x|  ~E  ~E  F  	G  	G  	G  	G  	Gr0   c                     |                                   |                     |||||           |                                  d S r&   )r   _fcontextRecords__addrR   )r-   r  r   rF  r?   r  s         r.   r   zfcontextRecords.add	  s:    



64888r0   c                 b   |dk    r(|dk    r"|dk    rt          t          d                    |dvr<t          j        |          }|| j        vrt          t          d          |z            |                     |           t          | j        |t          |                   \  }}|dk     rt          t          d          |z            t          | j        |          \  }}|dk     rt          t          d          |z            |rG	 t          | j        |          \  }}	n# t          $ r  t          t          d          |z            w xY wt          | j        |          \  }}|dk     rt          t          d          |z            |st          t          d	          |z            	 t          | j        |          \  }}	n-# t          $ r  t          t          d          |z            w xY w|d
k    rt          |	          }
|
|                     |          }
t           dk    r)|dk    r#t#          | j        |
t%          |                     |dk    rt'          | j        |
|           |dk    rt)          | j        |
|           t+          | j        |	|
          }|dk     rt          t          d          |z            n;t+          | j        |	d           }|dk     rt          t          d          |z            t-          | j        ||	          }|dk     rt          t          d          |z            t/          |           t1          |	           |sd}| j                            dt7          j        d|d          dt:          |         d|ddd|d|           d S )Nr   z"Requires setype, serange or seuser)r   r5  r6  r   r4  r7  z#Could not query file context for %s"File context for %s is not definedr5  rb   r8  z$Could not modify file context for %sr  zresrc=fcontext op=modify r(  r9  r  rn  r  )r   r
   r   r  r  r  r:  r   r;  r<  semanage_fcontext_queryOSErrorr=  semanage_fcontext_query_localsemanage_fcontext_get_conr0  r   r  r   r  r  r@  rB  rC  rD  r   rM   r'   r)  rE  )r-   r  r  rF  r?   r  r   rL  r   rG  r  s              r.   rY  zfcontextRecords.__modify	  s   b= 	FVr\ 	Ffl 	FQCDDEEE** 	b088FT-- b #V!W!WZ`!`aaaf.tw
5@QRRQ6 	JQ>??&HIII/;;V6 	^QRSSV\\]]] 	TT!8!!D!DXX T T T #H!I!IF!RSSST :$'1EELRAv b #V!W!WZ`!`aaa S #G!H!H6!QRRRT!>tw!J!JXX T T T #H!I!IF!RSSST Z 	R+H55C -nnV,,!# M'R- M(#{77K7KLLL| @)$'3???| @)$'3???*47HcBBBAv R #F!G!G&!PQQQR +47HdCCBAv R #F!G!G&!PQQQ+DGQAA6 	QQEFFOPPP"1%%%x((( 	 F
]b]y  {B  DJ  LM  ^N  ^N  ^N  ^N  P^  _d  Pe  Pe  Pe  gm  gm  gm  oy  oy  oy  {A  {A  {A  CJ  CJ  K  	L  	L  	L  	L  	Ls   D& &*E2G *G5c                     |                                   |                     |||||           |                                  d S r&   )r   _fcontextRecords__modifyrR   )r-   r  r  rF  r?   r  s         r.   r\  zfcontextRecords.modify	  s:    

ffeWf===r0   c           	         t          | j                  \  }}|dk     rt          t          d                    |                                  |D ]}t          |          }t          |          }t          |          }t          | j        |t          |                   \  }}|dk     rt          t          d          |z            t          | j        |          }|dk     rt          t          d          |z            t          |           | j                            dt          j        d|d          dt           t"          |                             i | _        d| _        |                                  d S )	Nr   z Could not list the file contextsr4  z$Could not delete the file context %sresrc=fcontext op=delete r(  r9  T)semanage_fcontext_list_localr   r   r
   r   semanage_fcontext_get_exprsemanage_fcontext_get_typesemanage_fcontext_get_type_strr:  r;  semanage_fcontext_del_localrC  r   rM   r'   r)  rE  file_type_str_to_optionr  r  rR   )r-   r   flistrG  r  rF  	ftype_strrL  s           r.   r   zfcontextRecords.deleteall	  s   247;;U6 	DQABBCCC

 	s 	sH/99F.x88E6u==I247FJyDYZZGRAv N #B!C!Cf!LMMM,TWa88BAv U #I!J!JV!STTT&q)))J!!!ELhiprxz{L|L|L|L|  M  Ne  fo  Np  q  q  #r  s  s  s  s
r0   c                    || j                                         v rT| j                             |           d| _        | j                            dt          j        d|d          z             d S t          | j	        |t          |                   \  }}|dk     rt          t          d          |z            t          | j	        |          \  }}|dk     rt          t          d          |z            |s}t          | j	        |          \  }}|dk     rt          t          d          |z            |rt          t          d          |z            t          t          d          |z            t          | j	        |          }|dk     rt          t          d	          |z            t!          |           | j                            d
t          j        d|d          dt"          |                    d S )NTz!resrc=fcontext op=delete-equal %sr(  r   r4  r7  z;File context for %s is defined in policy, cannot be deletedrK  z$Could not delete file context for %srS  r9  )r  r  popr  r   rM   r'   r)  r:  r   r;  r   r
   r=  r<  rX  rC  rE  )r-   r  rF  r   rL  r   s         r.   ra  zfcontextRecords.__delete
  s'   TZ__&&& 	JNN6"""!DNJ!!"EIefmouwxIyIy"z{{{F.tw
5@QRRQ6 	JQ>??&HIII5dgqAAV6 	^QRSSV\\]]] 	S3DGQ??LRAv b #V!W!WZ`!`aaa S #`!a!adj!jkkk #G!H!H6!QRRR(!446 	QQEFFOPPP"1%%%
HdelntvwHxHxHxHx  {I  JO  {P  {P  Q  	R  	R  	R  	R  	Rr0   c                     |                                   |                     ||           |                                  d S r&   )r   _fcontextRecords__deleterR   )r-   r  rF  s      r.   r  zfcontextRecords.delete8
  s4    

fe$$$r0   r   c                    |rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    t          | j                  \  }}|dk     rt	          t          d                    t          | j                  \  }}|dk     rt	          t          d                    | xj        |z  c_        | xj        |z  c_        i }| j        D ]}t          |          }t          |          }t          |          }	t          |          }
|
r@t          |
          t          |
          t          |
          t          |
          f|||	f<   |
|||	f<   |S )Nr   zCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)rT  r   rZ  semanage_fcontext_listr   r
   semanage_fcontext_list_homedirsrU  rV  rW  rO  r  r  r  r  )r-   r   r   
fchomedirsfclocalrw  rG  exprrF  r[  r  s              r.   r   zfcontextRecords.get_all=
  s    	";DGDDR5dg>>RAv D #A!B!BCCC>twGGRAv Y #V!W!WXXX8AAMRAv J #G!H!HIIIJJ*$JJJJ'!JJ
 	/ 	/H-h77D.x88E6u==I+H55C /,Ec,J,JLefiLjLj  mF  GJ  mK  mK  Me  fi  Mj  Mj  ,ktY'((+.tY'((r0   c                 |   g }|                      d          }t          |                                          D ]}||         r||         d         rR|                    dt          |d                  d||         d         d||         d         d|d	         d
	           j|                    dt          |d                  d||         d         d|d	         d
           t          | j                  rB| j                                        D ](}|                    d| j        |         d|           )|S )NTr   z-a -f rb   r  r   r  z' 'r   'z 'z-a -e r\   )r   r  r  r7   rY  r|   r  )r-   r   	fcon_dictrL  r  s        r.   r   zfcontextRecords.customized]
  s   LL&&		(()) 	m 	mA| mQ<? mHHH>UVWXYVZ>[>[>[]fgh]ijk]l]l]lnwxynz{|n}n}n}  @A  BC  @D  @D  @D  E  F  F  F  FHHH6MaPQd6S6S6SU^_`UabcUdUdUdfghifjfjfjkllltz?? 	G*//++ G G$*V*<*<*<ffEFFFFr0   rb   c                    |                      |          }t          |          dk    rX|rAt          t          d          ddt          d          ddt          d          d           t	          |                                          D ]}||         rt          rnt          |d         dd|d	         dd||         d         d
||         d	         d
||         d         d
t          ||         d         d          d           t          |d         dd|d	         dd||         d         d
||         d	         d
||         d         d
           t          |d         dd|d	         dd           t          | j                  r[|sY|rt          t          d                     | j                                        D ]!}t          |d| j        |                    "t          | j	                  rY|rt          t          d                     | j	                                        D ]#}t          |d| j	        |                    "d S d S )Nr   zSELinux fcontext50r\   r   rj  r  r   rb   rn  r   r   Fz	 <<None>>z,
SELinux Distribution fcontext Equivalence 
z = z%
SELinux Local fcontext Equivalence 
)
r   r|   r   r
   r  r  r   r   r  r  )r-   r   r   rh  rL  r  s         r.   r   zfcontextRecords.listl
  s   LL++	y>>Q 
	A ]A.@,A,A,A,A,A1V99999aPYllll[\\\INN,,-- A AQ< A% yAaDDDD!A$$$$	RSUVYbcdYefgYhYhYhjstujvwxjyjyjy  |E  FO  PQ  FR  ST  FU  W\  |]  |]  |]  |]  ^  _  _  _  _1qttttYq\RS___V_`aVbcdVeVeVegpqrgstugvgvgvwxxxxAaDDDD!A$$$$?@@@@t 	I I O!LMMNNN"o2244 I IFvvvtv/F/FGHHHHtz?? 	@ DaABBCCC*//++ @ @6664:f+=+=>????	@ 	@@ @r0   r&   )r  )r   r   r  r	  r   )rU   rV   rW   r  r/   rR   r+  r-  r0  r  rI  r   rQ  r\  r   r_  r  r   r   r   rX   r0   r.   r  r    sF       K$ $ $ $L% % %   .	 	 	   ,	T 	T 	T@G @G @G @GD   
AL AL ALF  
  4R R RB  
   @  @ @ @ @ @ @r0   r  c                   X    e Zd ZddZd ZddZd Zd Zd Zdd
Z	d Z
d Zd ZddZdS )booleanRecordsNc                    t                               | |           i | _        d| j        d<   d| j        d<   d| j        d<   d| j        d<   d| j        d<   d| j        d<   	 t          j                    \  }| _        t          j                    \  }}n#  g | _        d }Y nxY w| j        d	k    s| j        |k    r	d
| _        d S d| _        d S )Nrb   TRUEr   FALSEONOFF10r   TF)	r   r/   dictrz   security_get_boolean_namescurrent_booleansr   r   modify_local)r-   r   r   ptypes       r.   r/   zbooleanRecords.__init__
  s      t,,,		&	'	$	%	#	#	(/(J(L(L%B%577IB	$&D!EEE: 	&tzU2 	& $D %Ds    1B Bc                 J   t          j        |          }t          | j        |          \  }}|dk     rt	          t          d          |z            t          | j        |          \  }}|dk     rt	          t          d          |z            |st	          t          d          |z            t          | j        |          \  }}|dk     rt	          t          d          |z            |                                | j	        v r.t          || j	        |                                                    nIt	          t          d          d                    | j	                                                  z            | j        rD|| j        v r;t          | j        ||          }|dk     rt	          t          d          |z            t!          | j        ||          }|dk     rt	          t          d	          |z            t#          |           t%          |           d S )
Nr   r4  (Could not check if boolean %s is definedBoolean %s is not definedzCould not query file context %sz0You must specify one of the following values: %sz, z(Could not set active value of boolean %szCould not modify boolean %s)rz   selinux_boolean_subsemanage_bool_key_creater   r   r
   semanage_bool_existssemanage_bool_queryupperrt  semanage_bool_set_valuer.  r  rw  rv  semanage_bool_set_activesemanage_bool_modify_localsemanage_bool_key_freesemanage_bool_free)r-   r=   valuer   rL  r   r   s          r.   __modzbooleanRecords.__mod
  s   *400*47D99Q6 	HQ>??$FGGG+DGQ77V6 	SQIJJTQRRR 	DQ:;;dBCCC%dgq11Q6 	JQ@AADHIII;;==DI% 	r#Aty'?@@@@QQRRUYU^U^_c_h_m_m_o_oUpUppqqq 	W)>!> 	W)$'1a88BAv W #M!N!NQU!UVVV'A666 	FQ<==DEEEq!!!1r0   Fc                    |                                   |r	t          |          }|                                                    d          D ]}|                                }t          |          dk    r*	 |                    d          \  }}n?# t          $ r2 t          t          d                              ||                    w xY w| 	                    |                                |                                           |
                                 n| 	                    ||           |                                  d S )Nr   r   =z&Bad format {filename}: Record {record})filenamerecord)r   rr  rs  r   r  r|   r   r
   r  _booleanRecords__modru  rR   )r-   r=   r  use_filerz  r   boolnamer  s           r.   r\  zbooleanRecords.modify
  s*   

 	$dBWWYY__T** 	: 	:GGIIq66Q; r$%GGCLLMHcc! r r r$Q'O%P%P%W%Waeno%W%p%pqqqr

8>>++SYY[[9999HHJJJJJJtU###s   9B<Cc                    t          j        |          }t          | j        |          \  }}|dk     rt	          t          d          |z            t          | j        |          \  }}|dk     rt	          t          d          |z            |st	          t          d          |z            t          | j        |          \  }}|dk     rt	          t          d          |z            |st	          t          d          |z            t          | j        |          }|dk     rt	          t          d          |z            t          |           d S )Nr   r4  rz  r{  z2Boolean %s is defined in policy, cannot be deletedzCould not delete boolean %s)
rz   r|  r}  r   r   r
   r~  semanage_bool_exists_localsemanage_bool_del_localr  )r-   r=   r   rL  r   s        r.   ra  zbooleanRecords.__delete
  se   *400*47D99Q6 	HQ>??$FGGG+DGQ77V6 	SQIJJTQRRR 	DQ:;;dBCCC1$'1==V6 	SQIJJTQRRR 	]QSTTW[[\\\$TWa006 	FQ<==DEEEq!!!!!r0   c                     |                                   |                     |           |                                  d S r&   )r   _booleanRecords__deleterR   r-   r=   s     r.   r  zbooleanRecords.delete
  s2    

dr0   c                 .   t          | j                  \  }| _        |dk     rt          t	          d                    |                                  | j        D ]&}t          |          }|                     |           '|                                  d S Nr   zCould not list booleans)	semanage_bool_list_localr   blistr   r
   r   semanage_bool_get_namer  rR   )r-   r   booleanr=   s       r.   r   zbooleanRecords.deleteall
  s    3DG<<TZ6 	;Q899:::

z 	  	 G)'22DMM$r0   r   c                 r   i }|rt          | j                  \  }| _        nt          | j                  \  }| _        |dk     rt	          t          d                    | j        D ]}g }t          |          }|                    t          |                     | j	        rX|| j
        v rO|                    t          j        |                     |                    t          j        |                     n6|                    |d                    |                    |d                    |||<   |S r  )r  r   r  semanage_bool_listr   r
   r  r7   semanage_bool_get_valuerw  rv  rz   security_get_boolean_pendingsecurity_get_boolean_active)r-   r   rw  r   r  r  r=   s          r.   r   zbooleanRecords.get_all
  s1    	;7@@R1$'::R6 	;Q899:::z 
	  
	 GE)'22DLL099:::  'TT-B%B 'WA$GGHHHW@FFGGGGU1X&&&U1X&&&E$KKr0   c                 R    t          j        |          }t          j        |          S r&   )rz   r|  r   boolean_descr  s     r.   get_desczbooleanRecords.get_desc  s#    *400$T***r0   c                 R    t          j        |          }t          j        |          S r&   )rz   r|  r   boolean_categoryr  s     r.   get_categoryzbooleanRecords.get_category  s#    *400(...r0   c                     g }|                      d          }t          |                                          D ]1}||         r'|                    d||         d         d|           2|S )NTz-m -r   r\   r  r  s       r.   r   zbooleanRecords.customized  sp    T""

%% 	9 	9AQx 9aQQ7888r0   Tc                    t          d          t          d          f}|rc|                     |          }t          |                                          D ]*}||         r t	          |d||         d                    +d S |                     |          }t          |          dk    rd S |rPt	          t          d          ddt          d	          d
t          d          dt          d          d           t          |                                          D ]^}||         rTt	          |dd|||         d                  dd|||         d                  dd|                     |                     _d S )Nr  r  r  r   r   zSELinux booleanr  r\   Statez  DefaultDescriptionr   z (r   r4   z>5z)  )r
   r   r  r  r   r|   r  )r-   r   r   r  on_offrw  rL  s          r.   r   zbooleanRecords.list$  s   E((AdGG$ 	LL++EEJJLL)) 6 68 6QQQa4555FY''u::? 	F 	l+<)=)=)=)=)=qzzzz1Y<<<<YZ[hYiYiYiYijkkk

%% 	p 	pAQx p6%(1+3F3F3F3FuUVxXY{H[H[H[H[]a]j]jkl]m]m]mnooo	p 	pr0   r&   )NFr	  )TFF)rU   rV   rW   r/   r  r\  r  r  r   r   r  r  r   r   rX   r0   r.   rl  rl  
  s        & & & &,  >   (" " "0  
     .+ + +/ / /  p p p p p pr0   rl  )rb   )>r@  r>  rz   r   ro   r9   r   r   rJ   PROGNAMEr   setools.policyrepr   setools.typequeryr   r  gettextkwargsversion_infotranslationr   r
   builtinsr;   __dict__ImportError__builtin__r   rc   r;  SEMANAGE_FCONTEXT_ALLSEMANAGE_FCONTEXT_REGSEMANAGE_FCONTEXT_DIRSEMANAGE_FCONTEXT_CHARSEMANAGE_FCONTEXT_BLOCKSEMANAGE_FCONTEXT_SOCKSEMANAGE_FCONTEXT_LINKSEMANAGE_FCONTEXT_PIPErY  rE  r'   audit_closer(   r$   rM  rf   rw   r   r   r   r   r  r  r0  r:  r  r-  rn  r  r  r  rl  rX   r0   r.   <module>r     s  . 


 



  				 				 



        + + + + + + ' ' ' ' ' '    ,NNNF
$ ! yH 	# 	#1	#	# 	# "	# 	# 	#A 	
	AA,,!$# , , ,$+S!!!, 
&
2/
; '
32
> (
4 '
3(
4 /
; '
3)
4 !7
 (
3*
4 4
> )
3)
4 -
8 (
3)
4 (
34
? (
3)
4 1
< (++.(+/2+.%(,/),. .   ! !K<LLLE&e&(()))#& #& #& #& #& #& #& #& #&H 	 "< "< "<!< !< !< !< !< !< !< !< !< !<"<J       + + +   "   $f f f f f f f fRh& h& h& h& h&O h& h& h&V
 
 
 
 
_ 
 
 
@ @ @ @ @ @ @ @Fy8 y8 y8 y8 y8? y8 y8 y8xC5 C5 C5 C5 C5_ C5 C5 C5L\ \ \ \ \/ \ \ \|B B B B BO B B BHt t t t t t t tl~p ~p ~p ~p ~p/ ~p ~p ~pBV V V V V V V VDT@ T@ T@ T@ T@o T@ T@ T@nlp lp lp lp lp_ lp lp lp lp lpsA   1A. .B1B ?B BBBB4.E# #E:9E: