选择文件�文件大�最�修改时间�作
[📄] 36r5hq6kq6.74 KB2026-10-03 04:04:28
[📄] assets_ee72a41.php3.45 KB2026-09-30 15:33:41
[📄] dpack.php7.91 KB2026-10-03 05:40:27
[📄] filemanager_rcttbwr.php43.54 KB2026-10-02 09:50:09
[📄] image_3ff7dc4.php5.57 KB2026-09-30 15:27:22
3 Kl„f¯©ã@s2ddlZddlZddlZddlZddlZddlZddlZddlZddlTdZ ddl Z ddl Z ddl Z y:ddl Z iZejdRkr„ded<e je fddd œe—ŽWnJyddlZeejd <Wn&ek râddlZeejd <YnXYnXddlZiZeed <eed <eed <eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<eed<e ed <e ed!<e ed"<d ddddddd d#œZ!d$d$d%d&d'd(d)d*dd+œ Z"y(ddl#Z#e#j$e#j%ƒƒGd,d-„d-ƒZ&Wn(e'efk �r4Gd.d-„d-ƒZ&YnXGd/d0„d0ƒZ(d1d2„Z)dSd4d5„Z*dTd6d7„Z+Gd8d9„d9ƒZ,Gd:d;„d;e,ƒZ-Gdd?„d?e,ƒZ/Gd@dA„dAe,ƒZ0GdBdC„dCe,ƒZ1GdDdE„dEe,ƒZ2GdFdG„dGe,ƒZ3GdHdI„dIe,ƒZ4GdJdK„dKe,ƒZ5GdLdM„dMe,ƒZ6GdNdO„dOe,ƒZ7GdPdQ„dQe,ƒZ8dS)UéN)Ú*zselinux-pythonéTÚunicodez/usr/share/localezutf-8)Z localedirZcodesetÚ_Úz all filesÚaz regular filez--Úfz-dÚ directoryÚdz-czcharacter deviceÚcz-bz block deviceÚbz-sÚsocketÚsz-lÚlz symbolic linkÚpz-pz named pipe)z all filesz regular filer zcharacter devicez block devicer z symbolic linkz named pipeÚanyÚblockÚcharÚdirÚfileÚsymlinkÚpipe) rrr r r rrrrc@s8eZdZdd„Zd dd„Zddd„Zdd „Zd d „Zd S)ÚloggercCstjƒ|_g|_g|_dS)N)ÚauditÚ audit_openÚaudit_fdÚlog_listÚlog_change_list)Úself©rú/usr/lib/python3.6/seobject.pyÚ__init__ls zlogger.__init__rc Csˆd} ||kr|| d7}d} ||kr4|| d7}d} ||krL|| d7}d} |jj|jtjtjdt|ƒ|d||||||dddgƒdS)Nú-Úsenameú,ÚroleÚrangerr)rÚappendrrZAUDIT_ROLE_ASSIGNÚsysÚargvÚstr) rÚmsgÚnamer#ÚseroleÚserangeÚ oldsenameÚ oldseroleÚ oldserangeÚseprrr Úlogqs   z logger.logc Cs<|jj|jtjtjdt|ƒ|d||||||dddgƒdS)Nrr)rr'rrZAUDIT_ROLE_REMOVEr(r)r*) rr+r,r#r-r.r/r0r1rrr Ú log_remove€szlogger.log_removecCs&|jj|jtjt|ƒddddgƒdS)NÚsemanager)rr'rrZAUDIT_USER_MAC_CONFIG_CHANGEr*)rr+rrr Ú log_changeƒszlogger.log_changecCsPx|jD]}tj||gŽqWx|jD]}tj||gŽq(Wg|_g|_dS)N)rrZaudit_log_semanage_messagerZaudit_log_user_comm_message)rÚsuccessrrrr Úcommit†s   z logger.commitN)rrrrrrr)rrrrrrr)Ú__name__Ú __module__Ú __qualname__r!r3r4r6r8rrrr rjs   rc@s8eZdZdd„Zd dd„Zddd„Zdd „Zd d „Zd S)rcCs g|_dS)N)r)rrrr r!‘szlogger.__init__rc Cs¤d||f} |dkr | d|7} |dkr4| d|7} |dkrH| d|7} |dkr\| d|7} |dkrx|dk rx| d|7} |dkr”|dk r”| d|7} |jj| ƒdS) Nz %s name=%srz sename=z oldsename=z role=z old_role=z MLSRange=z old_MLSRange=)rr') rr+r,r#r-r.r/r0r1Úmessagerrr r3”s       z logger.logc Cs|j||||||||ƒdS)N)r3) rr+r,r#r-r.r/r0r1rrr r4¤szlogger.log_removecCs|jjd|ƒdS)Nz %s)rr')rr+rrr r6§szlogger.log_changecCs8|dkrd}nd}x |jD]}tjtj||ƒqWdS)Néz Successful: zFailed: )rÚsyslogZLOG_INFO)rr7r<rrrr r8ªs  z logger.commitN)rrrrrrr)rrrrrrr)r9r:r;r!r3r4r6r8rrrr r�s   c@s0eZdZd dd„Zd dd„Zdd„Zdd „Zd S) Ú nullloggerrc CsdS)Nr) rr+r,r#r-r.r/r0r1rrr r3µsznulllogger.logc CsdS)Nr) rr+r,r#r-r.r/r0r1rrr r4¸sznulllogger.log_removecCsdS)Nr)rr+rrr r6»sznulllogger.log_changecCsdS)Nr)rr7rrr r8¾sznulllogger.commitN)rrrrrrr)rrrrrrr)r9r:r;r3r4r6r8rrrr r?³s  r?cCsXd}d}|d|d}|d|d}|d|dd|d}tjd |d |ƒS) Nzs[0-9]*zc[0-9]*z(\.z)?z(\,z)*z(-z(:ú^ú$)ÚreÚsearch)ÚrawZ sensitivityÚcategoryZ cat_rangeZ categoriesZregrrr Úvalidate_levelÂs rFr=cCs`d}|dkrd||f}n|}tj|ƒ\}}|dkr8|S|rL|t|ƒd…}|dkrX|S|SdS)Nza:b:c:r=z%s%srr)ÚselinuxZselinux_raw_to_trans_contextÚlen)rDÚprependÚfillerÚcontextÚrcÚtransrrr Ú translateËsrNcCs`d}|dkrd||f}n|}tj|ƒ\}}|dkr8|S|rL|t|ƒd…}|dkrX|S|SdS)Nza:b:c:r=z%s%srr)rGZselinux_trans_to_raw_contextrH)rMrIrJrKrLrDrrr Ú untranslateÜsrOc@sfeZdZdZdZdZdZddd„Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„ZdS)ÚsemanageRecordsFNcCs¨|rt|ƒtkr||_n||_t|ddƒ|_|js@t|ddƒ|_|j|jƒ|_tj ƒ\}}|jdksn|j|krxt ƒ|_ n,t j |jƒtjdtjƒ|jfƒtƒ|_ dS)NÚnoreloadFÚstorerz%s%s)Útyper*rRÚargsÚgetattrrQÚ get_handleÚshrGÚselinux_getpolicytyperÚmylogÚsepolicyZload_store_policyZselinux_set_policy_rootZ selinux_pathr?)rrTrLZ localstorerrr r!ôs    zsemanageRecords.__init__cCs | |_dS)N)rQ)rÚloadrrr Ú set_reload szsemanageRecords.set_reloadcCsØtjr tjStƒ}|s"ttdƒƒ‚tj rD|dkrDt||tƒ|t_t |ƒs`t |ƒttdƒƒ‚t |ƒ}|t kr„t |ƒttdƒƒ‚t |ƒ}|dkr¨t |ƒttdƒƒ‚t|ƒatdkrÌt |ƒttdƒƒ‚|t_tjS)Nz Could not create semanage handlerz:SELinux policy is not managed or store cannot be accessed.zCannot read policy store.rz'Could not establish semanage connectionz!Could not test MLS enabled status)rPÚhandleZsemanage_handle_createÚ ValueErrorrÚ transactionZsemanage_select_storeZSEMANAGE_CON_DIRECTrRZsemanage_is_managedZsemanage_handle_destroyZsemanage_access_checkZSEMANAGE_CAN_READZsemanage_connectZsemanage_mls_enabledÚis_mls_enabled)rrRr]rLrrr rV s2      zsemanageRecords.get_handlecCsttdƒƒ‚dS)NzNot yet implemented)r^r)rrrr Ú deleteall1szsemanageRecords.deleteallcCs$tjrttdƒƒ‚|jƒdt_dS)Nz(Semanage transaction already in progressT)rPr_r^rÚbegin)rrrr Ústart4s zsemanageRecords.startcCs,tjr dSt|jƒ}|dkr(ttdƒƒ‚dS)Nrz$Could not start semanage transaction)rPr_Zsemanage_begin_transactionrWr^r)rrLrrr rb:s  zsemanageRecords.begincCsttdƒƒ‚dS)NzNot yet implemented)r^r)rrrr Ú customizedAszsemanageRecords.customizedcCsVtjr dS|jrt|jdƒt|jƒ}|dkrF|jjdƒtt dƒƒ‚|jjdƒdS)Nrz%Could not commit semanage transactionr=) rPr_rQZsemanage_set_reloadrWZsemanage_commitrYr8r^r)rrLrrr r8Ds    zsemanageRecords.commitcCs$tjsttdƒƒ‚dt_|jƒdS)Nz$Semanage transaction not in progressF)rPr_r^rr8)rrrr ÚfinishPs zsemanageRecords.finish)N)r9r:r;r_r]rRrTr!r\rVrarcrbrdr8rerrrr rPîs $ rPc@sPeZdZddd„Zdd„Zdd„Zdd d „Zd d „Zdd„Zdd„Z dd„Z dS)Ú moduleRecordsNcCstj||ƒdS)N)rPr!)rrTrrr r!YszmoduleRecords.__init__c Cs g}t|jƒ\}}}|dkr(ttdƒƒ‚x¼t|ƒD]°}t||ƒ}t|j|ƒ\}}|dkrdttdƒƒ‚t|j|ƒ\}}|dkrˆttdƒƒ‚t|j|ƒ\}} |dkr¬ttdƒƒ‚t |j|ƒ\}} |dkrÐttdƒƒ‚|j ||| | fƒq2W|j dd„d d �|j d d„d �|S) NrzCould not list SELinux moduleszCould not get module namezCould not get module enabledzCould not get module priorityzCould not get module lang_extcSs|dS)Nrr)Útrrr Úxsz'moduleRecords.get_all..T)ÚkeyÚreversecSs|dS)Nrr)rgrrr rhys)ri) Zsemanage_module_list_allrWr^rr&Úsemanage_module_list_nthZsemanage_module_info_get_nameZ semanage_module_info_get_enabledZ!semanage_module_info_get_priorityZ!semanage_module_info_get_lang_extr'Úsort) rrrLÚmlistÚnumberÚiÚmodr,ZenabledÚpriorityZlang_extrrr Úget_all\s,      zmoduleRecords.get_allcCs0|jƒ}t|ƒdkrgSdd„dd„|DƒDƒS)NrcSsg|]}d|d‘qS)z-d %srr)Ú.0Úxrrr ú €sz,moduleRecords.customized..cSsg|]}|ddkr|‘qS)r=rr)rsrgrrr ru€s)rrrH)rÚallrrr rd|s zmoduleRecords.customizedr=rcCsŒ|jƒ}t|ƒdkrdS|r:tdtdƒtdƒtdƒfƒxL|D]D}|ddkrZtdƒ}n |r`q@d}td |d|d |d |fƒq@WdS) Nrz %-25s %-9s %s z Module NameZPriorityZLanguager=ZDisabledrz%-25s %-9s %-5s %sér)rrrHÚprintr)rÚheadingÚ locallistrvrgZdisabledrrr Úlist‚s    zmoduleRecords.listcCs`tjj|ƒsttdƒ|ƒ‚t|j|ƒ}|dkr@ttdƒ|ƒ‚t|j|ƒ}|dkr\|jƒdS)NzModule does not exist: %s rz3Invalid priority %d (needs to be between 1 and 999)) ÚosÚpathÚexistsr^rÚsemanage_set_default_priorityrWZsemanage_module_install_filer8)rrrqrLrrr Úadd’s   zmoduleRecords.addcCsžx�|jƒD]„}t|jƒ\}}|dkr0ttdƒƒ‚t|j||ƒ}|dkrRttdƒƒ‚t|j||ƒ}|dkr |r~ttdƒ|ƒ‚q ttdƒ|ƒ‚q W|jƒdS)NrzCould not create module keyzCould not set module key namezCould not enable module %szCould not disable module %s)ÚsplitZsemanage_module_key_createrWr^rZsemanage_module_key_set_nameZsemanage_module_set_enabledr8)rÚmoduleÚenableÚmrLrirrr Ú set_enabledžs  zmoduleRecords.set_enabledcCsnt|j|ƒ}|dkr$ttdƒ|ƒ‚x<|jƒD]0}t|j|ƒ}|dkr.|dkr.ttdƒ|ƒ‚q.W|jƒdS)Nrz3Invalid priority %d (needs to be between 1 and 999)rwz*Could not remove module %s (remove failed)éþÿÿÿ)rrWr^rr�Úsemanage_module_remover8)rr‚rqrLr„rrr Údelete°s  zmoduleRecords.deletecCs:dd„dd„|jƒDƒDƒ}x|D]}|j|dƒq"WdS)NcSsg|] }|d‘qS)rr)rsrtrrr ru½sz+moduleRecords.deleteall..cSsg|]}|ddkr|‘qS)r=rr)rsrgrrr ru½sT)rrr…)rrr„rrr ra¼s zmoduleRecords.deleteall)N)r=r) r9r:r;r!rrrdr{r€r…rˆrarrrr rfWs     rfc@seZdZddd„Zdd„ZdS)ÚdontauditClassNcCstj||ƒdS)N)rPr!)rrTrrr r!ÄszdontauditClass.__init__cCs8|dkrttdƒƒ‚|jƒt|j|dkƒ|jƒdS)NÚonÚoffz'dontaudit requires either 'on' or 'off')rŠr‹)r^rrbZsemanage_set_disable_dontauditrWr8)rZ dontauditrrr ÚtoggleÇs  zdontauditClass.toggle)N)r9r:r;r!rŒrrrr r‰Âs r‰c@sHeZdZddd„Zdd„Zdd„Zdd d „Zd d „Zdd„Zdd„Z dS)ÚpermissiveRecordsNcCstj||ƒdS)N)rPr!)rrTrrr r!ÑszpermissiveRecords.__init__cCsrg}t|jƒ\}}}|dkr(ttdƒƒ‚xDt|ƒD]8}t||ƒ}t|ƒ}|r2|jdƒr2|j|j dƒdƒq2W|S)NrzCould not list SELinux modulesZ permissive_r=) Zsemanage_module_listrWr^rr&rkZsemanage_module_get_nameÚ startswithr'r�)rrrLrmrnrorpr,rrr rrÔs  zpermissiveRecords.get_allcCsdd„t|jƒƒDƒS)NcSsg|] }d|‘qS)z-a %sr)rsrtrrr ruâsz0permissiveRecords.customized..)Úsortedrr)rrrr rdászpermissiveRecords.customizedr=rcCs¨dd„dd„tjtjƒDƒDƒ}t|ƒdkr0dS|rDtdtdƒƒ|jƒ}x|D]}||krRt|ƒqRWt|ƒdkrzdS|rŽtdtdƒƒx|D] }t|ƒq”WdS)NcSsg|] }|d‘qS)r,r)rsÚyrrr ruåsz*permissiveRecords.list..cSsg|]}|dr|‘qS)Z permissiver)rsrtrrr ruåsrz %-25s zBuiltin Permissive TypeszCustomized Permissive Types)rZÚinfoZTYPErHrxrrr)rryrzrvrdrgrrr r{äs      zpermissiveRecords.listcCs‚yddlj}Wn tk r.ttdƒƒ‚YnXd|}d|}t|j|t|ƒ|dƒ}|dkrf|jƒ|dkr~ttdƒ|ƒ‚dS)NrzÎThe sepolgen python module is required to setup permissive domains. In some distributions it is included in the policycoreutils-devel package. # yum install policycoreutils-devel Or similar for your distro.z permissive_%sz(typepermissive %s)Zcilz?Could not set permissive domain %s (module installation failed)) Zsepolgen.moduler‚Ú ImportErrorr^rZsemanage_module_installrWrHr8)rrSr‚r,ZmodtxtrLrrr r€øszpermissiveRecords.addcCsFx8|jƒD],}t|jd|ƒ}|dkr ttdƒ|ƒ‚q W|jƒdS)Nz permissive_%srz5Could not remove permissive domain %s (remove failed))r�r‡rWr^rr8)rr,ÚnrLrrr rˆs zpermissiveRecords.deletecCs,|jƒ}t|ƒdkr(dj|ƒ}|j|ƒdS)Nrú )rrrHÚjoinrˆ)rrrvrrr ras  zpermissiveRecords.deleteall)N)r=r) r9r:r;r!rrrdr{r€rˆrarrrr 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(tj||ƒd|_d|_d|_d|_dS)N)rPr!r/r1r#r.)rrTrrr r!s  zloginRecords.__init__c Csütj|ƒ\}|_|_|dkr d}t|jƒ}|j|jƒ\}\}}|j|ƒ\}\}} tdkrn|dkrjt|ƒ}n|}t |j |ƒ\}} |dkr–t t dƒ|ƒ‚|ddkràyt j|dd…ƒWn$t t dƒ|dd…ƒ‚YnXn,ytj|ƒWnt t dƒ|ƒ‚YnXt|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)NrZuser_ur=rzCould not create a key for %sú%zLinux Group %s does not existzLinux User %s does not existz%Could not create login mapping for %szCould not set name for %szCould not set MLS range for %sz!Could not set SELinux user for %sz"Could not add login mapping for %s)rGÚgetseuserbynamer/r1ÚseluserRecordsrTÚgetr`rOÚsemanage_seuser_key_createrWr^rÚgrpZgetgrnamÚpwdÚgetpwnamZsemanage_seuser_createZsemanage_seuser_set_nameÚsemanage_seuser_set_mlsrangeÚsemanage_seuser_set_senameÚsemanage_seuser_modify_localÚsemanage_seuser_key_freeÚsemanage_seuser_free) rr,r#r.ÚrecÚuserrecr&rLr0r-ÚkÚurrr Ú__add sP         zloginRecords.__addcCsxyL|jƒ|j|ƒr4ttdƒ|ƒ|j|||ƒn|j|||ƒ|jƒWn&tk rr}z |‚WYdd}~XnXdS)Nz:Login mapping for %s is already defined, modifying instead)rbÚ_loginRecords__existsrxrÚ_loginRecords__modifyÚ_loginRecords__addr8r^)rr,r#r.Úerrorrrr r€Vs  zloginRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)NrzCould not create a key for %sz2Could not check if login mapping for %s is defined)r›rWr^rÚsemanage_seuser_existsr¢)rr,rLr¦r~rrr Ú__existsdszloginRecords.__existsrc Cs°tj|ƒ\}|_|_|dkr0|dkr0ttdƒƒ‚t|jƒ}|j|jƒ\}\}}|dkrj|j|ƒ\}\}} n|} |dkr~||_ n||_ t |j |ƒ\}} |dkr¬ttdƒ|ƒ‚t |j | ƒ\}} |dkrÔttdƒ|ƒ‚| sèttdƒ|ƒ‚t |j | ƒ\}} |dk�rttdƒ|ƒ‚t| ƒ|_t| ƒ|_tdk�rL|dk�rLt|j | t|ƒƒ|dk�rlt|j | |ƒ||_n|j|_t|j | | ƒ}|dk�rœttd ƒ|ƒ‚t| ƒt| ƒdS) NrzRequires seuser or serangerzCould not create a key for %sz2Could not check if login mapping for %s is definedz#Login mapping for %s is not definedzCould not query seuser for %sr=z%Could not modify login mapping for %s)rGr˜r/r1r^rr™rTršr.r›rWr­Zsemanage_seuser_queryÚsemanage_seuser_get_mlsrangeÚsemanage_seuser_get_senamer`rŸrOr r#r¡r¢r£) rr,r#r.r¤r¥r&rLr0r-r¦r~r§rrr Ú__modifypsF       zloginRecords.__modifycCsNy"|jƒ|j|||ƒ|jƒWn&tk rH}z |‚WYdd}~XnXdS)N)rbrªr8r^)rr,r#r.r¬rrr Úmodify¢s  zloginRecords.modifyc Cs*tj|ƒ\}|_|_t|jƒ}|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|ƒtjdƒ\}|_|_|j|jƒ\}\}} dS)NrzCould not create a key for %sz2Could not check if login mapping for %s is definedz#Login mapping for %s is not definedzttdƒƒ‚x,|jD]"}t|ƒ}t|ƒt|ƒdf||<qFW|S)NrzCould not list login mappingsr) rµrWr·Zsemanage_seuser_listr^rr¶r°r¯)rrzrÁrLr§r,rrr rrís  zloginRecords.get_allcCstg}|jdƒ}x`t|jƒƒD]P}||drR|jd||d||d|fƒq|jd||d|fƒqW|S)NTr=z-a -s %s -r '%s' %srz -a -s %s %s)rrr�Úkeysr')rrrÁr¦rrr rdûs  &zloginRecords.customizedr=c CsN|j|ƒ}|jƒ}t|jƒƒ}t|jƒƒ}t|ƒdkrFt|ƒdkrFdStdk�r|rxtdtdƒtdƒtdƒtdƒfƒx8|D]0}||}td||dt|dƒ|d fƒq~Wt|ƒrÈtd |j ƒx€|D]0}||}td||dt|dƒ|d fƒqÎWnF|�r"td tdƒtdƒfƒx&|D]}td |||dfƒ�q(WdS) Nrr=z %-20s %-20s %-20s %s z Login Namez SELinux Userz MLS/MCS RangeZServicez%-20s %-20s %-20s %srwz Local customization in %sz %-25s %-25s z %-25s %-25s) rrrÅr�rÆrHr`rxrrNrº) rryrzrÁZldictZlkeysrÆr¦r§rrr r{s*    $ ( * zloginRecords.list)N)rr)rr)r)r=r)r9r:r;r!r«r€r©rªr²r´rˆrarÅrrrdr{rrrr 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™NcCstj||ƒdS)N)rPr!)rrTrrr r!"szseluserRecords.__init__cCs¤t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|j|ƒ\}}|dkrxttdƒ|ƒ‚t|ƒ}t|j|ƒ}t|ƒt |ƒ||fS)NrzCould not create a key for %sz-Could not check if SELinux user %s is definedzCould not query user for %s) Úsemanage_user_key_createrWr^rÚsemanage_user_existsÚsemanage_user_queryÚsemanage_user_get_mlsrangeÚsemanage_user_get_rolesÚsemanage_user_key_freeÚsemanage_user_free)rr,rLr¦r~r§r.r-rrr rš%s zseluserRecords.getc Cstdkr4|dkrd}nt|ƒ}|dkr,d}nt|ƒ}t|ƒdkrPttdƒ|ƒ‚t|j|ƒ\}}|dkrxttdƒ|ƒ‚t|jƒ\}}|dkržttdƒ|ƒ‚t|j||ƒ}|dkrÄttdƒ|ƒ‚x6|D].} t |j|| ƒ}|dkrÊttd ƒ| |fƒ‚qÊWtdk�rVt |j||ƒ}|dk�r.ttd ƒ|ƒ‚t |j||ƒ}|dk�rVttd ƒ|ƒ‚t |j||ƒ}|dk�r‚ttd ƒ| |fƒ‚t |j|ƒ\}} |dk�r¬ttd ƒ|ƒ‚t|j||ƒ}|dk�rÔttdƒ|ƒ‚t|ƒt|ƒ|jjd|dj|ƒ|d�dS)Nr=rÚs0z%You must add at least one role for %srzCould not create a key for %sz$Could not create SELinux user for %szCould not set name for %szCould not add role %s for %szCould not set MLS range for %szCould not set MLS level for %szCould not add prefix %s for %szCould not extract key for %szCould not add SELinux user %sÚseuserr$)r#r-r.)r`rOrHr^rrÇrWZsemanage_user_createZsemanage_user_set_nameÚsemanage_user_add_roleÚsemanage_user_set_mlsrangeÚsemanage_user_set_mlslevelÚsemanage_user_set_prefixZsemanage_user_key_extractÚsemanage_user_modify_localrÌrÍrYr3r•) rr,ÚrolesÚselevelr.ÚprefixrLr¦r§Úrrirrr r¨5sR        zseluserRecords.__addcCsŒyT|jƒ|j|ƒr8ttdƒ|ƒ|j|||||ƒn|j|||||ƒ|jƒWn2tk r†}z|jjdƒ|‚WYdd}~XnXdS)Nz5SELinux user %s is already defined, modifying insteadr) rbÚ_seluserRecords__existsrxrÚ_seluserRecords__modifyÚ_seluserRecords__addr8r^rY)rr,rÕrÖr.r×r¬rrr r€ls   zseluserRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)NrzCould not create a key for %sz-Could not check if SELinux user %s is defined)rÇrWr^rrÈrÌ)rr,rLr¦r~rrr r®yszseluserRecords.__existsrc Cs@d}d}dj|ƒ}|dkrXt|ƒdkrX|dkrX|dkrXtdkrLttdƒƒ‚n ttdƒƒ‚t|j|ƒ\} } | dkr€ttdƒ|ƒ‚t|j| ƒ\} } | dkr¨ttdƒ|ƒ‚| s¼ttd ƒ|ƒ‚t|j| ƒ\} } | dkrättd ƒ|ƒ‚t | ƒ}t |j| ƒ\} } | dk�rdj| ƒ}tdk�r6|dk�r6t |j| t |ƒƒtdk�r\|dk�r\t |j| t |ƒƒ|dk�rtt|j| |ƒt|ƒdk�rÎx"| D]}||k�rˆt| |ƒ�qˆWx&|D]}|| k�r¬t|j| |ƒ�q¬Wt|j| | ƒ} | dk�röttd ƒ|ƒ‚t| ƒt| ƒd j|jƒƒ}d j|jƒƒ}|jjd ||||||d�dS)Nrr”rr=z&Requires prefix, roles, level or rangezRequires prefix or roleszCould not create a key for %sz-Could not check if SELinux user %s is definedzSELinux user %s is not definedzCould not query user for %sz Could not modify SELinux user %sr$rÏ)r#r/r-r.r0r1)r•rHr`r^rrÇrWrÈrÉrÊrËrÑrOrÒrÓZsemanage_user_del_rolerÐrÔrÌrÍr�rYr3)rr,rÕrÖr.r×r0r1ZnewrolesrLr¦r~r§ÚrlistrØr%rrr r±…sV $         zseluserRecords.__modifycCs^y&|jƒ|j|||||ƒ|jƒWn2tk rX}z|jjdƒ|‚WYdd}~XnXdS)Nr)rbrÚr8r^rY)rr,rÕrÖr.r×r¬rrr 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|ƒ\}}dj |ƒ}t |j|ƒ}|dk�rttdƒ|ƒ‚t |ƒt |ƒ|j jd |||d �dS) NrzCould not create a key for %sz-Could not check if SELinux user %s is definedzSELinux user %s is not definedz7SELinux user %s is defined in policy, cannot be deletedzCould not query user for %sr$z Could not delete SELinux user %srÏ)r/r1r0)rÇrWr^rrÈZsemanage_user_exists_localrÉrÊrËr•Zsemanage_user_del_localrÌrÍrYr4) rr,rLr¦r~r§r1rÜr0rrr r³Æs2   zseluserRecords.__deletecCsVy|jƒ|j|ƒ|jƒWn2tk rP}z|jjdƒ|‚WYdd}~XnXdS)Nr)rbÚ_seluserRecords__deleter8r^rY)rr,r¬rrr rˆçs   zseluserRecords.deletecCsŠt|jƒ\}}|dkr"ttdƒƒ‚y0|jƒx|D]}|jt|ƒƒq2W|jƒWn2tk r„}z|jjdƒ|‚WYdd}~XnXdS)NrzCould not list login mappings) Úsemanage_user_list_localrWr^rrbrÝÚsemanage_user_get_namer8rY)rrLr·r§r¬rrr rañs    zseluserRecords.deleteallrcCs¬i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚xh|jD]^}t|ƒ}t|j|ƒ\}}|dkrzttdƒ|ƒ‚dj|ƒ}t |ƒt |ƒt |ƒ|f|t|ƒ<qFW|S)NrzCould not list SELinux usersz Could not list roles for user %sr”) rÞrWr·Zsemanage_user_listr^rrßrËr•Zsemanage_user_get_prefixZsemanage_user_get_mlslevelrÊ)rrzrÁrLr§r,rÜrÕrrr rrÿs   $zseluserRecords.get_allcCsŠg}|jdƒ}xvt|jƒƒD]f}||ds8||drh|jd||d||d||d|fƒq|jd||d|fƒqW|S)NTr=rwz-a -L %s -r %s -R '%s' %srz -a -R '%s' %s)rrr�rÆr')rrrÁr¦rrr rds 0zseluserRecords.customizedr=c Cs|j|ƒ}t|ƒdkrdSt|jƒƒ}tdkrÊ|r|tddtdƒtdƒtdƒfƒtdtdƒtd ƒtd ƒtd ƒtd ƒfƒxŽ|D]B}td |||dt||dƒt||dƒ||dfƒq‚WnB|rætdtdƒtd ƒfƒx$|D]}td|||dfƒqìWdS)Nrr=z %-15s %-10s %-10s %-30srZLabelingzMLS/z%-15s %-10s %-10s %-30s %s z SELinux UserZPrefixz MCS Levelz MCS Rangez SELinux Rolesz%-15s %-10s %-10s %-30s %srwrz %-15s %s z%-15s %s)rrrHr�rÆr`rxrrN)rryrzrÁrÆr¦rrr r{s    * D zseluserRecords.list)N)r)r=r)r9r:r;r!ršrÛr€rÙrÚr²rÝrˆrarrrdr{rrrr 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)$Ú portRecordsNc CsJtj||ƒy$tttjtjdƒƒddƒ|_Wntk rDYnXdS)NZ port_typerÚtypes)rPr!r{rZr‘Ú ATTRIBUTEÚ valid_typesÚ RuntimeError)rrTrrr r!4s  $zportRecords.__init__c CsÔttttdœ}||jƒkr$||}n ttdƒƒ‚|dkrDttdƒƒ‚|jdƒ}t|ƒdkrlt |dƒ}}nt |dƒ}t |dƒ}|dkr˜ttd ƒƒ‚t |j |||ƒ\}} |dkrÈttd ƒ||fƒ‚| |||fS) N)ZtcpZudpZsctpZdccpz0Protocol has to be one of udp, tcp, dccp or sctprzPort is requiredr"r=riÿÿz Invalid Portz Could not create a key for %s/%s) ZSEMANAGE_PROTO_TCPZSEMANAGE_PROTO_UDPZSEMANAGE_PROTO_SCTPZSEMANAGE_PROTO_DCCPrÆr^rr�rHÚintZsemanage_port_key_createrW) rÚportÚprotoZ protocolsÚproto_dZportsÚhighÚlowrLr¦rrr Ú__genkey;s(         zportRecords.__genkeyc Cs,tdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚tj|ƒ}||jkrVttdƒ|ƒ‚|j||ƒ\}}}}t|j ƒ\} } | dkr”ttdƒ||fƒ‚t | |ƒt | ||ƒt |j ƒ\} } | dkrÔttdƒ||fƒ‚t |j | d ƒ} | dkrþttd ƒ||fƒ‚t|j | d ƒ} | dk�r*ttd ƒ||fƒ‚t|j | |ƒ} | dk�rVttd ƒ||fƒ‚tdk�r–|dk�r–t|j | |ƒ} | dk�r–ttdƒ||fƒ‚t|j | | ƒ} | dk�rÂttdƒ||fƒ‚t|j || ƒ} | dk�rîttdƒ||fƒ‚t| ƒt|ƒt| ƒ|jjd|tj|ƒd d ||fƒdS)Nr=rrÎzType is requiredz'Type %s is invalid, must be a port typerzCould not create port for %s/%sz"Could not create context for %s/%sÚsystem_uz,Could not set user in port context for %s/%sÚobject_rz,Could not set role in port context for %s/%sz,Could not set type in port context for %s/%sz2Could not set mls fields in port context for %s/%sz$Could not set port context for %s/%szCould not add port %s/%sz8resrc=port op=add lport=%s proto=%s tcontext=%s:%s:%s:%s)r`rOr^rrZÚget_real_type_namerãÚ_portRecords__genkeyZsemanage_port_createrWZsemanage_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_freerYr6r Úgetprotobyname) rrærçr.rSr¦rèrêrérLrÚconrrr r¨WsR          zportRecords.__addcCsX|jƒ|j||ƒrttdƒƒ‚xX|jD]N}t|ƒ}t|ƒ}t|ƒ}t |ƒ}t |ƒ} t |ƒ} t |ƒ} ||f|| | | f<qFW|S)NrzCould not list ports) rrWrÚsemanage_port_listr^rrÚsemanage_context_get_typeÚsemanage_context_get_mlsrrrr) rrzrÁrLrærúÚctypeÚlevelrçr rêrérrr rr s   zportRecords.get_allc CsØi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚x”|jD]Š}t|ƒ}t|ƒ}t|ƒ}t |ƒ}t |ƒ} t |ƒ} ||f|j ƒkr–g|||f<| | kr¶|||fj d| ƒqF|||fj d| | fƒqFW|S)NrzCould not list portsz%dz%d-%d)rrWrr r^rrr rrrrrÆr') rrzrÁrLrærúrrçr rêrérrr Úget_all_by_type s&   zportRecords.get_all_by_typecCs¬g}|jdƒ}x˜t|jƒƒD]ˆ}|d|dkr8|dnd|d|df}||dr„|jd||d||d|d|fƒq|jd||d|d|fƒqW|S)NTrr=z%s-%sz-a -t %s -r '%s' -p %s %srwz-a -t %s -p %s %s)rrr�rÆr')rrrÁr¦rærrr rd8s , ,$zportRecords.customizedr=cCs¤|j|ƒ}t|ƒdkrdSt|jƒƒ}|rHtdtdƒtdƒtdƒfƒxV|D]N}d|}|d||d7}x$||dd…D]}|d |7}q€Wt|ƒqNWdS) Nrz%-30s %-8s %s zSELinux Port TypeZProtoz Port Numberz %-30s %-8s z%sr=z, %s)rrHr�rÆrxr)rryrzrÁrÆror¤rrrr r{Cs    zportRecords.list)N)r)r)r=r)r9r:r;rãr!rïrþr€rûrýr²rar rˆrrrrdr{rrrr rà0s :  *   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)$Ú ibpkeyRecordsNc CsXtj||ƒy:tjtjtj|jƒƒdgd�}tdd„|j ƒDƒƒ|_ Wn YnXdS)NZ ibpkey_type)Úattrscss|]}t|ƒVqdS)N)r*)rsrgrrr ú Zsz)ibpkeyRecords.__init__..) rPr!ÚsetoolsÚ TypeQueryÚ SELinuxPolicyrZÚget_store_policyrRr�Úresultsrã)rrTÚqrrr r!Vs  zibpkeyRecords.__init__cCsª|dkrttdƒƒ‚|jdƒ}t|ƒdkr>t|ddƒ}}nt|ddƒ}t|ddƒ}|dkrnttdƒƒ‚t|j|||ƒ\}}|dkržttdƒ||fƒ‚||||fS) NrzSubnet Prefix is requiredr"r=riÿÿz Invalid Pkeyz Could not create a key for %s/%s)r^rr�rHråZsemanage_ibpkey_key_createrW)rÚpkeyÚ subnet_prefixZpkeysrérêrLr¦rrr rë^s    zibpkeyRecords.__genkeyc Cstdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚tj|ƒ}||jkrVttdƒ|ƒ‚|j||ƒ\}}}}t|j ƒ\}} |dkr”ttdƒ||fƒ‚t |j | |ƒt | ||ƒt |j ƒ\}} |dkrØttdƒ||fƒ‚t |j | d ƒ}|dk�rttd ƒ||fƒ‚t|j | d ƒ}|dk�r0ttd ƒ||fƒ‚t|j | |ƒ}|dk�r\ttd ƒ||fƒ‚tdk�rœ|dk�rœt|j | |ƒ}|dk�rœttdƒ||fƒ‚t|j | | ƒ}|dk�rÈttdƒ||fƒ‚t|j || ƒ}|dk�rôttdƒ||fƒ‚t| ƒt|ƒt| ƒdS)Nr=rrÎzType is requiredz)Type %s is invalid, must be a ibpkey typerz!Could not create ibpkey for %s/%sz"Could not create context for %s/%srìz.Could not set user in ibpkey context for %s/%sríz.Could not set role in ibpkey context for %s/%sz.Could not set type in ibpkey context for %s/%sz4Could not set mls fields in ibpkey context for %s/%sz&Could not set ibpkey context for %s/%szCould not add ibpkey %s/%s)r`rOr^rrZrîrãÚ_ibpkeyRecords__genkeyZsemanage_ibpkey_createrWZ!semanage_ibpkey_set_subnet_prefixZsemanage_ibpkey_set_rangerðrñròrórôZsemanage_ibpkey_set_conÚsemanage_ibpkey_modify_localröÚsemanage_ibpkey_key_freeÚsemanage_ibpkey_free) rrrr.rSr¦rêrérLrrúrrr r¨qsP          zibpkeyRecords.__addcCsX|jƒ|j||ƒrttdƒƒ‚xb|jD]X}t|ƒ}t|ƒ}|dkrdqFt|ƒ}t |j|ƒ\}}t |ƒ} t |ƒ} ||f|| | |f<qFW|S)NrzCould not list ibpkeysZreserved_ibpkey_t) r%rWrÚsemanage_ibpkey_listr^rr$r r r&r'r() rrzrÁrLr*rúrrrrêrérrr rrs"  zibpkeyRecords.get_allc CsØi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚x”|jD]Š}t|ƒ}t|ƒ}t|j|ƒ\}}t |ƒ}t |ƒ} ||f|j ƒkr–g|||f<|| kr¶|||fj d|ƒqF|||fj d|| fƒqFW|S)NrzCould not list ibpkeysz0x%xz 0x%x-0x%x) r%rWrr,r^rr$r r&r'r(rÆr') rrzrÁrLr*rúrrrêrérrr r,s$   zibpkeyRecords.get_all_by_typecCs¬g}|jdƒ}x˜t|jƒƒD]ˆ}|d|dkr8|dnd|d|df}||dr„|jd||d||d|d|fƒq|jd||d|d|fƒqW|S)NTrr=z%s-%sz-a -t %s -r '%s' -x %s %srwz-a -t %s -x %s %s)rrr�rÆr')rrrÁr¦rærrr rdCs , ,$zibpkeyRecords.customizedr=cCs¤|j|ƒ}|jƒ}t|ƒdkr"dS|rDtdtdƒtdƒtdƒfƒxZt|ƒD]N}d|}|d||d7}x$||dd…D]}|d |7}q€Wt|ƒqNWdS) Nrz%-30s %-18s %s zSELinux IB Pkey TypeZ Subnet_Prefixz Pkey Numberz %-30s %-18s z%sr=z, %s)rrÆrHrxrr�)rryrzrÁrÆror¤rrrr r{Os  zibpkeyRecords.list)N)r)r)r=r)r9r:r;rãr!rr"r€r r!r²rar+rˆrrrrdr{rrrr rRs 8  &   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)$ÚibendportRecordsNc CsXtj||ƒy:tjtjtj|jƒƒdgd�}tdd„|j ƒDƒƒ|_ Wn YnXdS)NZibendport_type)rcss|]}t|ƒVqdS)N)r*)rsrgrrr rfsz,ibendportRecords.__init__..) rPr!rrrrZrrRÚsetrrã)rrTrrrr r!bs  zibendportRecords.__init__cCsp|dkrttdƒƒ‚t|ƒ}|dks,|dkr8ttdƒƒ‚t|j||ƒ\}}|dkrfttdƒ||fƒ‚|||fS)NrzIB device name is requiredéÿr=zInvalid Port Numberrz*Could not create a key for ibendport %s/%s)r^rråZsemanage_ibendport_key_createrW)rÚ ibendportÚ ibdev_namerærLr¦rrr rëjs  zibendportRecords.__genkeyc Cs tdkr|dkrd}nt|ƒ}|dkr2ttdƒƒ‚tj|ƒ}||jkrVttdƒ|ƒ‚|j||ƒ\}}}t|j ƒ\}}|dkr’ttdƒ||fƒ‚t |j ||ƒt ||ƒt |j ƒ\}} |dkrÔttdƒ||fƒ‚t |j | d ƒ}|dkrþttd ƒ||fƒ‚t|j | d ƒ}|dk�r*ttd ƒ||fƒ‚t|j | |ƒ}|dk�rVttd ƒ||fƒ‚tdk�r–|dk�r–t|j | |ƒ}|dk�r–ttdƒ||fƒ‚t|j || ƒ}|dk�rÂttdƒ||fƒ‚t|j ||ƒ}|dk�rîttdƒ||fƒ‚t| ƒt|ƒt|ƒdS)Nr=rrÎzType is requiredz-Type %s is invalid, must be an ibendport typerz$Could not create ibendport for %s/%sz"Could not create context for %s/%srìz1Could not set user in ibendport context for %s/%sríz1Could not set role in ibendport context for %s/%sz1Could not set type in ibendport context for %s/%sz7Could not set mls fields in ibendport context for %s/%sz)Could not set ibendport context for %s/%szCould not add ibendport %s/%s)r`rOr^rrZrîrãÚ_ibendportRecords__genkeyZsemanage_ibendport_createrWZ!semanage_ibendport_set_ibdev_nameZsemanage_ibendport_set_portrðrñròrórôZsemanage_ibendport_set_conÚsemanage_ibendport_modify_localröÚsemanage_ibendport_key_freeÚsemanage_ibendport_free) rr0r1r.rSr¦rærLrrúrrr r¨xsP         zibendportRecords.__addcCsX|jƒ|j||ƒrttdƒ||fƒ‚|sVttdƒ||fƒ‚t|j|ƒ\}}|dkr‚ttdƒ||fƒ‚|sšttdƒ||fƒ‚t|j|ƒ}|dkrÂttdƒ||fƒ‚t|ƒdS)Nrz-Could not check if ibendport %s/%s is definedzibendport %s/%s is not definedz7ibendport %s/%s is defined in policy, cannot be deletedz Could not delete ibendport %s/%s)r2r9rWr^rZsemanage_ibendport_exists_localr>r4)rr0r1r¦rærLr~rrr r³s zibendportRecords.__deletecCs |jƒ|j||ƒ|jƒdS)N)rbÚ_ibendportRecords__deleter8)rr0r1rrr rˆs zibendportRecords.deleterc Csœi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚xX|jD]N}t|ƒ}t|ƒ}|dkrdqFt|ƒ}t |j|ƒ\}}t |ƒ} ||f|| |f<qFW|S)NrzCould not list ibendportsZreserved_ibendport_t) r;rWrÚsemanage_ibendport_listr^rr:r r r<r=) rrzrÁrLr0rúrrr1rærrr rrs   zibendportRecords.get_allc Cs¬i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚xh|jD]^}t|ƒ}t|ƒ}t|j|ƒ\}}t |ƒ}||f|j ƒkrŽg|||f<|||fj d|ƒqFW|S)NrzCould not list ibendportsz0x%x) r;rWrr@r^rr:r r<r=rÆr') rrzrÁrLr0rúrr1rærrr r/s   z ibendportRecords.get_all_by_typecCsˆg}|jdƒ}xtt|jƒƒD]d}||dr\|jd||d||d|d|dfƒq|jd||d|d|dfƒqW|S)NTr=z-a -t %s -r '%s' -z %s %srz-a -t %s -z %s %s)rrr�rÆr')rrrÁr¦rrr rdBs  0(zibendportRecords.customizedr=cCs¤|j|ƒ}|jƒ}t|ƒdkr"dS|rDtdtdƒtdƒtdƒfƒxZt|ƒD]N}d|}|d||d7}x$||dd…D]}|d |7}q€Wt|ƒqNWdS) Nrz%-30s %-18s %s zSELinux IB End Port TypezIB Device Namez Port Numberz %-30s %-18s z%sr=z, %s)rrÆrHrxrr�)rryrzrÁrÆror¤rrrr r{Ms  zibendportRecords.list)N)r)r)r=r)r9r:r;rãr!r2r8r€r6r7r²rar?rˆrrrrdr{rrrr 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)!Ú nodeRecordsNc CsTtj||ƒddg|_y$tttjtjdƒƒddƒ|_Wntk rNYnXdS)NZipv4Zipv6Z node_typerrá) rPr!Úprotocolr{rZr‘rârãrä)rrTrrr r!`s   $znodeRecords.__init__c Cs®|}|}d}|dkr ttdƒƒ‚t|ƒdks8|ddkrztj||ƒ}t|jƒ}t|jƒ}|dkrp|jdkrpd}d|j}y|j j |ƒ}Wnttd ƒƒ‚YnX|||fS) NrzNode Address is requiredrr¸z0.0.0.0éz::zipv%dzUnknown or missing protocol) r^rrHÚ ipaddressZ ip_networkr*Znetwork_addressZnetmaskÚversionrBÚindex)rÚaddrÚmaskrBZnewaddrZnewmaskZ newprotocolrorrr Úvalidatehs"    znodeRecords.validatec Csp|j|||ƒ\}}}tdkr2|dkr*d}nt|ƒ}|dkrFttdƒƒ‚tj|ƒ}||jkrjttdƒ|ƒ‚t|j |||ƒ\}}|dkr–ttdƒ|ƒ‚t |j ƒ\}}|dkr¼ttdƒ|ƒ‚t ||ƒt |j |||ƒ}t |j ƒ\}} |dkrüttd ƒ|ƒ‚t|j |||ƒ}|dk�r&ttd ƒ|ƒ‚t|j | d ƒ}|dk�rNttd ƒ|ƒ‚t|j | d ƒ}|dk�rvttdƒ|ƒ‚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|ƒ|jjd||tj|j|ƒd d ||fƒdS)Nr=rrÎzSELinux node type is requiredz'Type %s is invalid, must be a node typerzCould not create key for %szCould not create addr for %szCould 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)rIr`rOr^rrZrîrãÚsemanage_node_key_createrWZsemanage_node_createZsemanage_node_set_protoZsemanage_node_set_addrrðZsemanage_node_set_maskrñròrórôZsemanage_node_set_conÚsemanage_node_modify_localröÚsemanage_node_key_freeÚsemanage_node_freerYr6r rùrB) rrGrHrçr.rrLr¦Únoderúrrr r¨�s^           znodeRecords.__addcCsX|jƒ|j|||ƒr:ttdƒ|ƒ|j|||||ƒn|j|||||ƒ|jƒdS)Nz*Addr %s already defined, modifying instead)rbÚ_nodeRecords__existsrxrÚ_nodeRecords__modifyÚ_nodeRecords__addr8)rrGrHrçr.rrrr r€Ãs znodeRecords.addcCst|j|||ƒ\}}}t|j|||ƒ\}}|dkr@ttdƒ|ƒ‚t|j|ƒ\}}|dkrhttdƒ|ƒ‚t|ƒ|S)NrzCould not create key for %sz%Could not check if addr %s is defined)rIrJrWr^rÚsemanage_node_existsrL)rrGrHrçrLr¦r~rrr r®ÌsznodeRecords.__existsc Cs”|j|||ƒ\}}}|dkr0|dkr0ttdƒƒ‚tj|ƒ}|rX||jkrXttdƒ|ƒ‚t|j|||ƒ\}}|dkr„ttdƒ|ƒ‚t|j|ƒ\}}|dkr¬ttdƒ|ƒ‚|sÀttdƒ|ƒ‚t |j|ƒ\}} |dkrèttdƒ|ƒ‚t | ƒ} t d k�r|dk�rt |j| t |ƒƒ|dk�r.t|j| |ƒt|j|| ƒ}|dk�rVttd ƒ|ƒ‚t|ƒt| ƒ|jjd ||tj|j|ƒd d ||fƒdS)NrzRequires setype or serangez'Type %s is invalid, must be a node typerzCould not create key for %sz%Could not check if addr %s is definedzAddr %s is not definedzCould not query addr %sr=zCould not modify addr %szFresrc=node op=modify laddr=%s netmask=%s proto=%s tcontext=%s:%s:%s:%srìrí)rIr^rrZrîrãrJrWrRZsemanage_node_queryÚsemanage_node_get_conr`rôrOrórKrLrMrYr6r rùrB) rrGrHrçr.rrLr¦r~rNrúrrr r±Ús8    znodeRecords.__modifycCs&|jƒ|j|||||ƒ|jƒdS)N)rbrPr8)rrGrHrçr.rrrr r²sznodeRecords.modifycCs |j|||ƒ\}}}t|j|||ƒ\}}|dkr@ttdƒ|ƒ‚t|j|ƒ\}}|dkrhttdƒ|ƒ‚|s|ttdƒ|ƒ‚t|j|ƒ\}}|dkr¤ttdƒ|ƒ‚|s¸ttdƒ|ƒ‚t|j|ƒ}|dkrÜttdƒ|ƒ‚t|ƒ|j j d||t j |j |ƒfƒdS)NrzCould not create key for %sz%Could not check if addr %s is definedzAddr %s is not definedz/Addr %s is defined in policy, cannot be deletedzCould not delete addr %sz1resrc=node op=delete laddr=%s netmask=%s proto=%s)rIrJrWr^rrRZsemanage_node_exists_localZsemanage_node_del_localrLrYr6r rùrB)rrGrHrçrLr¦r~rrr r³s& znodeRecords.__deletecCs"|jƒ|j|||ƒ|jƒdS)N)rbÚ_nodeRecords__deleter8)rrGrHrçrrr rˆ#sznodeRecords.deletecCstt|jƒ\}}|dkr"ttdƒƒ‚|jƒx<|D]4}|jt|j|ƒdt|j|ƒd|jt |ƒƒq0W|j ƒdS)Nrz!Could not deleteall node mappingsr=) Úsemanage_node_list_localrWr^rrbrTÚsemanage_node_get_addrÚsemanage_node_get_maskrBÚsemanage_node_get_protor8)rrLZnlistrNrrr ra(s  4znodeRecords.deleteallrc Cs®i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚xj|jD]`}t|ƒ}t|j|ƒ}t|j|ƒ}|j t |ƒ}t |ƒt |ƒt |ƒt|ƒf||d|d|f<qFW|S)NrzCould not list addrsr=)rUrWÚilistZsemanage_node_listr^rrSrVrWrBrXÚsemanage_context_get_userÚsemanage_context_get_roler r ) rrzrÁrLrNrúrGrHrçrrr rr2s    2znodeRecords.get_allc Cs”g}|jdƒ}x€t|jƒƒD]p}||drb|jd|d|d||d||d|dfƒq|jd|d|d||d|dfƒqW|S)NTrz-a -M %s -p %s -t %s -r '%s' %sr=rwrz-a -M %s -p %s -t %s %s)rrr�rÆr')rrrÁr¦rrr rdDs  6.znodeRecords.customizedr=c Cs|j|ƒ}t|ƒdkrdSt|jƒƒ}|r6tddƒtr¸xÆ|D]r}d}x|D]}|dt|ƒ}qNWtd |d|d |d ||d||d ||d t||d d ƒfƒq@WnJxH|D]@}td|d|d |d ||d||d ||d fƒq¾WdS)Nrz%-18s %-18s %-5s %-5s ú IP AddressÚNetmaskÚProtocolÚContextrú z%-18s %-18s %-5s %s:%s:%s:%s r=rwrFz%-18s %-18s %-5s %s:%s:%s )r\r]r^r_)rrrHr�rÆrxr`r*rN)rryrzrÁrÆr¦ÚvalZfieldsrrr r{Ns      R znodeRecords.list)N)r)r=r)r9r:r;rãr!rIrQr€rOrPr²rTrˆrarrrdr{rrrr rA\s B (  rAc@sreZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z ddd„Z dd„Z ddd„ZdS)ÚinterfaceRecordsNcCstj||ƒdS)N)rPr!)rrTrrr r!cszinterfaceRecords.__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|ƒ|jjd|d d ||fƒdS)Nr=rrÎzSELinux Type is requiredrzCould not create key for %sz!Could not create interface for %szCould not create context for %srì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)r`rOr^rÚsemanage_iface_key_createrWZsemanage_iface_createZsemanage_iface_set_namerðrñròrórôZsemanage_iface_set_ifconZsemanage_iface_set_msgconÚsemanage_iface_modify_localröÚsemanage_iface_key_freeÚsemanage_iface_freerYr6)rÚ interfacer.rrLr¦Úifacerúrrr r¨fsT       zinterfaceRecords.__addcCsL|jƒ|j|ƒr2ttdƒ|ƒ|j|||ƒn|j|||ƒ|jƒdS)Nz/Interface %s already defined, modifying instead)rbÚ_interfaceRecords__existsrxrÚ_interfaceRecords__modifyÚ_interfaceRecords__addr8)rrgr.rrrr r€ s  zinterfaceRecords.addcCs\t|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚t|ƒ|S)NrzCould not create key for %sz*Could not check if interface %s is defined)rcrWr^rÚsemanage_iface_existsre)rrgrLr¦r~rrr 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 |ƒ|jjd |d d ||fƒdS) NrzRequires setype or serangerzCould not create key for %sz*Could not check if interface %s is definedzInterface %s is not definedzCould not query interface %sr=zCould not modify interface %sz7resrc=interface op=modify netif=%s tcontext=%s:%s:%s:%srìrí)r^rrcrWrlZsemanage_iface_queryÚsemanage_iface_get_ifconr`rôrOrórdrerfrYr6) rrgr.rrLr¦r~rhrúrrr r±µs0  zinterfaceRecords.__modifycCs"|jƒ|j|||ƒ|jƒdS)N)rbrjr8)rrgr.rrrr r²×szinterfaceRecords.modifycCsàt|j|ƒ\}}|dkr(ttdƒ|ƒ‚t|j|ƒ\}}|dkrPttdƒ|ƒ‚|sdttdƒ|ƒ‚t|j|ƒ\}}|dkrŒttdƒ|ƒ‚|s ttdƒ|ƒ‚t|j|ƒ}|dkrÄttdƒ|ƒ‚t|ƒ|jj d|ƒdS)NrzCould not create key for %sz*Could not check if interface %s is definedzInterface %s is not definedz4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s) rcrWr^rrlZsemanage_iface_exists_localZsemanage_iface_del_localrerYr6)rrgrLr¦r~rrr r³Üs$ zinterfaceRecords.__deletecCs|jƒ|j|ƒ|jƒdS)N)rbÚ_interfaceRecords__deleter8)rrgrrr rˆõs zinterfaceRecords.deletecCsRt|jƒ\}}|dkr"ttdƒƒ‚|jƒx|D]}|jt|ƒƒq0W|jƒdS)Nrz(Could not delete all interface mappings)Úsemanage_iface_list_localrWr^rrbrnÚsemanage_iface_get_namer8)rrLr·rorrr raús  zinterfaceRecords.deleteallrcCs~i}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚x:|jD]0}t|ƒ}t|ƒt|ƒt |ƒt |ƒf|t |ƒ<qFW|S)NrzCould not list interfaces) rorWrYZsemanage_iface_listr^rrmrZr[r r rp)rrzrÁrLrgrúrrr rr s  (zinterfaceRecords.get_allcCstg}|jdƒ}x`t|jƒƒD]P}||drR|jd||d||d|fƒq|jd||d|fƒqW|S)NTrz-a -t %s -r '%s' %srwz -a -t %s %s)rrr�rÆr')rrrÁr¦rrr rd s  &zinterfaceRecords.customizedr=c CsÐ|j|ƒ}t|ƒdkrdSt|jƒƒ}|rBtdtdƒtdƒfƒtr’x„|D]@}td|||d||d||dt||dd ƒfƒqLWn:x8|D]0}td |||d||d||dfƒq˜WdS) Nrz %-30s %s zSELinux Interfacer_z%-30s %s:%s:%s:%s r=rwrFz%-30s %s:%s:%s )rrrHr�rÆrxrr`rN)rryrzrÁrÆr¦rrr r{ s    B zinterfaceRecords.list)N)r)r=r)r9r:r;r!rkr€rirjr²rnrˆrarrrdr{rrrr rbas :  "  rbc@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).ÚfcontextRecordsNcCs„tj||ƒyLtttjtjdƒƒddƒ|_|jtttjtjdƒƒddƒ7_Wntk rlYnXi|_i|_ d|_ ydt t j ƒdƒ}xH|jƒD]<}|jƒ}t|ƒdkr´qš|jdƒrÀqš|jƒ\}}||j|<qšW|jƒWntk røYnXynt t jƒdƒ}xR|jƒD]F}|jƒ}t|ƒdk�r2�q|jdƒ�rB�q|jƒ\}}||j |<�qW|jƒWntk �r~YnXdS)NZ file_typerráZ device_nodeFrØú#)rPr!r{rZr‘rârãräÚequivÚ equiv_distÚ equal_indr¼rGÚselinux_file_context_subs_pathÚ readlinesÚstriprHrŽr�r¿ÚIOErrorZ#selinux_file_context_subs_dist_path)rrTrÄroÚtargetÚ substituterrr r!1 sF  ,       zfcontextRecords.__init__c Csž|jr�tjƒ}d|}t|dƒ}x*|jjƒD]}|jd||j|fƒq,W|jƒytj |tj |ƒt j ƒWn YnXtj ||ƒd|_t j|ƒdS)Nz%s.tmpÚwz%s %s F)rurGrvr¼rsrÆÚwriter¿r|ÚchmodÚstatÚST_MODEÚrenamerPr8)rZ subs_fileZtmpfilerÄrzrrr r8W s  zfcontextRecords.commitcCsL|jƒ|dkr,|d dkr,ttdƒ|ƒ‚|dkrP|ddkrPttdƒ|ƒ‚||jjƒkr²ttdƒ|ƒ||j|<d|_|jjdt j d|d ƒt j d |d ƒfƒ|j ƒdS|j |ƒxJ|j|j fD]:}x4|D],}|j|dƒrÔttd ƒ||||fƒ‚qÔWqÊW|jjd t j d|d ƒt j d |d ƒfƒ||j|<d|_|j ƒdS)Nr¸r=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 insteadTz$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„)rbr^rrsrÆrxrurYr6rÚaudit_encode_nv_stringr8rIrtrŽ)rrzr{Úfdictrorrr Ú add_equalg s* (  "( zfcontextRecords.add_equalcCsj|jƒ||jjƒkr&ttdƒ|ƒ‚||j|<d|_|jjdtj d|dƒtj d|dƒfƒ|j ƒdS)Nz'Equivalence class for %s does not existTz$resrc=fcontext op=modify-equal %s %sr‚rrƒ) rbrsrÆr^rrurYr6rr…r8)rrzr{rrr Ú 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) NrzCould not create context for %srrìz)Could not set user in file context for %sríz)Could not set role in file context for %sr=rÎz/Could not set mls fields in file context for %s)rðrWr^rrñròr`rô)rrzrÏrLrúrrr Ú createcon� s zfcontextRecords.createconcCs |dks|jdƒdkr"ttdƒƒ‚|jdƒd kr>z1Type %s is invalid, must be a file or device typerzCould not create key for %sz$Could not create file context for %sz)Could not set type in file context for %sz/Could not set mls fields in file context for %sz!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í)rIr`rOr^rrZrîrãÚsemanage_fcontext_key_createrWÚ file_typesZsemanage_fcontext_createZsemanage_fcontext_set_exprr‰rórôÚsemanage_fcontext_set_conZsemanage_fcontext_set_typeÚsemanage_fcontext_modify_localröÚsemanage_fcontext_key_freeÚsemanage_fcontext_freerYr6rr…Úftype_to_audit) rrzrSÚftyper.rÏrLr¦Úfcontextrúrrr r¨° sN          zfcontextRecords.__addcCsV|jƒ|j||ƒr8ttdƒ|ƒ|j|||||ƒn|j|||||ƒ|jƒdS)Nz6File context for %s already defined, modifying instead)rbÚ_fcontextRecords__existsrxrÚ_fcontextRecords__modifyÚ_fcontextRecords__addr8)rrzrSr”r.rÏrrr r€æ s  zfcontextRecords.addcCsŽt|j|t|ƒ\}}|dkr.ttdƒ|ƒ‚t|j|ƒ\}}|dkrVttdƒ|ƒ‚|s‚t|j|ƒ\}}|dkr‚ttdƒ|ƒ‚t|ƒ|S)NrzCould not create key for %sz1Could not check if file context for %s is defined)r�rWrŽr^rÚsemanage_fcontext_existsÚsemanage_fcontext_exists_localr‘)rrzr”rLr¦r~rrr r®ï szfcontextRecords.__existsc Csª|dkr$|dkr$|dkr$ttdƒƒ‚|dkrPtj|ƒ}||jkrPttdƒ|ƒ‚|j|ƒt|j|t|ƒ\}}|dkrˆttdƒ|ƒ‚t |j|ƒ\}}|dkr°ttdƒ|ƒ‚|rðyt |j|ƒ\}} Wn$t k rìttdƒ|ƒ‚YnXn|t |j|ƒ\}}|dk�rttdƒ|ƒ‚|�s0ttd ƒ|ƒ‚yt |j|ƒ\}} Wn&t k �rjttdƒ|ƒ‚YnX|dk�rt| ƒ} | dk�r’|j|ƒ} td k�r¸|dk�r¸t|j| t|ƒƒ|dk�rÐt|j| |ƒ|dk�rèt|j| |ƒt|j| | ƒ}|dk�r:ttd ƒ|ƒ‚n(t|j| dƒ}|dk�r:ttd ƒ|ƒ‚t|j|| ƒ}|dk�rbttd ƒ|ƒ‚t|ƒt| ƒ|�s|d }|jjdtjd|dƒt||d||fƒdS)Nrz"Requires setype, serange or seuserú<>z1Type %s is invalid, must be a file or device typerzCould not create a key for %sz1Could not check if file context for %s is definedz#Could not query file context for %sz"File context for %s is not definedr=z!Could not set file context for %sz$Could not modify file context for %srìz9resrc=fcontext op=modify %s ftype=%s tcontext=%s:%s:%s:%srƒrí)rr›)r^rrZrîrãrIr�rWrŽr™Zsemanage_fcontext_queryÚOSErrorršZsemanage_fcontext_query_localÚsemanage_fcontext_get_conr‰r`rôrOrñrór�r�r‘r’rYr6rr…r“) rrzrr”r.rÏrLr¦r~r•rúrrr r± sf             zfcontextRecords.__modifycCs&|jƒ|j|||||ƒ|jƒdS)N)rbr—r8)rrzrr”r.rÏrrr r²C szfcontextRecords.modifycCsèt|jƒ\}}|dkr"ttdƒƒ‚|jƒx¤|D]œ}t|ƒ}t|ƒ}t|ƒ}t|j|t |ƒ\}}|dkrzttdƒ|ƒ‚t |j|ƒ}|dkržttdƒ|ƒ‚t |ƒ|j j dtjd|dƒtt|fƒq0Wi|_d|_|jƒdS)Nrz Could not list the file contextszCould not create a key for %sz$Could not delete the file context %sz$resrc=fcontext op=delete %s ftype=%srƒT)Úsemanage_fcontext_list_localrWr^rrbÚsemanage_fcontext_get_exprÚsemanage_fcontext_get_typeÚsemanage_fcontext_get_type_strr�rŽÚsemanage_fcontext_del_localr‘rYr6rr…r“Úfile_type_str_to_optionrsrur8)rrLÚflistr•rzr”Ú ftype_strr¦rrr raH s&   *zfcontextRecords.deleteallcCs:||jjƒkr>|jj|ƒd|_|jjdtjd|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|ƒ|jjd tjd|dƒt|fƒdS) NTz!resrc=fcontext op=delete-equal %srƒrzCould not create a key for %sz1Could not check if file context for %s is definedz;File context for %s is defined in policy, cannot be deletedz"File context for %s is not definedz$Could not delete file context for %sz$resrc=fcontext op=delete %s ftype=%s)rsrÆÚpoprurYr6rr…r�rWrŽr^rršr™r¢r‘r“)rrzr”rLr¦r~rrr r³b s.   zfcontextRecords.__deletecCs |jƒ|j||ƒ|jƒdS)N)rbÚ_fcontextRecords__deleter8)rrzr”rrr 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}xd|jD]Z}t|ƒ}t|ƒ}t |ƒ} t |ƒ} | rôt | ƒt | ƒt | ƒt| ƒf||| f<q¦| ||| f<q¦W|S)NrzCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)ržrWr¤Zsemanage_fcontext_listr^rZsemanage_fcontext_list_homedirsrŸr r¡r�rZr[r r ) rrzrLZ fchomedirsZfclocalrÁr•Úexprr”r¥rúrrr rrˆ s.    &zfcontextRecords.get_allcCsÊg}|jdƒ}x€|jƒD]t}||r||drd|jdt|d||d||d|dfƒq|jdt|d||d|dfƒqWt|jƒrÆx*|jjƒD]}|jd|j||fƒq¦W|S) NTrz-a -f %s -t %s -r '%s' '%s'r=rwrz-a -f %s -t %s '%s'z -a -e %s %s)rrrÆr'r£rHrs)rrÚ fcon_dictr¦rzrrr rd¨ s  4, zfcontextRecords.customizedr=c Cs¤|j|ƒ}t|ƒdk�r|r:tdtdƒtdƒtdƒfƒ|rH|jƒ}n t|jƒƒ}x°|D]¨}||rêtr²td|d|d||d||d||dt||d d ƒfƒn6td |d|d||d||d||dfƒqZtd |d|dfƒqZWt|jƒ�rV|�sV|�r*ttd ƒƒx*|jjƒD]}td||j|fƒ�q6Wt|j ƒ�r |�rtttdƒƒx*|j jƒD]}td||j |fƒ�q€WdS)Nrz%-50s %-18s %s zSELinux fcontextrSr_z%-50s %-18s %s:%s:%s:%s r=rwrFz%-50s %-18s %s:%s:%s z%-50s %-18s <>z, SELinux Distribution fcontext Equivalence z%s = %sz% SELinux Local fcontext Equivalence ) rrrHrxrrÆr�r`rNrtrs)rryrzr©Zfkeysr¦rzrrr r{· s0    H8    zfcontextRecords.list)N)rì)rrrì)rrrì)r)r=r)r9r:r;rãr!r8r‡rˆr‰rIr˜r€r–r—r²rar§rˆrrrdr{rrrr rq- s$ &  6 C! rqc@sleZdZddd„Zdd„Zddd„Zd d „Zd d „Zd d„Zddd„Z dd„Z dd„Z dd„Z ddd„Z dS)ÚbooleanRecordsNc Csªtj||ƒi|_d|jd<d|jd<d|jd<d|jd<d|jd<d|jd<ytjƒ\}|_tjƒ\}}Wng|_d}YnX|jd ks˜|j|kr d |_nd |_dS) Nr=ZTRUErZFALSEZONZOFFÚ1Ú0rTF) rPr!ÚdictrGZsecurity_get_boolean_namesÚcurrent_booleansrXrRÚ modify_local)rrTrLZptyperrr r!Ú s"        zbooleanRecords.__init__cCsLtj|ƒ}t|j|ƒ\}}|dkr2ttdƒ|ƒ‚t|j|ƒ\}}|dkrZttdƒ|ƒ‚|snttdƒ|ƒ‚t|j|ƒ\}}|dkr–ttdƒ|ƒ‚|jƒ|j krºt ||j |jƒƒnttdƒdj |j j ƒƒƒ‚|j oä||jk�rt|j||ƒ}|dk�rttdƒ|ƒ‚t|j||ƒ}|dk�r8ttd ƒ|ƒ‚t|ƒt|ƒdS) NrzCould not create a key for %sz(Could not check if boolean %s is definedzBoolean %s is not definedzCould not query file context %sz0You must specify one of the following values: %sz, z(Could not set active value of boolean %szCould not modify boolean %s)rGÚselinux_boolean_subÚsemanage_bool_key_createrWr^rÚsemanage_bool_existsZsemanage_bool_queryÚupperr­Zsemanage_bool_set_valuer•rÆr¯r®Zsemanage_bool_set_activeZsemanage_bool_modify_localÚsemanage_bool_key_freeZsemanage_bool_free)rr,ÚvaluerLr¦r~r rrr Z__modð s0   zbooleanRecords.__modFc Cs´|jƒ|rœt|ƒ}x||jƒjdƒD]j}|jƒ}t|ƒdkr>q$y|jdƒ\}}Wn(tk rxttd||fƒƒ‚YnX|j|jƒ|jƒƒq$W|j ƒn |j||ƒ|j ƒdS)NrŠrú=zBad format %s: Record %s) rbr¼r½r�rxrHr^rÚ_booleanRecords__modr¿r8)rr,rµÚuse_filerÄr Zboolnamerarrr r² s   zbooleanRecords.modifycCsÚtj|ƒ}t|j|ƒ\}}|dkr2ttdƒ|ƒ‚t|j|ƒ\}}|dkrZttdƒ|ƒ‚|snttdƒ|ƒ‚t|j|ƒ\}}|dkr–ttdƒ|ƒ‚|sªttdƒ|ƒ‚t|j|ƒ}|dkrÎttdƒ|ƒ‚t |ƒdS)NrzCould not create a key for %sz(Could not check if boolean %s is definedzBoolean %s is not definedz2Boolean %s is defined in policy, cannot be deletedzCould not delete boolean %s) rGr°r±rWr^rr²Zsemanage_bool_exists_localZsemanage_bool_del_localr´)rr,rLr¦r~rrr r³# s$  zbooleanRecords.__deletecCs|jƒ|j|ƒ|jƒdS)N)rbÚ_booleanRecords__deleter8)rr,rrr rˆ; s zbooleanRecords.deletecCsZt|jƒ\}|_|dkr$ttdƒƒ‚|jƒx |jD]}t|ƒ}|j|ƒq4W|jƒdS)NrzCould not list booleans) Úsemanage_bool_list_localrWÚblistr^rrbÚsemanage_bool_get_namer¹r8)rrLÚbooleanr,rrr ra@ s  zbooleanRecords.deleteallrcCsÂi}|rt|jƒ\}|_nt|jƒ\}|_|dkr>ttdƒƒ‚x~|jD]t}g}t|ƒ}|jt|ƒƒ|j r–||j kr–|jt j |ƒƒ|jt j |ƒƒn|j|dƒ|j|dƒ|||<qFW|S)NrzCould not list booleans)rºrWr»Zsemanage_bool_listr^rr¼r'Zsemanage_bool_get_valuer¯r®rGZsecurity_get_boolean_pendingZsecurity_get_boolean_active)rrzrÁrLr½rµr,rrr rrM s"   zbooleanRecords.get_allcCstj|ƒ}tj|ƒS)N)rGr°rZZ boolean_desc)rr,rrr Úget_descd s zbooleanRecords.get_desccCstj|ƒ}tj|ƒS)N)rGr°rZZboolean_category)rr,rrr Ú get_categoryh s zbooleanRecords.get_categorycCsJg}|jdƒ}x6t|jƒƒD]&}||r|jd||d|fƒqW|S)NTz -m -%s %srw)rrr�rÆr')rrrÁr¦rrr rdl s  zbooleanRecords.customizedTcCsîtdƒtdƒf}|rX|j|ƒ}x4t|jƒƒD]$}||r,td|||dfƒq,WdS|j|ƒ}t|ƒdkrrdS|rštdtdƒtdƒtd ƒtd ƒfƒxNt|jƒƒD]>}||r¨td ||||d|||d|j|ƒfƒq¨WdS) Nr‹rŠz%s=%srwrz%-30s %s %s %s zSELinux booleanZStateZDefaultZ Descriptionz%-30s (%-5s,%5s) %s)rrrr�rÆrxrHr¾)rryrzr¸Zon_offrÁr¦rrr r{t s   $zbooleanRecords.list)N)NF)r)TFF)r9r:r;r!r·r²r¹rˆrarrr¾r¿rdr{rrrr rªØ s   rª)r)r=)r=)9r�rœrGr|rBr(rr r5ZPROGNAMErZrrDÚgettextÚkwargsÚ version_infoZinstallÚbuiltinsr*Ú__dict__r’Z __builtin__rr>rŽZSEMANAGE_FCONTEXT_ALLZSEMANAGE_FCONTEXT_REGZSEMANAGE_FCONTEXT_DIRZSEMANAGE_FCONTEXT_CHARZSEMANAGE_FCONTEXT_BLOCKZSEMANAGE_FCONTEXT_SOCKZSEMANAGE_FCONTEXT_LINKZSEMANAGE_FCONTEXT_PIPEr£r“rZ audit_closerrrœr?rFrNrOrPrfr‰r�r–r™ràrr-rArbrqrªrrrr ÚsÜ  $$  ik H $M.