/usr/lib/python3.9/site-packages/__pycache__
NameSizeModeActions
distro.cpython-39.opt-1.pyc367770644editdlrm
distro.cpython-39.pyc368300644editdlrm
hwdata.cpython-39.opt-1.pyc46680644editdlrm
hwdata.cpython-39.pyc46680644editdlrm
pyinotify.cpython-39.opt-1.pyc768440644editdlrm
pyinotify.cpython-39.pyc769660644editdlrm
pyparsing.cpython-39.opt-1.pyc2403580644editdlrm
pyparsing.cpython-39.pyc2403580644editdlrm
seobject.cpython-39.opt-1.pyc850950644editdlrm
seobject.cpython-39.pyc850950644editdlrm
six.cpython-39.opt-1.pyc271980644editdlrm
six.cpython-39.pyc271980644editdlrm
socks.cpython-39.opt-1.pyc213680644editdlrm
socks.cpython-39.pyc213680644editdlrm
sockshandler.cpython-39.opt-1.pyc42190644editdlrm
sockshandler.cpython-39.pyc42190644editdlrm
Edit: /usr/lib/python3.9/site-packages/__pycache__/seobject.cpython-39.pyc (85095B)
a BÒiȸã @sJddlZddlZddlZddlZddlZddlZddlZddlZddlTdZ ddl Z ddl m Z ddl mZddlZzFddlZiZejdkr”ded<eje fd d ie¤d di¤ŽZejZWnHzddlZeejd <Wn$eyüddlZeejd <Yn0Yn0ddlZiZeed <eed<eed<eed<eed<eed<e ed<e ed<e ed<e!ed<e!ed<e!ed<e"ed<e"ed<e"ed<e#ed<e#ed<e#ed<e$ed<e$ed <e$ed!<e%ed"<e%ed#<e%ed$<ddddddd d"d%œZ&d&d&d'd(d)d*d+d,dd-œ Z'z(ddl(Z(e( )e( *¡¡Gd.d/„d/ƒZ+Wn&e,ef�yLGd0d/„d/ƒZ+Yn0Gd1d2„d2ƒZ-d3d4„Z.dTd6d7„Z/dUd8d9„Z0Gd:d;„d;ƒZ1Gdd?„d?e1ƒZ3Gd@dA„dAe1ƒZ4GdBdC„dCe1ƒZ5GdDdE„dEe1ƒZ6GdFdG„dGe1ƒZ7GdHdI„dIe1ƒZ8GdJdK„dKe1ƒZ9GdLdM„dMe1ƒZ:GdNdO„dOe1ƒZ;GdPdQ„dQe1ƒZr+r+r,Ú log_remove‚súlogger.log_removec Cs&|j |jtjt|ƒddddg¡dS)NÚsemanager )r(r4r&r$ZAUDIT_USER_MAC_CONFIG_CHANGEr7©r*r8r+r+r,Ú log_change…súlogger.log_changecCsH|jD]}tj||gŽq|jD]}tj||gŽq"g|_g|_dSr#)r'r$Zaudit_log_semanage_messager(Zaudit_log_user_comm_message)r*Úsuccessrr+r+r,Úcommitˆs   ú logger.commitN)r r r r r r r )r r r r r r r ©Ú__name__Ú __module__Ú __qualname__r-r@rCrGrJr+r+r+r,r"ls   r"c@s8eZdZdd„Zd dd„Zddd„Zdd „Zd d „Zd S)r"cCs g|_dSr#)r'r)r+r+r,r-“sr.r c Cs¤d||f} |dkr | d|7} |dkr4| d|7} |dkrH| d|7} |dkr\| d|7} |dkrx|durx| d|7} |dkr”|dur”| d|7} |j | ¡dS) Nz %s name=%sr z sename=z oldsename=z role=z old_role=z MLSRange=z old_MLSRange=©r'r4) r*r8r9r0r:r;r<r=r>Úmessager+r+r,r@–s       rAc Cs| ||||||||¡dSr#)r@rBr+r+r,rC¦srDcCs|j d|¡dS)Nz %srPrFr+r+r,rG©srHcCs4|dkrd}nd}|jD]}t tj||¡qdS)Néz Successful: zFailed: )r'ÚsyslogZLOG_INFO)r*rIrQrr+r+r,rJ¬s  rKN)r r r r r r r )r r r r r r r rLr+r+r+r,r"‘s   c@s0eZdZd dd„Zd dd„Zdd„Zdd „Zd S) Ú nullloggerr c CsdSr#r+rBr+r+r,r@·sznulllogger.logc CsdSr#r+rBr+r+r,rCºsznulllogger.log_removecCsdSr#r+rFr+r+r,rG½sznulllogger.log_changecCsdSr#r+)r*rIr+r+r,rJÀsznulllogger.commitN)r r r r r r r )r r r r r r r )rMrNrOr@rCrGrJr+r+r+r,rTµs  rTcCsXd}d}|d|d}|d|d}|d|dd|d}t d |d |¡S) Nzs[0-9]*zc[0-9]*z(\.z)?z(\,z)*z(-z(:ú^ú$)ÚreÚsearch)ÚrawZ sensitivityÚcategoryZ cat_rangeÚ categoriesZregr+r+r,Úvalidate_levelÄs r\rRcCs`d}|dkrd||f}n|}t |¡\}}|dkr8|S|rL|t|ƒd…}|dkrX|S|SdS©Nza:b:c:rRú%s%srr )ÚselinuxZselinux_raw_to_trans_contextÚlen)rYÚprependÚfillerÚcontextÚrcÚtransr+r+r,Ú translateÍsrfcCs`d}|dkrd||f}n|}t |¡\}}|dkr8|S|rL|t|ƒd…}|dkrX|S|SdSr])r_Zselinux_trans_to_raw_contextr`)rerarbrcrdrYr+r+r,Ú untranslateÞsrgc@sfeZdZdZdZdZdZddd„Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„ZdS)ÚsemanageRecordsFNcCs¦|rt|tƒr||_n||_t|ddƒ|_|js>t|ddƒ|_| |j¡|_t  ¡\}}|jdksl|j|krvt ƒ|_ n,t   |j¡t dt ¡|jf¡tƒ|_ dS)NÚnoreloadFÚstorer r^)Ú isinstancer7rjÚargsÚgetattrriÚ get_handleÚshr_Úselinux_getpolicytyper"ÚmylogÚsepolicyZload_store_policyZselinux_set_policy_rootZ selinux_pathrT)r*rlrdZ localstorer+r+r,r-ös    zsemanageRecords.__init__cCs | |_dSr#)ri)r*Úloadr+r+r,Ú set_reload szsemanageRecords.set_reloadcCsÖtjr tjStƒ}|s"ttdƒƒ‚tjsB|dkrBt||tƒ|t_t |ƒs^t |ƒttdƒƒ‚t |ƒ}|t kr‚t |ƒttdƒƒ‚t |ƒ}|dkr¦t |ƒttdƒƒ‚t|ƒatdkrÊt |ƒttdƒƒ‚|t_tjS)Nz Could not create semanage handler z:SELinux policy is not managed or store cannot be accessed.zCannot read policy store.rz'Could not establish semanage connectionz!Could not test MLS enabled status)rhÚhandleZsemanage_handle_createÚ ValueErrorr Ú transactionZsemanage_select_storeZSEMANAGE_CON_DIRECTrjZsemanage_is_managedZsemanage_handle_destroyZsemanage_access_checkZSEMANAGE_CAN_READZsemanage_connectZsemanage_mls_enabledÚis_mls_enabled)r*rjrurdr+r+r,rns2      zsemanageRecords.get_handlecCsttdƒƒ‚dS©NzNot yet implemented©rvr r)r+r+r,Ú deleteall3szsemanageRecords.deleteallcCs$tjrttdƒƒ‚| ¡dt_dS)Nz(Semanage transaction already in progressT)rhrwrvr Úbeginr)r+r+r,Ústart6s zsemanageRecords.startcCs,tjr dSt|jƒ}|dkr(ttdƒƒ‚dS)Nrz$Could not start semanage transaction)rhrwZsemanage_begin_transactionrorvr ©r*rdr+r+r,r|<s  zsemanageRecords.begincCsttdƒƒ‚dSryrzr)r+r+r,Ú customizedCszsemanageRecords.customizedcCsVtjr dS|jrt|jdƒt|jƒ}|dkrF|j d¡tt dƒƒ‚|j d¡dS)Nrz%Could not commit semanage transactionrR) rhrwriZsemanage_set_reloadroZsemanage_commitrqrJrvr r~r+r+r,rJFs    zsemanageRecords.commitcCs$tjsttdƒƒ‚dt_| ¡dS)Nz$Semanage transaction not in progressF)rhrwrvr rJr)r+r+r,ÚfinishRs zsemanageRecords.finish)N)rMrNrOrwrurjrlr-rtrnr{r}r|rrJr€r+r+r+r,rhðs $ rhc@sPeZdZddd„Zdd„Zdd„Zdd d „Zd d „Zdd„Zdd„Z dd„Z dS)Ú moduleRecordsNcCst ||¡dSr#©rhr-©r*rlr+r+r,r-[szmoduleRecords.__init__c Csg}t|jƒ\}}}|dkr(ttdƒƒ‚t|ƒD]°}t||ƒ}t|j|ƒ\}}|dkrbttdƒƒ‚t|j|ƒ\}}|dkr†ttdƒƒ‚t|j|ƒ\}} |dkrªttdƒƒ‚t |j|ƒ\}} |dkrÎttdƒƒ‚|  ||| | f¡q0|j dd„d d �|j d d„d �|S) NrúCould not list SELinux moduleszCould not get module namezCould not get module enabledzCould not get module priorityzCould not get module lang_extcSs|dS)Nrr+©Útr+r+r,Úzóz'moduleRecords.get_all..T)ÚkeyÚreversecSs|dS©Nrr+r…r+r+r,r‡{rˆ)r‰) Zsemanage_module_list_allrorvr r3Úsemanage_module_list_nthZsemanage_module_info_get_nameZ semanage_module_info_get_enabledZ!semanage_module_info_get_priorityZ!semanage_module_info_get_lang_extr4Úsort) r*rrdÚmlistÚnumberÚiÚmodr9ZenabledÚpriorityZlang_extr+r+r,Úget_all^s,       zmoduleRecords.get_allcCs0| ¡}t|ƒdkrgSdd„dd„|DƒDƒS)NrcSsg|]}d|d‘qS)z-d %srr+©Ú.0Úxr+r+r,Ú ‚rˆz,moduleRecords.customized..cSsg|]}|ddkr|‘qS©rRrr+©r•r†r+r+r,r—‚rˆ)r“r`)r*Úallr+r+r,r~s zmoduleRecords.customizedrRrcCsˆ| ¡}t|ƒdkrdS|r:tdtdƒtdƒtdƒfƒ|D]D}|ddkrXtdƒ}n |r^q>d}td |d|d |d |fƒq>dS) Nrz %-25s %-9s %s z Module NameZPriorityZLanguagerRZDisabledr z%-25s %-9s %-5s %sér)r“r`Úprintr )r*ÚheadingÚ locallistršr†Zdisabledr+r+r,Úlist„s   zmoduleRecords.listcCs`tj |¡sttdƒ|ƒ‚t|j|ƒ}|dkr@ttdƒ|ƒ‚t|j|ƒ}|dkr\| ¡dS)NzModule does not exist: %s rú3Invalid priority %d (needs to be between 1 and 999)) ÚosÚpathÚexistsrvr Úsemanage_set_default_priorityroZsemanage_module_install_filerJ)r*rr’rdr+r+r,Úadd”s   zmoduleRecords.addcCsš| ¡D]„}t|jƒ\}}|dkr.ttdƒƒ‚t|j||ƒ}|dkrPttdƒƒ‚t|j||ƒ}|dkr|r|ttdƒ|ƒ‚qttdƒ|ƒ‚q| ¡dS)NrzCould not create module keyzCould not set module key namezCould not enable module %szCould not disable module %s)ÚsplitZsemanage_module_key_createrorvr Zsemanage_module_key_set_nameZsemanage_module_set_enabledrJ)r*ÚmoduleÚenableÚmrdr‰r+r+r,Ú set_enabled s   zmoduleRecords.set_enabledcCsjt|j|ƒ}|dkr$ttdƒ|ƒ‚| ¡D]0}t|j|ƒ}|dkr,|dkr,ttdƒ|ƒ‚q,| ¡dS)Nrr éþÿÿÿz*Could not remove module %s (remove failed))r¤rorvr r¦Úsemanage_module_removerJ)r*r§r’rdr©r+r+r,Údelete²s   zmoduleRecords.deletecCs6dd„dd„| ¡DƒDƒ}|D]}| |d¡q dS)NcSsg|] }|d‘qS)rr+r”r+r+r,r—¿rˆz+moduleRecords.deleteall..cSsg|]}|ddkr|‘qSr˜r+r™r+r+r,r—¿rˆT)r“rª)r*rr©r+r+r,r{¾szmoduleRecords.deleteall)N)rRr) rMrNrOr-r“rrŸr¥rªr­r{r+r+r+r,r�Ys     r�c@seZdZddd„Zdd„ZdS)ÚdontauditClassNcCst ||¡dSr#r‚rƒr+r+r,r-ÆszdontauditClass.__init__cCs8|dvrttdƒƒ‚| ¡t|j|dkƒ| ¡dS)N)ÚonÚoffz'dontaudit requires either 'on' or 'off'r°)rvr r|Zsemanage_set_disable_dontauditrorJ)r*Z dontauditr+r+r,ÚtoggleÉs  zdontauditClass.toggle)N)rMrNrOr-r±r+r+r+r,r®Äs r®c@sHeZdZddd„Zdd„Zdd„Zdd d „Zd d „Zdd„Zdd„Z dS)ÚpermissiveRecordsNcCst ||¡dSr#r‚rƒr+r+r,r-ÓszpermissiveRecords.__init__cCsng}t|jƒ\}}}|dkr(ttdƒƒ‚t|ƒD]8}t||ƒ}t|ƒ}|r0| d¡r0| |  d¡d¡q0|S)Nrr„Z permissive_rR) Zsemanage_module_listrorvr r3rŒZsemanage_module_get_nameÚ startswithr4r¦)r*rrdrŽr�r�r‘r9r+r+r,r“Ös   zpermissiveRecords.get_allcCsdd„t| ¡ƒDƒS)NcSsg|] }d|‘qS)z-a %sr+r”r+r+r,r—ärˆz0permissiveRecords.customized..)Úsortedr“r)r+r+r,rãszpermissiveRecords.customizedrRrcCs dd„dd„t tj¡DƒDƒ}t|ƒdkr0dS|rDtdtdƒƒ| ¡}|D]}||vrPt|ƒqPt|ƒdkrvdS|rŠtdtdƒƒ|D] }t|ƒqŽdS)NcSsg|] }|d‘qS)r9r+)r•Úyr+r+r,r—çrˆz*permissiveRecords.list..cSsg|]}|dr|‘qS)Z permissiver+r”r+r+r,r—çrˆrz %-25s zBuiltin Permissive TypeszCustomized Permissive Types)rrÚinfoZTYPEr`rœr r“)r*r�ržršrr†r+r+r,rŸæs    zpermissiveRecords.listcCsRd|}d|}t|j|t|ƒ|dƒ}|dkr6| ¡|dkrNttdƒ|ƒ‚dS)Nú permissive_%sz(typepermissive %s)Zcilrz?Could not set permissive domain %s (module installation failed))Zsemanage_module_installror`rJrvr )r*Útyper9Zmodtxtrdr+r+r,r¥úszpermissiveRecords.addcCsB| ¡D],}t|jd|ƒ}|dkrttdƒ|ƒ‚q| ¡dS)Nr·rz5Could not remove permissive domain %s (remove failed))r¦r¬rorvr rJ)r*r9Únrdr+r+r,r­s  zpermissiveRecords.deletecCs,| ¡}t|ƒdkr(d |¡}| |¡dS)Nrú )r“r`Újoinr­)r*rršr+r+r,r{ s  zpermissiveRecords.deleteall)N)rRr) rMrNrOr-r“rrŸr¥r­r{r+r+r+r,r²Ñs    r²c@s~eZdZddd„Zdd„Zdd„Zdd „Zd d d „Zd!d d„Zdd„Z dd„Z dd„Z dd„Z d"dd„Z dd„Zd#dd„ZdS)$Ú loginRecordsNcCs(t ||¡d|_d|_d|_d|_dSr#)rhr-r<r>r0r;rƒr+r+r,r-s  zloginRecords.__init__c Csüt |¡\}|_|_|dkr d}t|jƒ}| |j¡\}\}}| |¡\}\}} tdkrn|dkrjt|ƒ}n|}t |j |ƒ\}} |dkr–t t dƒ|ƒ‚|ddkràzt  |dd…¡Wn$t t dƒ|dd…ƒ‚Yn0n,zt |¡Wnt t dƒ|ƒ‚Yn0t|j ƒ\}} |dk�r4t t d ƒ|ƒ‚t|j | |ƒ}|dk�r\t t d ƒ|ƒ‚tdk�r˜|dk�r˜t|j | |ƒ}|dk�r˜t t d ƒ|ƒ‚t|j | |ƒ}|dk�rÀt t d ƒ|ƒ‚t|j | | ƒ}|dk�rèt t d ƒ|ƒ‚t| ƒt| ƒdS)Nr Zuser_urRrúCould not create a key for %sú%zLinux Group %s does not existzLinux User %s does not existz%Could not create login mapping for %súCould not set name for %súCould not set MLS range for %sz!Could not set SELinux user for %sz"Could not add login mapping for %s)r_Úgetseuserbynamer<r>ÚseluserRecordsrlÚgetrxrgÚsemanage_seuser_key_createrorvr ÚgrpÚgetgrnamÚpwdÚgetpwnamZsemanage_seuser_createZsemanage_seuser_set_nameÚsemanage_seuser_set_mlsrangeÚsemanage_seuser_set_senameÚsemanage_seuser_modify_localÚsemanage_seuser_key_freeÚsemanage_seuser_free) r*r9r0r;ÚrecÚuserrecr3rdr=r:ÚkÚur+r+r,Ú__addsP         zloginRecords.__addc CszzL| ¡| |¡r4ttdƒ|ƒ| |||¡n| |||¡| ¡Wn(tyt}z|‚WYd}~n d}~00dS)Nz:Login mapping for %s is already defined, modifying instead)r|Ú_loginRecords__existsrœr Ú_loginRecords__modifyÚ_loginRecords__addrJrv©r*r9r0r;Úerrorr+r+r,r¥Ss  zloginRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)Nrr½ú2Could not check if login mapping for %s is defined)rÄrorvr Úsemanage_seuser_existsrÌ©r*r9rdrÐr£r+r+r,Ú__existsaszloginRecords.__existsr c Cs°t |¡\}|_|_|dkr0|dkr0ttdƒƒ‚t|jƒ}| |j¡\}\}}|dkrj| |¡\}\}} n|} |dkr~||_ n||_ t |j |ƒ\}} |dkr¬ttdƒ|ƒ‚t |j | ƒ\}} |dkrÔttdƒ|ƒ‚| sèttdƒ|ƒ‚t |j | ƒ\}} |dk�rttdƒ|ƒ‚t| ƒ|_t| ƒ|_tdk�rL|dk�rLt|j | t|ƒƒ|dk�rlt|j | |ƒ||_n|j|_t|j | | ƒ}|dk�rœttd ƒ|ƒ‚t| ƒt| ƒdS) Nr zRequires seuser or serangerr½rØú#Login mapping for %s is not definedzCould not query seuser for %srRz%Could not modify login mapping for %s)r_rÁr<r>rvr rÂrlrÃr;rÄrorÙZsemanage_seuser_queryÚsemanage_seuser_get_mlsrangeÚsemanage_seuser_get_senamerxrÉrgrÊr0rËrÌrÍ) r*r9r0r;rÎrÏr3rdr=r:rÐr£rÑr+r+r,Ú__modifymsF       zloginRecords.__modifyc CsPz"| ¡| |||¡| ¡Wn(tyJ}z|‚WYd}~n d}~00dSr#)r|rÔrJrvrÖr+r+r,ÚmodifyŸs  zloginRecords.modifyc Cs*t |¡\}|_|_t|jƒ}| |j¡\}\}}t|j|ƒ\}}|dkrZt t dƒ|ƒ‚t |j|ƒ\}}|dkr‚t t dƒ|ƒ‚|s–t t dƒ|ƒ‚t |j|ƒ\}}|dkr¾t t dƒ|ƒ‚|sÒt t dƒ|ƒ‚t |j|ƒ}|dkröt t dƒ|ƒ‚t|ƒt d¡\}|_|_| |j¡\}\}} dS)Nrr½rØrÜzrÂrlrÃrÄrorvr rÙZsemanage_seuser_exists_localZsemanage_seuser_del_localrÌr0r;) r*r9rÎrÏr3rdr=rÐr£r:r+r+r,Ú__delete§s,  zloginRecords.__deletec CsLz| ¡| |¡| ¡Wn(tyF}z|‚WYd}~n d}~00dSr#)r|Ú_loginRecords__deleterJrv©r*r9r×r+r+r,r­Ås   zloginRecords.deletec Cs|t|jƒ\}}|dkr"ttdƒƒ‚z,| ¡|D]}| t|ƒ¡q0| ¡Wn(tyv}z|‚WYd}~n d}~00dS©NrúCould not list login mappings)Úsemanage_seuser_list_localrorvr r|râÚsemanage_seuser_get_namerJ©r*rdÚulistrÑr×r+r+r,r{Îs  zloginRecords.deleteallc Csži}t ¡d|_t |j¡D]z\}}}||jkr|D]`}zHt|d|ƒ}| ¡ ¡ d¡}|  ¡|d|d|df||<Wq6t y”Yq60q6q|S)Nz/loginsú/ú:rRr›r) r_Zselinux_policy_rootÚ logins_pathr¡ÚwalkÚopenÚreadÚrstripr¦ÚcloseÚ IndexError)r*Úddictr¢ÚdirsÚfilesr9ÚfdrÎr+r+r,Úget_all_loginsÛs   zloginRecords.get_all_loginsrcCsli}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]"}t|ƒ}t|ƒt|ƒdf||<qD|S)Nrrår) ræroréZsemanage_seuser_listrvr rçrÞrÝ)r*ržrórdrÑr9r+r+r,r“ês  zloginRecords.get_allcCspg}| d¡}t| ¡ƒD]P}||drP| d||d||d|f¡q| d||d|f¡q|S)NTrRz-a -s %s -r '%s' %srz -a -s %s %s©r“r´Úkeysr4©r*rrórÐr+r+r,røs  &zloginRecords.customizedrRc Cs@| |¡}| ¡}t| ¡ƒ}t| ¡ƒ}t|ƒdkrFt|ƒdkrFdStdkrú|rvtdtdƒtdƒtdƒtdƒfƒ|D]0}||}td||dt|dƒ|d fƒqzt|ƒrÂtd |j ƒ|D]0}||}td||dt|dƒ|d fƒqÆnB|�rtd tdƒtdƒfƒ|D]}td |||dfƒ�qdS) NrrRz %-20s %-20s %-20s %s z Login Nameú SELinux Userz MLS/MCS RangeZServicez%-20s %-20s %-20s %sr›z Local customization in %sz %-25s %-25s z %-25s %-25s) r“r÷r´rùr`rxrœr rfrì) r*r�ržróZldictZlkeysrùrÐrÑr+r+r,rŸs*   $&(zloginRecords.list)N)r r )r r )r)rRr)rMrNrOr-rÕr¥rÓrÔràrâr­r{r÷r“rrŸr+r+r+r,r¼s 6 2     r¼c@sŽeZdZddd„Zdd„Zdd„Zdd „Zd d „Zgd d d fd d„Zgd d d fdd„Z dd„Z dd„Z dd„Z d dd„Z dd„Zd!dd„ZdS)"rÂNcCst ||¡dSr#r‚rƒr+r+r,r-szseluserRecords.__init__cCs¤t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|j|ƒ\}}|dkrxttdƒ|ƒ‚t|ƒ}t|j|ƒ}t|ƒt |ƒ||fS)Nrr½ú-Could not check if SELinux user %s is definedúCould not query user for %s) Úsemanage_user_key_createrorvr Úsemanage_user_existsÚsemanage_user_queryÚsemanage_user_get_mlsrangeÚsemanage_user_get_rolesÚsemanage_user_key_freeÚsemanage_user_free)r*r9rdrÐr£rÑr;r:r+r+r,rÃ"s zseluserRecords.getc Cstdkr4|dkrd}nt|ƒ}|dkr,d}nt|ƒ}t|ƒdkrPttdƒ|ƒ‚t|j|ƒ\}}|dkrxttdƒ|ƒ‚t|jƒ\}}|dkržttdƒ|ƒ‚t|j||ƒ}|dkrÄttdƒ|ƒ‚|D]0} t |j|| ƒ}|dkrÈttd ƒj | |d �ƒ‚qÈtdk�rTt |j||ƒ}|dk�r,ttd ƒ|ƒ‚t |j||ƒ}|dk�rTttd ƒ|ƒ‚t |j||ƒ}|dk�r‚ttd ƒj | |d�ƒ‚t|j|ƒ\}} |dk�r¬ttdƒ|ƒ‚t|j||ƒ}|dk�rÔttdƒ|ƒ‚t|ƒt|ƒ|jjd|d |¡|d�dS)NrRr Ús0z%You must add at least one role for %srr½z$Could not create SELinux user for %sr¿z$Could not add role {role} for {name})r2r9rÀzCould not set MLS level for %sz(Could not add prefix {prefix} for {role})r2ÚprefixzCould not extract key for %szCould not add SELinux user %sÚseuserr1)r0r:r;)rxrgr`rvr rþroZsemanage_user_createZsemanage_user_set_nameÚsemanage_user_add_roleÚformatÚsemanage_user_set_mlsrangeÚsemanage_user_set_mlslevelÚsemanage_user_set_prefixZsemanage_user_key_extractÚsemanage_user_modify_localrrrqr@r») r*r9ÚrolesÚselevelr;rrdrÐrÑÚrr‰r+r+r,rÒ2sR       zseluserRecords.__addc CsŽzT| ¡| |¡r8ttdƒ|ƒ| |||||¡n| |||||¡| ¡Wn4tyˆ}z|j d¡|‚WYd}~n d}~00dS)Nz5SELinux user %s is already defined, modifying insteadr) r|Ú_seluserRecords__existsrœr Ú_seluserRecords__modifyÚ_seluserRecords__addrJrvrq©r*r9rrr;rr×r+r+r,r¥is   zseluserRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)Nrr½rü)rþrorvr rÿrrÚr+r+r,rÛvszseluserRecords.__existsr c Cs8d}d}d |¡}|dkrXt|ƒdkrX|dkrX|dkrXtdkrLttdƒƒ‚n ttdƒƒ‚t|j|ƒ\} } | dkr€ttdƒ|ƒ‚t|j| ƒ\} } | dkr¨ttdƒ|ƒ‚| s¼ttd ƒ|ƒ‚t|j| ƒ\} } | dkrättd ƒ|ƒ‚t | ƒ}t |j| ƒ\} } | dk�rd | ¡}tdk�r6|dk�r6t |j| t |ƒƒtdk�r\|dk�r\t |j| t |ƒƒ|dk�rtt|j| |ƒt|ƒdk�rÆ| D]}||v�r†t| |ƒ�q†|D]}|| v�r¦t|j| |ƒ�q¦t|j| | ƒ} | dk�rîttd ƒ|ƒ‚t| ƒt| ƒd  | ¡¡}d  | ¡¡}|jjd ||||||d�dS)Nr rºrrRz&Requires prefix, roles, level or rangezRequires prefix or rolesr½rüúSELinux user %s is not definedrýz Could not modify SELinux user %sr1r)r0r<r:r;r=r>)r»r`rxrvr rþrorÿrrrr rgr r Zsemanage_user_del_rolerr rrr¦rqr@)r*r9rrr;rr=r>ZnewrolesrdrÐr£rÑÚrlistrr2r+r+r,rß‚sV $       zseluserRecords.__modifyc Cs`z&| ¡| |||||¡| ¡Wn4tyZ}z|j d¡|‚WYd}~n d}~00dSr‹)r|rrJrvrqrr+r+r,ràºs  zseluserRecords.modifyc Cs8t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚|sdttdƒ|ƒ‚t|j|ƒ\}}|dkrŒttdƒ|ƒ‚|s ttdƒ|ƒ‚t|j|ƒ\}}|dkrÈttdƒ|ƒ‚t|ƒ}t|j|ƒ\}}d  |¡}t |j|ƒ}|dk�rttdƒ|ƒ‚t |ƒt |ƒ|j jd |||d �dS) Nrr½rürz7SELinux user %s is defined in policy, cannot be deletedrýr1z Could not delete SELinux user %sr)r<r>r=)rþrorvr rÿZsemanage_user_exists_localrrrr»Zsemanage_user_del_localrrrqrC) r*r9rdrÐr£rÑr>rr=r+r+r,ráÃs2   zseluserRecords.__deletec CsXz| ¡| |¡| ¡Wn4tyR}z|j d¡|‚WYd}~n d}~00dSr‹)r|Ú_seluserRecords__deleterJrvrqrãr+r+r,r­äs   zseluserRecords.deletec Csˆt|jƒ\}}|dkr"ttdƒƒ‚z,| ¡|D]}| t|ƒ¡q0| ¡Wn4ty‚}z|j d¡|‚WYd}~n d}~00dSrä) Úsemanage_user_list_localrorvr r|rÚsemanage_user_get_namerJrqrèr+r+r,r{îs   zseluserRecords.deleteallrcCs¨i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]^}t|ƒ}t|j|ƒ\}}|dkrxttdƒ|ƒ‚d |¡}t |ƒt |ƒt |ƒ|f|t|ƒ<qD|S)NrzCould not list SELinux usersz Could not list roles for user %srº) rroréZsemanage_user_listrvr rrr»Zsemanage_user_get_prefixZsemanage_user_get_mlslevelr)r*ržrórdrÑr9rrr+r+r,r“üs   "zseluserRecords.get_allcCs†g}| d¡}t| ¡ƒD]f}||ds6||drf| d||d||d||d|f¡q| d||d|f¡q|S)NTrRr›z-a -L %s -r %s -R '%s' %srz -a -R '%s' %srørúr+r+r,rs 0zseluserRecords.customizedrRc Cs| |¡}t|ƒdkrdSt| ¡ƒ}tdkrÆ|r|tddtdƒtdƒtdƒfƒtdtdƒtd ƒtd ƒtd ƒtd ƒfƒ|D]B}td |||dt||dƒt||dƒ||dfƒq€n>|râtdtdƒtd ƒfƒ|D]}td|||dfƒqædS)NrrRz %-15s %-10s %-10s %-30sr ZLabelingzMLS/z%-15s %-10s %-10s %-30s %s rûZPrefixz MCS Levelz MCS Rangez SELinux Rolesz%-15s %-10s %-10s %-30s %sr›rz %-15s %s z%-15s %s)r“r`r´rùrxrœr rf©r*r�ržrórùrÐr+r+r,rŸs    *BzseluserRecords.list)N)r)rRr)rMrNrOr-rÃrr¥rrràrr­r{r“rrŸr+r+r+r,rÂs 7  8 !   rÂc@sˆeZdZgZd dd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z d!dd„Zd"dd„Zdd„Zd#dd„ZdS)$Ú portRecordsNcCsHt ||¡z$ttt tjd¡ƒddƒ|_WntyBYn0dS)NZ port_typerÚtypes)rhr-rŸrrr¶Ú ATTRIBUTEÚ valid_typesÚ RuntimeErrorrƒr+r+r,r-1s  $ zportRecords.__init__c Csêttttdœ}|| ¡vr$||}n ttdƒƒ‚|dkrDttdƒƒ‚t|tƒr\|  dd¡}n|f}t |ƒdkr€t |dƒ}}nt |dƒ}t |dƒ}|dkr¬ttd ƒƒ‚t |j |||ƒ\}} |dkrÞttd ƒj||d �ƒ‚| |||fS) N)ZtcpZudpZsctpZdccpz0Protocol has to be one of udp, tcp, dccp or sctpr zPort is requiredr/rRréÿÿz Invalid Portz)Could not create a key for {proto}/{port}©ÚprotoÚport)ZSEMANAGE_PROTO_TCPZSEMANAGE_PROTO_UDPZSEMANAGE_PROTO_SCTPZSEMANAGE_PROTO_DCCPrùrvr rkr7r¦r`ÚintZsemanage_port_key_createror ) r*r#r"Z protocolsÚproto_dZportsÚhighÚlowrdrÐr+r+r,Ú__genkey8s.ý         zportRecords.__genkeyc Cs>tdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚t |¡}||jvrVttdƒ|ƒ‚| ||¡\}}}}t|j ƒ\} } | dkr–ttdƒj ||d�ƒ‚t | |ƒt | ||ƒt |j ƒ\} } | dkrØttd ƒj ||d�ƒ‚t|j | d ƒ} | dk�rttd ƒj ||d�ƒ‚t|j | d ƒ} | dk�r4ttd ƒj ||d�ƒ‚t|j | |ƒ} | dk�rbttdƒj ||d�ƒ‚tdk�r¤|dk�r¤t|j | |ƒ} | dk�r¤ttdƒj ||d�ƒ‚t|j | | ƒ} | dk�rÒttdƒj ||d�ƒ‚t|j || ƒ} | dk�rttdƒj ||d�ƒ‚t| ƒt|ƒt| ƒ|j d|t |¡d d ||f¡dS)NrRr rúType is requiredú'Type %s is invalid, must be a port typerz(Could not create port for {proto}/{port}r!z+Could not create context for {proto}/{port}Úsystem_uz5Could not set user in port context for {proto}/{port}Úobject_rz5Could not set role in port context for {proto}/{port}z5Could not set type in port context for {proto}/{port}z;Could not set mls fields in port context for {proto}/{port}z-Could not set port context for {proto}/{port}z!Could not add port {proto}/{port}z8resrc=port op=add lport=%s proto=%s tcontext=%s:%s:%s:%s)rxrgrvr rrÚget_real_type_namerÚ_portRecords__genkeyZsemanage_port_createror Zsemanage_port_set_protoZsemanage_port_set_rangeÚsemanage_context_createÚsemanage_context_set_userÚsemanage_context_set_roleÚsemanage_context_set_typeÚsemanage_context_set_mlsZsemanage_port_set_conÚsemanage_port_modify_localÚsemanage_context_freeÚsemanage_port_key_freeÚsemanage_port_freerqrGrÚgetprotobyname) r*r#r"r;r¸rÐr%r'r&rdrÚconr+r+r,rÒXsR           zportRecords.__addcCsX| ¡| ||¡rror Zsemanage_port_queryÚsemanage_port_get_conr3rgr2r4r6r7rqrGrr8) r*r#r"r;ÚsetyperÐr%r'r&rdr£rr9r+r+r,rߥs:      zportRecords.__modifycCs$| ¡| ||||¡| ¡dSr#)r|r;rJ)r*r#r"r;rDr+r+r,ràÏszportRecords.modifyc Csêt|jƒ\}}|dkr"ttdƒƒ‚| ¡|D]®}t|ƒ}t|ƒ}t|ƒ}t|ƒ}d||f}|  ||¡\} } }}|dkrŠttdƒ|ƒ‚t |j| ƒ}|dkr®ttdƒ|ƒ‚t | ƒ||krÂ|}|j   d|t |¡f¡q.| ¡dS)NrzCould not list the portsú%s-%sr½zCould not delete the port %sú&resrc=port op=delete lport=%s proto=%s)Úsemanage_port_list_localrorvr r|Úsemanage_port_get_protoÚsemanage_port_get_proto_strÚsemanage_port_get_lowÚsemanage_port_get_highr.Úsemanage_port_del_localr6rqrGrr8rJ) r*rdÚplistr#r"Ú proto_strr'r&Zport_strrÐr%r+r+r,r{Ôs*   zportRecords.deleteallc Csô| ||¡\}}}}t|j|ƒ\}}|dkrBttdƒj||d�ƒ‚|s\ttdƒj||d�ƒ‚t|j|ƒ\}}|dkrŠttdƒj||d�ƒ‚|s¤ttdƒj||d�ƒ‚t|j|ƒ}|dkrÎttdƒj||d�ƒ‚t|ƒ|j   d|t   |¡f¡dS)Nrr=r!rBz;Port {proto}/{port} is defined in policy, cannot be deletedz$Could not delete port {proto}/{port}rF) r.r>rorvr r Zsemanage_port_exists_localrLr6rqrGrr8r?r+r+r,ráòs  zportRecords.__deletecCs | ¡| ||¡| ¡dSr#)r|Ú_portRecords__deleterJ)r*r#r"r+r+r,r­s zportRecords.deleterc Cs˜i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]N}t|ƒ}t|ƒ}t|ƒ}t |ƒ}t |ƒ} t |ƒ} t |ƒ} ||f|| | | f<qD|S)NrúCould not list ports) rGrorMÚsemanage_port_listrvr rCÚsemanage_context_get_typeÚsemanage_context_get_mlsrHrIrJrK) r*ržrórdr#r9ÚctypeÚlevelr"rNr'r&r+r+r,r“ s   zportRecords.get_allc CsÔi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]Š}t|ƒ}t|ƒ}t|ƒ}t |ƒ}t |ƒ} t |ƒ} ||f|  ¡vr”g|||f<| | kr´|||f  d| ¡qD|||f  d| | f¡qD|S)NrrPz%dz%d-%d)rGrorMrQrvr rCrRrHrIrJrKrùr4) r*ržrórdr#r9rTr"rNr'r&r+r+r,Úget_all_by_type!s&   zportRecords.get_all_by_typecCs¨g}| d¡}t| ¡ƒD]ˆ}|d|dkr6|dnd|d|df}||dr‚| d||d||d|d|f¡q| d||d|d|f¡q|S)NTrrRrEz-a -t %s -r '%s' -p %s %sr›z-a -t %s -p %s %srø©r*rrórÐr#r+r+r,r9s , ,"zportRecords.customizedrRcCsœ| |¡}t|ƒdkrdSt| ¡ƒ}|rHtdtdƒtdƒtdƒfƒ|D]J}d|}|d||d7}||dd…D]}|d |7}q|t|ƒqLdS) Nrz%-30s %-8s %s zSELinux Port TypeZProtoú Port Numberz %-30s %-8s ú%srRú, %s)rVr`r´rùrœr ©r*r�ržrórùr�rÎrr+r+r,rŸDs   zportRecords.list)N)r)r)rRr)rMrNrOrr-r.r<r¥r:r;ràr{rOr­r“rVrrŸr+r+r+r,r-s  :  *   rc@sˆeZdZgZd dd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z d!dd„Zd"dd„Zdd„Zd#dd„ZdS)$Ú ibpkeyRecordsNcCsTt ||¡z6ttt |j¡ƒdgd�}tdd„| ¡Dƒƒ|_ Wn Yn0dS)NZ ibpkey_type©Úattrscss|]}t|ƒVqdSr#©r7r™r+r+r,Ú [rˆz)ibpkeyRecords.__init__..) rhr-rrrrÚget_store_policyrjr´Úresultsr©r*rlÚqr+r+r,r-Ws  zibpkeyRecords.__init__cCs¬|dkrttdƒƒ‚| d¡}t|ƒdkr>t|ddƒ}}nt|ddƒ}t|ddƒ}|dkrnttdƒƒ‚t|j|||ƒ\}}|dkr ttdƒj||d �ƒ‚||||fS) Nr zSubnet Prefix is requiredr/rRrr z Invalid Pkeyz1Could not create a key for {subnet_prefix}/{pkey}©Ú subnet_prefixÚpkey)rvr r¦r`r$Zsemanage_ibpkey_key_createror )r*rgrfZpkeysr&r'rdrÐr+r+r,r(_s    zibpkeyRecords.__genkeyc Cs tdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚t |¡}||jvrVttdƒ|ƒ‚| ||¡\}}}}t|j ƒ\}} |dkr–ttdƒj ||d�ƒ‚t |j | |ƒt | ||ƒt |j ƒ\}} |dkrÜttd ƒj ||d�ƒ‚t|j | d ƒ}|dk�r ttd ƒj ||d�ƒ‚t|j | d ƒ}|dk�r8ttd ƒj ||d�ƒ‚t|j | |ƒ}|dk�rfttdƒj ||d�ƒ‚tdk�r¨|dk�r¨t|j | |ƒ}|dk�r¨ttdƒj ||d�ƒ‚t|j | | ƒ}|dk�rÖttdƒj ||d�ƒ‚t|j || ƒ}|dk�rttdƒj ||d�ƒ‚t| ƒt|ƒt| ƒdS)NrRr rr)ú)Type %s is invalid, must be a ibpkey typerz2Could not create ibpkey for {subnet_prefix}/{pkey}rez3Could 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})rxrgrvr rrr-rÚ_ibpkeyRecords__genkeyZsemanage_ibpkey_createror Z!semanage_ibpkey_set_subnet_prefixZsemanage_ibpkey_set_ranger/r0r1r2r3Zsemanage_ibpkey_set_conÚsemanage_ibpkey_modify_localr5Úsemanage_ibpkey_key_freeÚsemanage_ibpkey_free) r*rgrfr;r¸rÐr'r&rdrr9r+r+r,rÒrsP          zibpkeyRecords.__addcCsX| ¡| ||¡rttdƒƒ‚|jD]X}t|ƒ}t|ƒ}|dkrbqDt|ƒ}t |j|ƒ\}}t |ƒ} t |ƒ} ||f|| | |f<qD|S)NrúCould not list ibpkeysZreserved_ibpkey_t) rurorMÚsemanage_ibpkey_listrvr rtrRrSrvrwrx) r*ržrórdrzr9rTrUrfr'r&r+r+r,r“s"  zibpkeyRecords.get_allc CsÔi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]Š}t|ƒ}t|ƒ}t|j|ƒ\}}t |ƒ}t |ƒ} ||f|  ¡vr”g|||f<|| kr´|||f  d|¡qD|||f  d|| f¡qD|S)Nrr|ú0x%xz 0x%x-0x%x) rurorMr}rvr rtrRrvrwrxrùr4) r*ržrórdrzr9rTrfr'r&r+r+r,rV-s$   zibpkeyRecords.get_all_by_typecCs¨g}| d¡}t| ¡ƒD]ˆ}|d|dkr6|dnd|d|df}||dr‚| d||d||d|d|f¡q| d||d|d|f¡q|S)NTrrRrEz-a -t %s -r '%s' -x %s %sr›z-a -t %s -x %s %srørWr+r+r,rDs , ,"zibpkeyRecords.customizedrRcCsœ| |¡}| ¡}t|ƒdkr"dS|rDtdtdƒtdƒtdƒfƒt|ƒD]J}d|}|d||d7}||dd…D]}|d |7}q|t|ƒqLdS) Nrú%-30s %-18s %s zSELinux IB Pkey TypeZ Subnet_Prefixz Pkey Numberú %-30s %-18s rYrRrZ©rVrùr`rœr r´r[r+r+r,rŸPs   zibpkeyRecords.list)N)r)r)rRr)rMrNrOrr-riror¥rmrnràr{r{r­r“rVrrŸr+r+r+r,r\Ss 8  &   r\c@sˆeZdZgZd dd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z d!dd„Zd"dd„Zdd„Zd#dd„ZdS)$ÚibendportRecordsNcCsTt ||¡z6ttt |j¡ƒdgd�}tdd„| ¡Dƒƒ|_ Wn Yn0dS)NZibendport_typer]css|]}t|ƒVqdSr#r_r™r+r+r,r`grˆz,ibendportRecords.__init__..) rhr-rrrrrarjÚsetrbrrcr+r+r,r-cs  zibendportRecords.__init__cCsr|dkrttdƒƒ‚t|ƒ}|dks,|dkr8ttdƒƒ‚t|j||ƒ\}}|dkrhttdƒj||d�ƒ‚|||fS) Nr zIB device name is requiredéÿrRzInvalid Port Numberrz=Could not create a key for ibendport {ibdev_name}/{ibendport}©Ú ibdev_nameÚ ibendport)rvr r$Zsemanage_ibendport_key_createror )r*r‡r†r#rdrÐr+r+r,r(ks  zibendportRecords.__genkeyc Cstdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚t |¡}||jvrVttdƒ|ƒ‚| ||¡\}}}t|j ƒ\}}|dkr”ttdƒj ||d�ƒ‚t |j ||ƒt ||ƒt |j ƒ\}} |dkrØttd ƒj ||d�ƒ‚t|j | d ƒ}|dk�rttd ƒj ||d�ƒ‚t|j | d ƒ}|dk�r4ttd ƒj ||d�ƒ‚t|j | |ƒ}|dk�rbttdƒj ||d�ƒ‚tdk�r¤|dk�r¤t|j | |ƒ}|dk�r¤ttdƒj ||d�ƒ‚t|j || ƒ}|dk�rÒttdƒj ||d�ƒ‚t|j ||ƒ}|dk�rttdƒj ||d�ƒ‚t| ƒt|ƒt|ƒdS)NrRr rr)ú-Type %s is invalid, must be an ibendport typerz2Could not create ibendport for {ibdev_name}/{port}©r†r#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})rxrgrvr rrr-rÚ_ibendportRecords__genkeyZsemanage_ibendport_createror Z!semanage_ibendport_set_ibdev_nameZsemanage_ibendport_set_portr/r0r1r2r3Zsemanage_ibendport_set_conÚsemanage_ibendport_modify_localr5Úsemanage_ibendport_key_freeÚsemanage_ibendport_free) r*r‡r†r;r¸rÐr#rdrr9r+r+r,rÒysP          zibendportRecords.__addcCsX| ¡| ||¡rttdƒƒ‚|jD]N}t|ƒ}t|ƒ}|dkrbqDt|ƒ}t |j|ƒ\}}t |ƒ} ||f|| |f<qD|S)NrúCould not list ibendportsZreserved_ibendport_t) r–rorMÚsemanage_ibendport_listrvr r•rRrSr—r˜) r*ržrórdr‡r9rTrUr†r#r+r+r,r“s   zibendportRecords.get_allc Cs¨i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]^}t|ƒ}t|ƒ}t|j|ƒ\}}t |ƒ}||f|  ¡vrŒg|||f<|||f  d|¡qD|S)Nrr›r~) r–rorMrœrvr r•rRr—r˜rùr4) r*ržrórdr‡r9rTr†r#r+r+r,rV0s   z ibendportRecords.get_all_by_typec Cs„g}| d¡}t| ¡ƒD]d}||drZ| d||d||d|d|df¡q| d||d|d|df¡q|S)NTrRz-a -t %s -r '%s' -z %s %srz-a -t %s -z %s %srørúr+r+r,rCs  0&zibendportRecords.customizedrRcCsœ| |¡}| ¡}t|ƒdkr"dS|rDtdtdƒtdƒtdƒfƒt|ƒD]J}d|}|d||d7}||dd…D]}|d |7}q|t|ƒqLdS) NrrzSELinux IB End Port TypezIB Device NamerXr€rYrRrZr�r[r+r+r,rŸNs   zibendportRecords.list)N)r)r)rRr)rMrNrOrr-rŠr�r¥rŽr�ràr{ršr­r“rVrrŸr+r+r+r,r‚_s 7  &   r‚c@s~eZdZgZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z ddd„Zdd„Zd dd„ZdS)!Ú nodeRecordsNcCsRt ||¡ddg|_z$ttt tjd¡ƒddƒ|_WntyLYn0dS)NÚipv4Zipv6Z node_typerr) rhr-ÚprotocolrŸrrr¶rrrrƒr+r+r,r-as   $ znodeRecords.__init__c CsÒ|}|}d}|dkr ttdƒƒ‚t|ƒdks8|ddkrdt ||¡}t|jƒ}t|jƒ}d|j}z|j   |¡}Wnttdƒƒ‚Yn0zt   |¡}Wn(|dkr´t j }n ttdƒƒ‚Yn0||||fS)Nr zNode Address is requiredrrêzipv%dzUnknown or missing protocolrž)rvr r`Ú ipaddressÚ ip_networkr7Únetwork_addressÚnetmaskÚversionrŸÚindexrr8Z IPPROTO_IPIP) r*ÚaddrÚmaskrŸZnewaddrZnewmaskZ newprotocolr�Zaudit_protocolr+r+r,Úvalidateis*    znodeRecords.validatec Csf| |||¡\}}}}tdkr4|dkr,d}nt|ƒ}|dkrHttdƒƒ‚t |¡}||jvrlttdƒ|ƒ‚t|j |||ƒ\}}|dkr˜ttdƒ|ƒ‚t |j ƒ\}} |dkr¾ttdƒ|ƒ‚t | |ƒt |j | ||ƒ}t |j ƒ\}} |dkrþttd ƒ|ƒ‚t|j | ||ƒ}|dk�r(ttd ƒ|ƒ‚t|j | d ƒ}|dk�rPttd ƒ|ƒ‚t|j | d ƒ}|dk�rxttdƒ|ƒ‚t|j | |ƒ}|dk�r ttdƒ|ƒ‚tdk�rÜ|dk�rÜt|j | |ƒ}|dk�rÜttdƒ|ƒ‚t|j | | ƒ}|dk�rttdƒ|ƒ‚t|j || ƒ}|dk�r,ttdƒ|ƒ‚t| ƒt|ƒt| ƒ|j d|||d d ||f¡dS)NrRr rzSELinux node type is requiredú'Type %s is invalid, must be a node typerúCould not create key for %szCould not create addr for %súCould not create context for %szCould not set mask for %sr+z)Could not set user in addr context for %sr,z)Could not set role in addr context for %sz)Could not set type in addr context for %sz/Could not set mls fields in addr context for %sz!Could not set addr context for %szCould not add addr %szCresrc=node op=add laddr=%s netmask=%s proto=%s tcontext=%s:%s:%s:%s)r¨rxrgrvr rrr-rÚsemanage_node_key_createroZsemanage_node_createZsemanage_node_set_protoZsemanage_node_set_addrr/Zsemanage_node_set_maskr0r1r2r3Zsemanage_node_set_conÚsemanage_node_modify_localr5Úsemanage_node_key_freeÚsemanage_node_freerqrG) r*r¦r§r"r;rTÚ audit_protordrÐÚnoder9r+r+r,rÒ‹s^           znodeRecords.__addcCsX| ¡| |||¡r:ttdƒ|ƒ| |||||¡n| |||||¡| ¡dS)Nz*Addr %s already defined, modifying instead)r|Ú_nodeRecords__existsrœr Ú_nodeRecords__modifyÚ_nodeRecords__addrJ)r*r¦r§r"r;rTr+r+r,r¥Ís znodeRecords.addcCsv| |||¡\}}}}t|j|||ƒ\}}|dkrBttdƒ|ƒ‚t|j|ƒ\}}|dkrjttdƒ|ƒ‚t|ƒ|S)Nrrªú%Could not check if addr %s is defined)r¨r¬rorvr Úsemanage_node_existsr®©r*r¦r§r"r°rdrÐr£r+r+r,rÛÖsznodeRecords.__existsc CsŠ| |||¡\}}}}|dkr2|dkr2ttdƒƒ‚t |¡}|rZ||jvrZttdƒ|ƒ‚t|j|||ƒ\}}|dkr†ttdƒ|ƒ‚t|j|ƒ\}} |dkr®ttdƒ|ƒ‚| sÂttdƒ|ƒ‚t |j|ƒ\}} |dkrêttdƒ|ƒ‚t | ƒ} t d k�r|dk�rt |j| t |ƒƒ|dk�r0t|j| |ƒt|j|| ƒ}|dk�rXttd ƒ|ƒ‚t|ƒt| ƒ|j d |||d d ||f¡dS)Nr r@r©rrªrµúAddr %s is not definedzCould not query addr %srRzCould not modify addr %szFresrc=node op=modify laddr=%s netmask=%s proto=%s tcontext=%s:%s:%s:%sr+r,)r¨rvr rrr-rr¬ror¶Zsemanage_node_queryÚsemanage_node_get_conrxr3rgr2r­r®r¯rqrG) r*r¦r§r"r;rDr°rdrÐr£r±r9r+r+r,rßäs8    znodeRecords.__modifycCs&| ¡| |||||¡| ¡dSr#)r|r³rJ)r*r¦r§r"r;rDr+r+r,rà sznodeRecords.modifycCs| |||¡\}}}}t|j|||ƒ\}}|dkrBttdƒ|ƒ‚t|j|ƒ\}}|dkrjttdƒ|ƒ‚|s~ttdƒ|ƒ‚t|j|ƒ\}}|dkr¦ttdƒ|ƒ‚|sºttdƒ|ƒ‚t|j|ƒ}|dkrÞttdƒ|ƒ‚t|ƒ|j   d|||f¡dS)Nrrªrµr¸z/Addr %s is defined in policy, cannot be deletedzCould not delete addr %sz1resrc=node op=delete laddr=%s netmask=%s proto=%s) r¨r¬rorvr r¶Zsemanage_node_exists_localZsemanage_node_del_localr®rqrGr·r+r+r,rás& znodeRecords.__deletecCs"| ¡| |||¡| ¡dSr#)r|Ú_nodeRecords__deleterJ)r*r¦r§r"r+r+r,r­,sznodeRecords.deletecCspt|jƒ\}}|dkr"ttdƒƒ‚| ¡|D]4}| t|j|ƒdt|j|ƒd|jt |ƒ¡q.|  ¡dS)Nrz!Could not deleteall node mappingsrR) Úsemanage_node_list_localrorvr r|rºÚsemanage_node_get_addrÚsemanage_node_get_maskrŸÚsemanage_node_get_protorJ)r*rdZnlistr±r+r+r,r{1s 2znodeRecords.deleteallrc Csªi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]`}t|ƒ}t|j|ƒ}t|j|ƒ}|j t |ƒ}t |ƒt |ƒt |ƒt|ƒf||d|d|f<qD|S)NrzCould not list addrsrR)r»roÚilistZsemanage_node_listrvr r¹r¼r½rŸr¾Úsemanage_context_get_userÚsemanage_context_get_rolerRrS) r*ržrórdr±r9r¦r§r"r+r+r,r“;s    0znodeRecords.get_allc Cs�g}| d¡}t| ¡ƒD]p}||dr`| d|d|d||d||d|df¡q| d|d|d||d|df¡q|S)NTrz-a -M %s -p %s -t %s -r '%s' %srRr›rz-a -M %s -p %s -t %s %srørúr+r+r,rMs  6,znodeRecords.customizedrRc Csú| |¡}t|ƒdkrdSt| ¡ƒ}|r6tddƒtr°|D]n}d}|D]}|dt|ƒ}qJtd|d|d|d||d||d||dt||d d ƒfƒq>nF|D]@}td |d|d|d||d||d||dfƒq´dS) Nrz%-18s %-18s %-5s %-5s )z IP AddressZNetmaskÚProtocolÚContextr ú z%-18s %-18s %-5s %s:%s:%s:%s rRr›rFz%-18s %-18s %-5s %s:%s:%s )r“r`r´rùrœrxr7rf)r*r�ržrórùrÐÚvalÚfieldsr+r+r,rŸWs    PznodeRecords.list)N)r)rRr)rMrNrOrr-r¨r´r¥r²r³ràrºr­r{r“rrŸr+r+r+r,r�]s "B (  r�c@sreZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z ddd„Z dd„Z ddd„ZdS)ÚinterfaceRecordsNcCst ||¡dSr#r‚rƒr+r+r,r-lszinterfaceRecords.__init__cCstdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚t|j|ƒ\}}|dkrZttdƒ|ƒ‚t|jƒ\}}|dkr€ttdƒ|ƒ‚t|j||ƒ}t|jƒ\}}|dkr´ttdƒ|ƒ‚t |j|d ƒ}|dkrÚttd ƒ|ƒ‚t |j|d ƒ}|dk�rttd ƒ|ƒ‚t |j||ƒ}|dk�r*ttd ƒ|ƒ‚tdk�rf|dk�rft |j||ƒ}|dk�rfttdƒ|ƒ‚t |j||ƒ}|dk�rŽttdƒ|ƒ‚t|j||ƒ}|dk�r¶ttdƒ|ƒ‚t|j||ƒ}|dk�rÞttdƒ|ƒ‚t|ƒt|ƒt|ƒ|j d|d d ||f¡dS)NrRr rúSELinux Type is requiredrrªz!Could not create interface for %sr«r+z.Could not set user in interface context for %sr,z.Could not set role in interface context for %sz.Could not set type in interface context for %sz4Could not set mls fields in interface context for %sz&Could not set interface context for %sz$Could not set message context for %szCould not add interface %sz4resrc=interface op=add netif=%s tcontext=%s:%s:%s:%s)rxrgrvr Úsemanage_iface_key_createroZsemanage_iface_createZsemanage_iface_set_namer/r0r1r2r3Zsemanage_iface_set_ifconZsemanage_iface_set_msgconÚsemanage_iface_modify_localr5Úsemanage_iface_key_freeÚsemanage_iface_freerqrG)r*Ú interfacer;rTrdrÐÚifacer9r+r+r,rÒosT       zinterfaceRecords.__addcCsL| ¡| |¡r2ttdƒ|ƒ| |||¡n| |||¡| ¡dS)Nz/Interface %s already defined, modifying instead)r|Ú_interfaceRecords__existsrœr Ú_interfaceRecords__modifyÚ_interfaceRecords__addrJ)r*rÍr;rTr+r+r,r¥©s  zinterfaceRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)Nrrªú*Could not check if interface %s is defined)rÉrorvr Úsemanage_iface_existsrË©r*rÍrdrÐr£r+r+r,rÛ²szinterfaceRecords.__existsc Cs>|dkr|dkrttdƒƒ‚t|j|ƒ\}}|dkrDttdƒ|ƒ‚t|j|ƒ\}}|dkrlttdƒ|ƒ‚|s€ttdƒ|ƒ‚t|j|ƒ\}}|dkr¨ttdƒ|ƒ‚t|ƒ}tdkrÒ|dkrÒt|j|t |ƒƒ|dkrèt |j||ƒt |j||ƒ}|dk�rttd ƒ|ƒ‚t |ƒt |ƒ|j d |d d ||f¡dS) Nr r@rrªrÒúInterface %s is not definedzCould not query interface %srRzCould not modify interface %sz7resrc=interface op=modify netif=%s tcontext=%s:%s:%s:%sr+r,)rvr rÉrorÓZsemanage_iface_queryÚsemanage_iface_get_ifconrxr3rgr2rÊrËrÌrqrG) r*rÍr;rDrdrÐr£rÎr9r+r+r,rß¾s0  zinterfaceRecords.__modifycCs"| ¡| |||¡| ¡dSr#)r|rÐrJ)r*rÍr;rDr+r+r,rààszinterfaceRecords.modifycCsàt|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚|sdttdƒ|ƒ‚t|j|ƒ\}}|dkrŒttdƒ|ƒ‚|s ttdƒ|ƒ‚t|j|ƒ}|dkrÄttdƒ|ƒ‚t|ƒ|j  d|¡dS)NrrªrÒrÕz4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s) rÉrorvr rÓZsemanage_iface_exists_localZsemanage_iface_del_localrËrqrGrÔr+r+r,ráås$ zinterfaceRecords.__deletecCs| ¡| |¡| ¡dSr#)r|Ú_interfaceRecords__deleterJ)r*rÍr+r+r,r­þs zinterfaceRecords.deletecCsNt|jƒ\}}|dkr"ttdƒƒ‚| ¡|D]}| t|ƒ¡q.| ¡dS)Nrz(Could not delete all interface mappings)Úsemanage_iface_list_localrorvr r|r×Úsemanage_iface_get_namerJ)r*rdrér�r+r+r,r{ s zinterfaceRecords.deleteallrcCszi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚|jD]0}t|ƒ}t|ƒt|ƒt |ƒt |ƒf|t |ƒ<qD|S)NrzCould not list interfaces) rØror¿Zsemanage_iface_listrvr rÖrÀrÁrRrSrÙ)r*ržrórdrÍr9r+r+r,r“ s  &zinterfaceRecords.get_allcCspg}| d¡}t| ¡ƒD]P}||drP| d||d||d|f¡q| d||d|f¡q|S)NTrz-a -t %s -r '%s' %sr›z -a -t %s %srørúr+r+r,r s  &zinterfaceRecords.customizedrRc CsÈ| |¡}t|ƒdkrdSt| ¡ƒ}|rBtdtdƒtdƒfƒtrŽ|D]@}td|||d||d||dt||dd ƒfƒqJn6|D]0}td |||d||d||dfƒq’dS) Nrz %-30s %s zSELinux InterfacerÃz%-30s %s:%s:%s:%s rRr›rFz%-30s %s:%s:%s )r“r`r´rùrœr rxrfrr+r+r,rŸ& s   @zinterfaceRecords.list)N)r)rRr)rMrNrOr-rÑr¥rÏrÐràr×r­r{r“rrŸr+r+r+r,rÇjs :  "  rÇc@s¤eZdZgZd(dd„Zdd„Zdd„Zdd „Zd)d d „Zd d„Z d*dd„Z d+dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd,d!d"„Zd#d$„Zd-d&d'„ZdS).ÚfcontextRecordsNcCsvt ||¡zLttt tjd¡ƒddƒ|_|jttt tjd¡ƒddƒ7_WntyjYn0i|_i|_ d|_ z`t t   ¡dƒ}| ¡D]<}| ¡}t|ƒdkr°q–| d¡r¼q–| ¡\}}||j|<q–| ¡WntyðYn0zjt t  ¡dƒ}| ¡D]F}| ¡}t|ƒdk�r(�q | d¡�r8�q | ¡\}}||j |<�q | ¡Wnt�ypYn0dS)NZ file_typerrZ device_nodeFrú#)rhr-rŸrrr¶rrrÚequivÚ equiv_distÚ equal_indrîr_Úselinux_file_context_subs_pathÚ readlinesÚstripr`r³r¦rñÚIOErrorZ#selinux_file_context_subs_dist_path)r*rlrör�ÚtargetÚ substituter+r+r,r-: sF  ,            zfcontextRecords.__init__cCsš|jrŒt ¡}d|}t|dƒ}|j ¡D]}| d||j|f¡q*| ¡zt  |t  |¡t j ¡Wn Yn0t  ||¡d|_t  |¡dS)Nz%s.tmpÚwz%s %s F)rÞr_rßrîrÜrùÚwriterñr¡ÚchmodÚstatÚST_MODEÚrenamerhrJ)r*Z subs_fileZtmpfilerörãr+r+r,rJ` s  zfcontextRecords.commitc CsD| ¡|dkr,|ddkr,ttdƒ|ƒ‚|dkrP|ddkrPttdƒ|ƒ‚||j ¡vr²ttdƒ|ƒ||j|<d|_|j dt   d|d ¡t   d |d ¡f¡|  ¡dS|  |¡|j|j fD]6}|D],}| |d¡rÐttd ƒ||||fƒ‚qÐqÈ|j d t   d|d ¡t   d |d ¡f¡||j|<d|_|  ¡dS) Nrêéÿÿÿÿz=Target %s is not valid. Target is not allowed to end with '/'zESubstitute %s is not valid. Substitute is not allowed to end with '/'z:Equivalence class for %s already exists, modifying insteadTú$resrc=fcontext op=modify-equal %s %sÚsglobrÚtglobz4File spec %s conflicts with equivalency rule '%s %s'z!resrc=fcontext op=add-equal %s %s)r|rvr rÜrùrœrÞrqrGr$Úaudit_encode_nv_stringrJr¨rÝr³)r*rãräÚfdictr�r+r+r,Ú add_equalp s* ( ( zfcontextRecords.add_equalc Csj| ¡||j ¡vr&ttdƒ|ƒ‚||j|<d|_|j dt  d|d¡t  d|d¡f¡|  ¡dS)Nz'Equivalence class for %s does not existTrìrírrî) r|rÜrùrvr rÞrqrGr$rïrJ)r*rãrär+r+r,Ú modify_equal� s (zfcontextRecords.modify_equalr+cCs°t|jƒ\}}|dkr&ttdƒ|ƒ‚|dkr2d}t|j||ƒ}|dkrXttdƒ|ƒ‚t|j|dƒ}|dkr~ttdƒ|ƒ‚tdkr¬t|j|d ƒ}|dkr¬ttd ƒ|ƒ‚|S) Nrr«r r+z)Could not set user in file context for %sr,z)Could not set role in file context for %srRrú/Could not set mls fields in file context for %s)r/rorvr r0r1rxr3)r*rãrrdr9r+r+r,Ú createcon˜ s zfcontextRecords.createconcCs˜|dks| d¡dkr"ttdƒƒ‚| d¡dkr>ú1Type %s is invalid, must be a file or device typerrªz$Could not create file context for %sz)Could not set type in file context for %sróú!Could not set file context for %sz!Could not add file context for %sr+z6resrc=fcontext op=add %s ftype=%s tcontext=%s:%s:%s:%srîr,)r¨rxrgrvr rrr-rÚsemanage_fcontext_key_createroÚ file_typesZsemanage_fcontext_createZsemanage_fcontext_set_exprrôr2r3Úsemanage_fcontext_set_conZsemanage_fcontext_set_typeÚsemanage_fcontext_modify_localr5Úsemanage_fcontext_key_freeÚsemanage_fcontext_freerqrGr$rïÚftype_to_audit) r*rãr¸Úftyper;rrdrÐÚfcontextr9r+r+r,rÒ¹ sN          zfcontextRecords.__addcCsV| ¡| ||¡r8ttdƒ|ƒ| |||||¡n| |||||¡| ¡dS)Nz6File context for %s already defined, modifying instead)r|Ú_fcontextRecords__existsrœr Ú_fcontextRecords__modifyÚ_fcontextRecords__addrJ)r*rãr¸rr;rr+r+r,r¥ï s  zfcontextRecords.addcCsŽt|j|t|ƒ\}}|dkr.ttdƒ|ƒ‚t|j|ƒ\}}|dkrVttdƒ|ƒ‚|s‚t|j|ƒ\}}|dkr‚ttdƒ|ƒ‚t|ƒ|S)Nrrªú1Could not check if file context for %s is defined)rûrorürvr Úsemanage_fcontext_existsÚsemanage_fcontext_exists_localrÿ©r*rãrrdrÐr£r+r+r,rÛø szfcontextRecords.__existsc Cs¦|dkr$|dkr$|dkr$ttdƒƒ‚|dvrPt |¡}||jvrPttdƒ|ƒ‚| |¡t|j|t|ƒ\}}|dkrˆttdƒ|ƒ‚t |j|ƒ\}}|dkr°ttdƒ|ƒ‚|rîzt |j|ƒ\}} Wn"t yêttdƒ|ƒ‚Yn0nzt |j|ƒ\}}|dk�rttdƒ|ƒ‚|�s.ttd ƒ|ƒ‚zt |j|ƒ\}} Wn$t �yfttdƒ|ƒ‚Yn0|d k�rt| ƒ} | du�rŽ| |¡} td k�r´|dk�r´t|j| t|ƒƒ|dk�rÌt|j| |ƒ|dk�rät|j| |ƒt|j| | ƒ}|dk�r6ttd ƒ|ƒ‚n(t|j| dƒ}|dk�r6ttd ƒ|ƒ‚t|j|| ƒ}|dk�r^ttd ƒ|ƒ‚t|ƒt| ƒ|�sxd}|j dt d|d¡t||d||f¡dS)Nr z"Requires setype, serange or seuser)r rørùrr½rz#Could not query file context for %sú"File context for %s is not definedrørRrúz$Could not modify file context for %sr+z9resrc=fcontext op=modify %s ftype=%s tcontext=%s:%s:%s:%srîr,)rvr rrr-rr¨rûrorürZsemanage_fcontext_queryÚOSErrorr Zsemanage_fcontext_query_localÚsemanage_fcontext_get_conrôrxr3rgr0r2rýrþrÿrrqrGr$rïr) r*rãrDrr;rrdrÐr£rr9r+r+r,rß sf              zfcontextRecords.__modifycCs&| ¡| |||||¡| ¡dSr#)r|rrJ)r*rãrDrr;rr+r+r,ràL szfcontextRecords.modifyc Csät|jƒ\}}|dkr"ttdƒƒ‚| ¡|D]œ}t|ƒ}t|ƒ}t|ƒ}t|j|t |ƒ\}}|dkrxttdƒ|ƒ‚t |j|ƒ}|dkrœttdƒ|ƒ‚t |ƒ|j   dt d|d¡tt|f¡q.i|_d|_| ¡dS)Nrz Could not list the file contextsr½z$Could not delete the file context %sú$resrc=fcontext op=delete %s ftype=%srîT)Úsemanage_fcontext_list_localrorvr r|Úsemanage_fcontext_get_exprÚsemanage_fcontext_get_typeÚsemanage_fcontext_get_type_strrûrüÚsemanage_fcontext_del_localrÿrqrGr$rïrÚfile_type_str_to_optionrÜrÞrJ)r*rdÚflistrrãrÚ ftype_strrÐr+r+r,r{Q s&  (zfcontextRecords.deleteallcCs:||j ¡vr>|j |¡d|_|j dt d|d¡¡dSt|j |t |ƒ\}}|dkrlt t dƒ|ƒ‚t |j |ƒ\}}|dkr”t t dƒ|ƒ‚|sæt|j |ƒ\}}|dkrÀt t dƒ|ƒ‚|rÖt t dƒ|ƒ‚nt t dƒ|ƒ‚t|j |ƒ}|dk�r t t d ƒ|ƒ‚t|ƒ|j d t d|d¡t|f¡dS) NTz!resrc=fcontext op=delete-equal %srîrr½rz;File context for %s is defined in policy, cannot be deletedr z$Could not delete file context for %sr)rÜrùÚpoprÞrqrGr$rïrûrorürvr r rrrÿrr r+r+r,rák s.   zfcontextRecords.__deletecCs | ¡| ||¡| ¡dSr#)r|Ú_fcontextRecords__deleterJ)r*rãrr+r+r,r­Œ s zfcontextRecords.deleterc Cs|rt|jƒ\}|_n„t|jƒ\}|_|dkr:ttdƒƒ‚t|jƒ\}}|dkr\ttdƒƒ‚t|jƒ\}}|dkr~ttdƒƒ‚|j|7_|j|7_i}|jD]Z}t|ƒ}t|ƒ}t |ƒ} t |ƒ} | ròt | ƒt | ƒt | ƒt| ƒf||| f<q¤| ||| f<q¤|S)NrzCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)rrorZsemanage_fcontext_listrvr Zsemanage_fcontext_list_homedirsrrrr rÀrÁrRrS) r*ržrdZ fchomedirsZfclocalrórÚexprrrr9r+r+r,r“‘ s.    &zfcontextRecords.get_allc CsÂg}| d¡}| ¡D]t}||r||drb| dt|d||d||d|df¡q| dt|d||d|df¡qt|jƒr¾|j ¡D]}| d|j||f¡q |S) NTrz-a -f %s -t %s -r '%s' '%s'rRr›rz-a -f %s -t %s '%s'z -a -e %s %s)r“rùr4rr`rÜ)r*rÚ fcon_dictrÐrãr+r+r,r± s   4* zfcontextRecords.customizedrRc Cs˜| |¡}t|ƒdk�r|r:tdtdƒtdƒtdƒfƒ|rH| ¡}n t| ¡ƒ}|D]¨}||rètr°td|d|d||d||d||dt||d d ƒfƒn6td |d|d||d||d||dfƒqXtd |d|dfƒqXt|jƒ�rN|�sN|�r&ttd ƒƒ|j ¡D]}td||j|fƒ�q0t|j ƒ�r”|�rlttdƒƒ|j  ¡D]}td||j |fƒ�qvdS)Nrz%-50s %-18s %s zSELinux fcontextr¸rÃz%-50s %-18s %s:%s:%s:%s rRr›rFz%-50s %-18s %s:%s:%s z%-50s %-18s <>z, SELinux Distribution fcontext Equivalence z%s = %sz% SELinux Local fcontext Equivalence ) r“r`rœr rùr´rxrfrÝrÜ)r*r�ržrZfkeysrÐrãr+r+r,rŸÀ s0   H8    zfcontextRecords.list)N)r+)r r r+)r r r+)r)rRr)rMrNrOrr-rJrñròrôr¨rr¥rrràr{rr­r“rrŸr+r+r+r,rÚ6 s$ &  6 C! rÚc@steZdZddd„Zdd„Zddd„Zd d „Zd d „Zd d„Zdd„Z ddd„Z dd„Z dd„Z dd„Z d dd„ZdS)!ÚbooleanRecordsNcCsªt ||¡i|_d|jd<d|jd<d|jd<d|jd<d|jd<d|jd<zt ¡\}|_t ¡\}}Wng|_d}Yn0|jd ks˜|j|kr d |_nd |_dS) NrRZTRUErZFALSEZONZOFFÚ1Ú0r TF) rhr-Údictr_Zsecurity_get_boolean_namesÚcurrent_booleansrprjÚ modify_local)r*rlrdZptyper+r+r,r-ã s"        zbooleanRecords.__init__cCsNt |¡}t|j|ƒ\}}|dkr2ttdƒ|ƒ‚t|j|ƒ\}}|dkrZttdƒ|ƒ‚|snttdƒ|ƒ‚t|j|ƒ\}}|dkr–ttdƒ|ƒ‚| ¡|j vrºt ||j | ¡ƒnttdƒd  |j   ¡¡ƒ‚|j �r||jv�rt|j||ƒ}|dk�rttdƒ|ƒ‚t|j||ƒ}|dk�r:ttd ƒ|ƒ‚t|ƒt|ƒdS) Nrr½ú(Could not check if boolean %s is definedúBoolean %s is not definedzCould not query file context %sz0You must specify one of the following values: %sz, ú(Could not set active value of boolean %szCould not modify boolean %s)r_Úselinux_boolean_subÚsemanage_bool_key_createrorvr Úsemanage_bool_existsÚsemanage_bool_queryÚupperrÚsemanage_bool_set_valuer»rùr rÚsemanage_bool_set_activeZsemanage_bool_modify_localÚsemanage_bool_key_freeÚsemanage_bool_free)r*r9ÚvaluerdrÐr£rr+r+r,Z__modù s0   zbooleanRecords.__modFc Cs°| ¡|r˜t|ƒ}| ¡ d¡D]j}| ¡}t|ƒdkrttdƒƒ‚|jD]t}g}t|ƒ}| t|ƒ¡|j r”||j vr”| t   |¡¡| t   |¡¡n| |d¡| |d¡|||<qD|Sr6)r7ror8Zsemanage_bool_listrvr r9r4r;r rr_Zsecurity_get_boolean_pendingZsecurity_get_boolean_active)r*ržrórdr:r-r9r+r+r,r“� s"   zbooleanRecords.get_allcCst |¡}t |¡Sr#)r_r$rrZ boolean_descr5r+r+r,Úget_desc˜ s zbooleanRecords.get_desccCst |¡}t |¡Sr#)r_r$rrZboolean_categoryr5r+r+r,Ú get_categoryœ s zbooleanRecords.get_categorycCsFg}| d¡}t| ¡ƒD]&}||r| d||d|f¡q|S)NTz -m -%s %sr›rørúr+r+r,r  s  zbooleanRecords.customizedTc Csætdƒtdƒf}|rT| |¡}t| ¡ƒD]$}||r*td|||dfƒq*dS| |¡}t|ƒdkrndS|r–tdtdƒtdƒtd ƒtd ƒfƒt| ¡ƒD]>}||r¢td ||||d|||d| |¡fƒq¢dS) Nr°r¯z%s=%sr›rz%-30s %s %s %s zSELinux booleanÚStateZDefaultZ Descriptionz%-30s (%-5s,%5s) %s)r r“r´rùrœr`r<)r*r�ržr2Zon_offrórÐr+r+r,rŸ¨ s   $zbooleanRecords.list)N)NF)r)TFF)rMrNrOr-r1ràr3r­r{r4r“r<r=rrŸr+r+r+r,rá s    r)rR)rR)>rÇrÅr_r¡rWr5rèrrEZPROGNAMErrZsetools.policyreprZsetools.typequeryrr ÚgettextÚkwargsÚ version_infoÚ translationr†r Úbuiltinsr7Ú__dict__Ú ImportErrorZ __builtin__rrSrüZSEMANAGE_FCONTEXT_ALLZSEMANAGE_FCONTEXT_REGZSEMANAGE_FCONTEXT_DIRZSEMANAGE_FCONTEXT_CHARZSEMANAGE_FCONTEXT_BLOCKZSEMANAGE_FCONTEXT_SOCKZSEMANAGE_FCONTEXT_LINKZSEMANAGE_FCONTEXT_PIPErrr$Z audit_closer%r"r rTr\rfrgrhr�r®r²r¼rÂrr\r‚r�rÇrÚrr+r+r+r,Úsê    ÿþý  ù ø $$  ik C (M.