????

Your IP : 3.144.158.54


Current Path : /lib/python3.9/site-packages/sepolgen/__pycache__/
Upload File :
Current File : //lib/python3.9/site-packages/sepolgen/__pycache__/module.cpython-39.pyc

a


z
fv�@s�dZddlZddlZzddlmZWneyBddlmZYn0ddlZddlZddl	Z	ddl
Z
ddlmZdd�Z
Gdd	�d	�Zd
d�ZGdd
�d
�ZdS)zU
Utilities for dealing with the compilation of modules and creation
of module tress.
�N)�getstatusoutput�)�defaultscCs0t�d|�}t|�dkr(|d��r(dSdSdS)z'Check that a module name is valid.
    z[^a-zA-Z0-9_\-\.]rTFN)�re�findall�len�isalpha)�modname�m�r�3/usr/lib/python3.9/site-packages/sepolgen/module.py�
is_valid_name(sr
c@sNeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
dS)�
ModuleTreecCs||_d|_dS�N)r	�dirname)�selfr	rrr�__init__2szModuleTree.__init__cCs|jSr�r�rrrr�dir_name6szModuleTree.dir_namecCs|jd|jdS)N�/z.te�rr	rrrr�te_name9szModuleTree.te_namecCs|jd|jdS)Nrz.fcrrrrr�fc_name<szModuleTree.fc_namecCs|jd|jdS)Nrz.ifrrrrr�if_name?szModuleTree.if_namecCs|jd|jdS)Nr�.pprrrrr�package_nameBszModuleTree.package_namecCs
|jdS)Nz	/Makefilerrrrr�
makefile_nameEszModuleTree.makefile_nameNcCs�|d|j|_t�|j�t|��d�}|r>|�d|�n|�dt���|�	�t|�
�d��	�t|��d��	�t|��d��	�dS)Nr�wzinclude )
r	r�os�mkdir�openr�writer�refpolicy_makefile�closerrr)rZparent_dirnameZmakefile_include�fdrrr�createHszModuleTree.create)N)�__name__�
__module__�__qualname__rrrrrrrr&rrrrr1srcCstj�tj�|�d�dS)Nrr)r�path�splitext�split)�
sourcenamerrr�modname_from_sourcenameXsr.c@sTeZdZdZddd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dd�ZdS)�ModuleCompilerasModuleCompiler 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 parameters (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<t��|_d|_d|_d|_||_d|_t�	�|_
d|_dS)z�Create a ModuleCompiler instance, optionally with an
        output file object for verbose output of the compilation process.
        Tz/usr/bin/checkmodulez/usr/bin/semodule_package�z
/usr/bin/makeN)�selinuxZis_selinux_mls_enabled�mls�module�checkmodule�semodule_package�output�last_outputrr#�refpol_makefile�make)rr6rrrrts

zModuleCompiler.__init__cCs |jr|j�|d�||_dS)N�
)r6r"r7)r�strrrr�o�szModuleCompiler.ocCs$|�|�t|�\}}|�|�|Sr)r<r)r�command�rcr6rrr�run�s

zModuleCompiler.runcCsJ|�d�}t|�dkr td|��d�|dd��}|d}|d}||fS)z�Generate 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)r���z.modr)r,r�RuntimeError�join)rr-Z	splitname�basenamer	�packagenamerrr�
gen_filenames�s

zModuleCompiler.gen_filenamesTcCsD|r|�|�n0|�|�\}}|�||�|�||�t�|�dS)a�Create 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_buildrG�compile�packager�unlink)rr-Z	refpolicyr	rFrrr�create_module_package�sz$ModuleCompiler.create_module_packagecCs4|jd|j}|�|�}|dkr0td|j��dS)Nz -f r�compilation failed:
%s)r9r8r?rCr7)rr-r=r>rrrrH�s
zModuleCompiler.refpol_buildcCsp|jg}|jr|�d�|jr(|�d�|�d�|�|�|�|�|�d�|��}|dkrltd|j��dS)Nz-M�-m�-o� rrM)r4r2�appendr3r?rDrCr7)rr-r	�sr>rrrrI�s




zModuleCompiler.compilecCsZ|jg}|�d�|�|�|�d�|�|�|�d�|��}|dkrVtd|j��dS)NrOrNrPrzpackaging failed [%s])r5rQr?rDrCr7)rr	rFrRr>rrrrJ�s



zModuleCompiler.package)N)T)r'r(r)�__doc__rr<r?rGrLrHrIrJrrrrr/[s


	r/)rSrZtempfile�
subprocessr�ImportErrorZcommandsrZos.path�shutilr1r0rr
rr.r/rrrr�<module>s	'