Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.

Bug 1367748

Summary: checkmodule fails to compile policy on newer .te files
Product: [Fedora] Fedora Reporter: Simon Sekidde <ssekidde>
Component: checkpolicyAssignee: Daniel Walsh <dwalsh>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: 24CC: dwalsh, mgrepl, plautrba, vmojzis
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-10-31 16:10:54 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Simon Sekidde 2016-08-17 11:33:50 UTC
Description of problem:

example.te

      1 
      2 policy_module(myapp,1.0.0)
      3 
      4 ########################################
      5 #
      6 # Declarations
      7 #
      8 
      9 type myapp_t;
     10 type myapp_exec_t;
     11 domain_type(myapp_t)
     12 domain_entry_file(myapp_t, myapp_exec_t)

$ checkmodule -C -M -m example.te -o example.mod
checkmodule:  loading policy configuration from example.te
example.te:2:ERROR 'Building a policy module, but no module specification found.
' at token 'policy_module' on line 2:
policy_module(myapp,1.0.0)

      1 
      2 #policy_module(myapp,1.0.0)
      3 module myapp 1.0.0; 
      4 

$ checkmodule -C -M -m example.te -o example.mod
checkmodule:  loading policy configuration from example.te
example.te:12:ERROR 'This block has no require section.' at token 'domain_type' on line 12:
domain_type(myapp_t)
type myapp_exec_t;
checkmodule:  error(s) encountered while parsing configuration

Version-Release number of selected component (if applicable):

checkpolicy-2.5-6.fc24.x86_64

How reproducible:

100%

Comment 1 Vit Mojzis 2016-10-31 16:10:54 UTC
The problem here is that checkmodule doesn't understand M4 macros (policy_module, domain_type, domain_entry_file).
Please use the following command to compile your policy module (also, the name of the .te file has to be <module_name>.te):

# mv example.te myapp.te
# make -f /usr/share/selinux/devel/Makefile myapp.pp

First 'all_interfaces.conf' containing definitions of all macros is created. That file is than used to expand all macros in given module. Expanded module can than be compiled by checkmodule. (use 'make' with '-n' to see commands used in the process)


The following example module can be compiled directly by checkmodule because it doesn't contain macros:
# cat mymodule.te
module mymodule 1.0;

require {
	class file {open read write};
	type httpd_t;
	attribute non_security_file_type;
};

allow httpd_t non_security_file_type:file { open read write };

# checkmodule -C -M -m mymodule.te -o mymodule.mod