a ¾Ãye ã @s"ddlZddlZddlZdZdZgd¢ZdZzFddlZiZej dkrLded<ej efd d ie¤d di¤ŽZ e jZ WnHzddl Z ee jd <Wn$ey´ddlZeejd <Yn0Yn0d d„Zd$dd„Zd%dd„Zd&dd„Zdad'dd„Zd(dd„Zdd„Zd)dd„Zd d!„Zd*d"d#„ZdS)+éNz_admin$z_role$) Úget_all_interfacesÚget_interfaces_from_xmlÚ get_adminÚget_userÚget_interface_dictÚget_interface_format_textÚ!get_interface_compile_format_textÚ get_xml_fileÚinterface_compile_testzselinux-python)éTÚunicodeÚ localedirz/usr/share/localeÚfallbackÚ_cCs(g}t|ƒ}| ¡D]}| |¡q|S)z' Get all interfaces from given xml file)rÚkeysÚappend)ÚpathZinterfaces_listÚidictÚk©rú6/usr/lib/python3.9/site-packages/sepolicy/interface.pyr5s   rÚcCs0ddlm}g}|s|ƒ}nt|ƒ}t|ƒ}|S)Nr)Ú get_methods)Úsepolicyrr r)rrZall_interfacesÚxml_pathrrrr>s rc Cs¼g}|rŒz6t|ƒ}t|ƒ}| ¡D]}| d¡r"| |¡q"Wq¸tyˆ}z2tj d|j j t |ƒf¡t  d¡WYd}~q¸d}~00n,t  ¡D]"}| d¡r”| | d¡d¡q”|S)z? Get all domains with an admin interface from installed policy.Z_adminú%s: %s éNr)r rrÚendswithrÚIOErrorÚsysÚstderrÚwriteÚ __class__Ú__name__ÚstrÚexitrrÚsplit)rZ admin_listrrrÚeÚirrrrJs  "  rc Csôg}|r¤zNt|ƒ}t|ƒ}| ¡D]0}| d¡r"d|dd…t ¡vr"| |¡q"Wqðty }z2tj   d|j j t |ƒf¡t d¡WYd}~qðd}~00nLt ¡D]B}t dt|¡}t|ƒdkr¬d|dt ¡vr¬| |d¡q¬|S) z1 Get all domains with SELinux user role interfaceZ_rolez %s_exec_tNéûÿÿÿrrz(.*)%sr)r rrrrZ get_all_typesrrrr r!r"r#r$r%rÚreÚfindallÚUSER_TRANSITION_INTERFACEÚlen)rZ trans_listrrrr'r(Úmrrrr`s$  "  rú#/usr/share/selinux/devel/policy.xmlc Cs<ddl}ddl}trtSiag}d}||7}|d7}zî|j |¡rR|jj |¡}n|jj |¡}|  d¡D]´}|  d¡D]¤}|  d¡D]D}|  d¡D]} |  |   d¡¡q”||  d ¡jdgt|  d¡<g}q†|  d ¡D]D}|  d¡D]} |  |   d¡¡qä||  d ¡jd gt|  d¡<g}qÖqxqjWnty6Yn0tS) NrzZ z ZlayerÚmoduleÚ interfaceZparamÚnameZsummaryÚtemplate)ÚosZxml.etree.ElementTreeÚinterface_dictrÚisfileZetreeZ ElementTreeÚparseZ fromstringr+ÚiterrÚgetÚfindÚtextr) rr4ZxmlZ param_listrZtreeÚlr.r(r'rrrr{s8 rcCs<t|ƒ}d|d ||d¡d ||d d¡¡f}|S)Nz %s(%s) %sú, rú rÚ )rÚjoinr&)r1rrÚinterface_textrrrr¥s0rcCsHddlm}g}||dD]&}| |j|¡d|d |¡f}q|S)Nr©Ú test_modulerz%s(%s) r=)Ú templatesrCrÚ dict_valuesr@)Zinterfaces_dictr1rCZ param_tmpr(rArrrr¬s  rÚ compiletestcCs6ddlm}d}|t d||j¡7}|t||ƒ7}|S)NrrBrZ TEMPLATETYPE)rDrCr*ÚsubZte_test_moduler)r1rr2rCÚterrrÚgenerate_compile_te¶s  rIcCsªddl}zddlm}Wnty6ddlm}Yn0|j |¡d}|j |¡ d¡d}|d||ƒ\}}|dkr¢t j   d¡t j   d|¡t   d ¡n|SdS) z; Returns xml format of interfaces for given .if policy filerN©Úgetstatusoutputú/Ú.zN/usr/bin/python3 /usr/share/selinux/devel/include/support/segenxml.py -w -m %sz- Could not process selected interface file. z %sr) r4ÚcommandsrKÚ ImportErrorÚ subprocessrÚdirnameÚbasenamer&rr r!r%)Zif_filer4rKZbasedirÚfilenameÚrcÚoutputrrrr ¿s   r c Cszgd¢}dg}zddlm}Wnty<ddlm}Yn0ddl}ddddd œ}t|ƒ}| d ¡d|vsb||d |vsbttd ƒ|ƒzft |d dƒ}|  t ||ƒ¡|  ¡|d|dƒ\} } | dkröt j  | ¡t j  tdƒ|¡Wn>ty6} z$t j  tdƒ|| f¡WYd} ~ n d} ~ 00| ¡D]} |j | ¡r@| | ¡q@nt j  tdƒ|¡dS)N)ZuserdomZkernelZcorenetÚfilesÚdevr3rrJzcompiletest.ppzcompiletest.tezcompiletest.fczcompiletest.if)ÚpprHZfcÚifrézCompiling %s interfacerHÚwz,make -f /usr/share/selinux/devel/Makefile %srXz Compile test for %s failed. z% Compile test for %s has not run. %s z, Compiling of %s interface is not supported.)rNrKrOrPr4rr&ÚprintrÚopenr!rIÚcloserr ÚEnvironmentErrorÚvaluesrÚexistsÚremove) r1rZexclude_interfacesZexclude_interface_typerKr4Z policy_filesrÚfdrTrUr'Úvrrrr Ñs2 & . r )r)r)r)r/)r/)rF)r/)r*rrZADMIN_TRANSITION_INTERFACEr,Ú__all__ZPROGNAMEÚgettextÚkwargsÚ version_infoÚ translationÚtrÚbuiltinsr$Ú__dict__rOZ __builtin__r rrrrr5rrrrIr r rrrrÚsJ  ÿþý     *