PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` 3 Klfw @sdZddlZddlZyddlmZWn ek rDddlmZYnXddlZddlZddl Z ddl Z ddl m Z ddZ Gdd d Zd d ZGd d d ZdS)zU Utilities for dealing with the compilation of modules and creation of module tress. N)getstatusoutput)defaultscCs0tjd|}t|dkr(|djr(dSdSdS)z'Check that a module name is valid. z[^a-zA-Z0-9_\-\.]rTFN)refindalllenisalpha)modnamemr /usr/lib/python3.6/module.py is_valid_name(s r c@sNeZdZddZddZddZddZd d Zd d Zd dZ dddZ dS) ModuleTreecCs||_d|_dS)N)r dirname)selfr r r r __init__2szModuleTree.__init__cCs|jS)N)r)rr r r dir_name6szModuleTree.dir_namecCs|jd|jdS)N/z.te)rr )rr r r te_name9szModuleTree.te_namecCs|jd|jdS)Nrz.fc)rr )rr r r fc_name<szModuleTree.fc_namecCs|jd|jdS)Nrz.if)rr )rr r r if_name?szModuleTree.if_namecCs|jd|jdS)Nrz.pp)rr )rr r r package_nameBszModuleTree.package_namecCs |jdS)Nz /Makefile)r)rr r r makefile_nameEszModuleTree.makefile_nameNcCs|d|j|_tj|jt|jd}|r>|jd|n|jdtj|j t|j dj t|j dj t|j dj dS)Nrwzinclude ) r rosmkdiropenrwriterrefpolicy_makefilecloserrr)rZparent_dirnameZmakefile_includefdr r r createHs zModuleTree.create)N) __name__ __module__ __qualname__rrrrrrrr!r r r r r1srcCstjjtjj|ddS)Nrr)rpathsplitextsplit) sourcenamer r r modname_from_sourcenameXsr)c@sTeZdZdZdddZddZddZd d Zdd d ZddZ ddZ ddZ dS)ModuleCompileratModuleCompiler eases running of the module compiler. The ModuleCompiler class encapsulates running the commandline module compiler (checkmodule) and module packager (semodule_package). You are likely interested in the create_module_package method. Several options are controlled via paramaters (only effects the non-refpol builds): .mls [boolean] Generate an MLS module (by passed -M to checkmodule). True to generate an MLS module, false otherwise. .module [boolean] Generate a module instead of a base module. True to generate a module, false to generate a base. .checkmodule [string] Fully qualified path to the module compiler. Default is /usr/bin/checkmodule. .semodule_package [string] Fully qualified path to the module packager. Defaults to /usr/bin/semodule_package. .output [file object] File object used to write verbose output of the compililation and packaging process. NcCs<tj|_d|_d|_d|_||_d|_tj |_ d|_ dS)zCreate a ModuleCompiler instance, optionally with an output file object for verbose output of the compilation process. Tz/usr/bin/checkmodulez/usr/bin/semodule_packagez /usr/bin/makeN) selinuxZis_selinux_mls_enabledmlsmodule checkmodulesemodule_packageoutput last_outputrrrefpol_makefilemake)rr1r r r rts  zModuleCompiler.__init__cCs |jr|jj|d||_dS)N )r1rr2)rstrr r r oszModuleCompiler.ocCs$|j|t|\}}|j||S)N)r7r)rcommandrcr1r r r runs   zModuleCompiler.runcCsJ|jd}t|dkr td|dj|dd}|d}|d}||fS) zGenerate the module and policy package filenames from a source file name. The source file must be in the form of "foo.te". This will generate "foo.mod" and "foo.pp". Returns a tuple with (modname, policypackage). .z,invalid sourcefile name %s (must end in .te)rrz.modz.pp)r'r RuntimeErrorjoin)rr(Z splitnamebasenamer packagenamer r r gen_filenamess   zModuleCompiler.gen_filenamesTcCsD|r|j|n0|j|\}}|j|||j||tj|dS)aCreate a module package saved in a packagename from a sourcename. The create_module_package creates a module package saved in a file named sourcename (.pp is the standard extension) from a source file (.te is the standard extension). The source file should contain SELinux policy statements appropriate for a base or non-base module (depending on the setting of .module). Only file names are accepted, not open file objects or descriptors because the command line SELinux tools are used. On error a RuntimeError will be raised with a descriptive error message. N) refpol_buildrBcompilepackagerunlink)rr(Z refpolicyr rAr r r create_module_packages    z$ModuleCompiler.create_module_packagecCs4|jd|j}|j|}|dkr0td|jdS)Nz -f rzcompilation failed: %s)r4r3r:r>r2)rr(r8r9r r r rCs zModuleCompiler.refpol_buildcCsp|jg}|jr|jd|jr(|jd|jd|j||j||jdj|}|dkrltd|jdS)Nz-Mz-mz-o rzcompilation failed: %s)r/r-appendr.r:r?r>r2)rr(r sr9r r r rDs     zModuleCompiler.compilecCsZ|jg}|jd|j||jd|j||jdj|}|dkrVtd|jdS)Nz-oz-mrHrzpackaging failed [%s])r0rIr:r?r>r2)rr rArJr9r r r rEs    zModuleCompiler.package)N)T) r"r#r$__doc__rr7r:rBrGrCrDrEr r r r r*[s   r*)rKrZtempfile subprocessr ImportErrorZcommandsrZos.pathZshutilr,r+rr rr)r*r r r r s  '