1b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/*
2b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Copyright 2011 Tresys Technology, LLC. All rights reserved.
3b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
4b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Redistribution and use in source and binary forms, with or without
5b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * modification, are permitted provided that the following conditions are met:
6b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
7b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *    1. Redistributions of source code must retain the above copyright notice,
8b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       this list of conditions and the following disclaimer.
9b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
10b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *    2. Redistributions in binary form must reproduce the above copyright notice,
11b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       this list of conditions and the following disclaimer in the documentation
12b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       and/or other materials provided with the distribution.
13b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
14b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS
15b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
18b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
22b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
23b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
25b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * The views and conclusions contained in the software and documentation are those
26b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * of the authors and should not be interpreted as representing official policies,
27b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * either expressed or implied, of Tresys Technology, LLC.
28b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence */
29b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
30b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#ifndef CIL_INTERNAL_H_
31b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_INTERNAL_H_
32b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
33b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <stdlib.h>
34b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <stdio.h>
35b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <stdint.h>
36b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <arpa/inet.h>
37b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
38b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <sepol/policydb/services.h>
39b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <sepol/policydb/policydb.h>
40c303ca910add05bb5fc9f515d880b393f02d695cJames Carter#include <sepol/policydb/flask_types.h>
41b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
42b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <cil/cil.h>
43b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
44b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_flavor.h"
45b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_tree.h"
46b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_symtab.h"
47b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_mem.h"
48b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
49b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_MAX_NAME_LENGTH 2048
50b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
51b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
52b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_pass {
53b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_INIT = 0,
54b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
55b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_TIF,
56b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_IN,
5776ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence	CIL_PASS_BLKIN_LINK,
5876ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence	CIL_PASS_BLKIN_COPY,
59b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_BLKABS,
60b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_MACRO,
61b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_CALL1,
62b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_CALL2,
63b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_ALIAS1,
64b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_ALIAS2,
65b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_MISC1,
66b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_MLS,
67b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_MISC2,
68b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_MISC3,
69b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
70b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PASS_NUM
71b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
72b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
73b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
74b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/*
75b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	Keywords
76b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence*/
77b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_T1;
78b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_T2;
79b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_T3;
80b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_R1;
81b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_R2;
82b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_R3;
83b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_U1;
84b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_U2;
85b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_U3;
86b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_L1;
87b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_L2;
88b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_H1;
89b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_H2;
90b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_AND;
91b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_OR;
92b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NOT;
93b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_EQ;
94b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NEQ;
95b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_DOM;
96b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_DOMBY;
97b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONS_INCOMP;
98b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONDTRUE;
99b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONDFALSE;
100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SELF;
101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_OBJECT_R;
102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_STAR;
103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TCP;
104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_UDP;
1053895fbbe0cf2ec52d6b6eda66084b6e9f8d88fb2Richard Haineschar *CIL_KEY_DCCP;
106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_AUDITALLOW;
107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TUNABLEIF;
108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ALLOW;
109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DONTAUDIT;
110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPETRANSITION;
111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPECHANGE;
112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CALL;
113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TUNABLE;
114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_XOR;
115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ALL;
116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_RANGE;
117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_GLOB;
118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_FILE;
119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DIR;
120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CHAR;
121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_BLOCK;
122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SOCKET;
123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_PIPE;
124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SYMLINK;
125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ANY;
126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_XATTR;
127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TASK;
128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TRANS;
129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPE;
130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLE;
131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USER;
13277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiychar *CIL_KEY_USERATTRIBUTE;
13377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiychar *CIL_KEY_USERATTRIBUTESET;
134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SENSITIVITY;
135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CATEGORY;
136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CATSET;
137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_LEVEL;
138b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_LEVELRANGE;
139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASS;
140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_IPADDR;
141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_MAP_CLASS;
142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASSPERMISSION;
143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_BOOL;
144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_STRING;
145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NAME;
146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SOURCE;
147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TARGET;
148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_LOW;
149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_HIGH;
150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_LOW_HIGH;
151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_HANDLEUNKNOWN;
152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_HANDLEUNKNOWN_ALLOW;
153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_HANDLEUNKNOWN_DENY;
154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_HANDLEUNKNOWN_REJECT;
155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_MACRO;
156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_IN;
157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_MLS;
158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DEFAULTRANGE;
159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_BLOCKINHERIT;
160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_BLOCKABSTRACT;
161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASSORDER;
162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASSMAPPING;
163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASSPERMISSIONSET;
164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_COMMON;
165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CLASSCOMMON;
166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SID;
167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SIDCONTEXT;
168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SIDORDER;
169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USERLEVEL;
170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USERRANGE;
171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USERBOUNDS;
172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USERPREFIX;
173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SELINUXUSER;
174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SELINUXUSERDEFAULT;
175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEATTRIBUTE;
176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEATTRIBUTESET;
177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEALIAS;
178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEALIASACTUAL;
179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEBOUNDS;
180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEPERMISSIVE;
181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_RANGETRANSITION;
182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_USERROLE;
183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLETYPE;
184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLETRANSITION;
185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLEALLOW;
186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLEATTRIBUTE;
187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLEATTRIBUTESET;
188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROLEBOUNDS;
189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_BOOLEANIF;
190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NEVERALLOW;
191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_TYPEMEMBER;
192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SENSALIAS;
193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SENSALIASACTUAL;
194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CATALIAS;
195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CATALIASACTUAL;
196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CATORDER;
197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SENSITIVITYORDER;
198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_SENSCAT;
199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONSTRAIN;
200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_MLSCONSTRAIN;
201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_VALIDATETRANS;
202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_MLSVALIDATETRANS;
203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_CONTEXT;
204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_FILECON;
205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_PORTCON;
206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NODECON;
207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_GENFSCON;
208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NETIFCON;
209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_PIRQCON;
210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_IOMEMCON;
211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_IOPORTCON;
212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_PCIDEVICECON;
213f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graafchar *CIL_KEY_DEVICETREECON;
214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_FSUSE;
215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_POLICYCAP;
216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_OPTIONAL;
217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DEFAULTUSER;
218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DEFAULTROLE;
219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_DEFAULTTYPE;
220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_ROOT;
221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_NODE;
222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencechar *CIL_KEY_PERM;
223ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencechar *CIL_KEY_ALLOWX;
224ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencechar *CIL_KEY_AUDITALLOWX;
225ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencechar *CIL_KEY_DONTAUDITX;
226f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrencechar *CIL_KEY_NEVERALLOWX;
227ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencechar *CIL_KEY_PERMISSIONX;
228ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencechar *CIL_KEY_IOCTL;
22971dd7b71338e832da8e446d565e6cd871b8a08f6Yuli Khodorkovskiychar *CIL_KEY_UNORDERED;
230875a6bcbe8885c927122c6931b3a01d821e04b10James Carterchar *CIL_KEY_SRC_INFO;
231875a6bcbe8885c927122c6931b3a01d821e04b10James Carterchar *CIL_KEY_SRC_CIL;
232875a6bcbe8885c927122c6931b3a01d821e04b10James Carterchar *CIL_KEY_SRC_HLL;
233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/*
235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	Symbol Table Array Indices
236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence*/
237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_sym_index {
238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_BLOCKS = 0,
239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_USERS,
240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ROLES,
241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_TYPES,
242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_COMMONS,
243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_CLASSES,
244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_CLASSPERMSETS,
245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_BOOLS,
246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_TUNABLES,
247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_SENS,
248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_CATS,
249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_SIDS,
250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_CONTEXTS,
251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_LEVELS,
252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_LEVELRANGES,
253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_POLICYCAPS,
254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_IPADDRS,
255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_NAMES,
256ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	CIL_SYM_PERMX,
257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_NUM,
258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_UNKNOWN,
259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_PERMS	// Special case for permissions. This symtab is not included in arrays
260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_sym_array {
263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_ROOT = 0,
264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_BLOCK,
265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_IN,
266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_MACRO,
267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_CONDBLOCK,
268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_SYM_ARRAY_NUM
269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceextern int cil_sym_sizes[CIL_SYM_ARRAY_NUM][CIL_SYM_NUM];
272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_CLASS_SYM_SIZE	256
274c303ca910add05bb5fc9f515d880b393f02d695cJames Carter#define CIL_PERMS_PER_CLASS (sizeof(sepol_access_vector_t) * 8)
275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_db {
277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *parse;
278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *ast;
279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_type *selftype;
280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *sidorder;
281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classorder;
282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *catorder;
283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *sensitivityorder;
284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *netifcon;
285b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *genfscon;
286b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *filecon;
287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *nodecon;
288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *portcon;
289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *pirqcon;
290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *iomemcon;
291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *ioportcon;
292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *pcidevicecon;
293f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf	struct cil_sort *devicetreecon;
294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sort *fsuse;
295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *userprefixes;
296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *selinuxusers;
297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *names;
298bea07710d0c269e28215f871494dace902b05ac1James Carter	int num_types_and_attrs;
299bea07710d0c269e28215f871494dace902b05ac1James Carter	int num_classes;
300b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int num_cats;
301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int num_types;
302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int num_roles;
30377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	int num_users;
304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_type **val_to_type;
305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_role **val_to_role;
30677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	struct cil_user **val_to_user;
307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int disable_dontaudit;
308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int disable_neverallow;
309a58c158840adfad1cfb6259aa3a39c229557a570James Carter	int attrs_expand_generated;
310a58c158840adfad1cfb6259aa3a39c229557a570James Carter	unsigned attrs_expand_size;
311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int preserve_tunables;
312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int handle_unknown;
313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int mls;
3148147bc762241b899444e43557c45f7f79c707502Steve Lawrence	int target_platform;
3158147bc762241b899444e43557c45f7f79c707502Steve Lawrence	int policy_version;
316b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
317b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
31880afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrencestruct cil_root {
31980afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence	symtab_t symtab[CIL_SYM_NUM];
32080afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence};
32180afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence
322b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sort {
323b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_flavor flavor;
324b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t count;
325b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t index;
326b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void **array;
327b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
328b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
329b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_block {
330b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
331b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t symtab[CIL_SYM_NUM];
332b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint16_t is_abstract;
33376ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence	struct cil_list *bi_nodes;
334b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
335b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
336b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_blockinherit {
337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *block_str;
33876ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence	struct cil_block *block;
339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_blockabstract {
342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *block_str;
343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_in {
346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t symtab[CIL_SYM_NUM];
347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *block_str;
348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_optional {
351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
35276ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence	int enabled;
353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_perm {
356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	unsigned int value;
358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classperms; /* Only used for map perms */
359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_class {
362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t perms;
364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	unsigned int num_perms;
365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *common; /* Only used for kernel class */
366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ordered; /* Only used for kernel class */
367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classorder {
370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *class_list_str;
371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classperms_set {
374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *set_str;
375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_classpermission *set;
376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classperms {
379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *class_str;
380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *class;
381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *perm_strs;
382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *perms;
383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classpermission {
386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classperms;
388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classpermissionset {
391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *set_str;
392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classperms;
393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
395b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classmapping {
396b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *map_class_str;
397b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *map_perm_str;
398b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classperms;
399b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
400b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
401b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_classcommon {
402b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *class_str;
403b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *common_str;
404b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
405b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
406b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_alias {
407b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
408b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *actual;
409b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
410b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
411b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_aliasactual {
412b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *alias_str;
413b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *actual_str;
414b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
415b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
416b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sid {
417b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
418b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
419b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ordered;
420b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
421b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
422b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sidcontext {
423b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *sid_str;
424b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
425b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
426b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
427b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
428b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sidorder {
429b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *sid_list_str;
430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_user {
433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_user *bounds;
43577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	ebitmap_t *roles;
436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_level *dftlevel;
437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_levelrange *range;
43877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	int value;
43977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy};
44077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy
44177779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiystruct cil_userattribute {
44277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	struct cil_symtab_datum datum;
44377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	struct cil_list *expr_list;
44477779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	ebitmap_t *users;
44577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy};
44677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy
44777779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiystruct cil_userattributeset {
44877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	char *attr_str;
44977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	struct cil_list *str_expr;
45077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	struct cil_list *datum_expr;
451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_userrole {
454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
45577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy	void *user;
456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *role_str;
457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *role;
458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_userlevel {
461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *level_str;
463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_level *level;
464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_userrange {
467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *range_str;
469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_levelrange *range;
470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_userprefix {
473b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
474b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_user *user;
475b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *prefix_str;
476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_selinuxuser {
479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *name_str;
480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_user *user;
482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *range_str;
483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_levelrange *range;
484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_role {
487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_role *bounds;
489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	ebitmap_t *types;
490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int value;
491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_roleattribute {
494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *expr_list;
496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	ebitmap_t *roles;
497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_roleattributeset {
500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *attr_str;
501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_roletype {
506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *role_str;
507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *role; /* role or attribute */
508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *type_str;
509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *type; /* type, alias, or attribute */
510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_type	{
513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_type *bounds;
515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int value;
516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
518a58c158840adfad1cfb6259aa3a39c229557a570James Carter#define CIL_ATTR_AVRULE     0x01
519a58c158840adfad1cfb6259aa3a39c229557a570James Carter#define CIL_ATTR_NEVERALLOW 0x02
520a58c158840adfad1cfb6259aa3a39c229557a570James Carter#define CIL_ATTR_CONSTRAINT 0x04
521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_typeattribute {
522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *expr_list;
524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	ebitmap_t *types;
525a58c158840adfad1cfb6259aa3a39c229557a570James Carter	int used;	// whether or not this attribute was used in a binary policy rule
526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_typeattributeset {
529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *attr_str;
530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_typepermissive {
535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *type_str;
536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *type; /* type or alias */
537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_name {
540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *name_str;
542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_nametypetransition {
545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *src; /* type, alias, or attribute */
547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *tgt_str;
548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *tgt; /* type, alias, or attribute */
549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *obj_str;
550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *obj;
551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *name_str;
552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_name *name;
553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *result_str;
554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *result; /* type or alias */
555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_rangetransition {
559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *src; /* type, alias, or attribute */
561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *exec_str;
562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *exec; /* type, alias, or attribute */
563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *obj_str;
564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *obj;
565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *range_str;
566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_levelrange *range;
567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_bool {
570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint16_t value;
572b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
573b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
574b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_tunable {
575b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
576b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint16_t value;
577b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
578b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
579b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_ALLOWED     1
580b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_AUDITALLOW  2
581b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_DONTAUDIT   8
582b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_NEVERALLOW 128
583b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_AV         (AVRULE_ALLOWED | AVRULE_AUDITALLOW | AVRULE_DONTAUDIT | AVRULE_NEVERALLOW)
584b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_avrule {
585f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence	int is_extended;
586b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t rule_kind;
587b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
588b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *src; /* type, alias, or attribute */
589b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *tgt_str;
590b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *tgt; /* type, alias, or attribute */
591f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence	union {
592f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence		struct cil_list *classperms;
593f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence		struct {
594f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence			char *permx_str;
595f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence			struct cil_permissionx *permx;
596f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence		} x;
597f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence	} perms;
598b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
599b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
600ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence#define CIL_PERMX_KIND_IOCTL 1
601ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencestruct cil_permissionx {
602ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	struct cil_symtab_datum datum;
603ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	uint32_t kind;
604ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	char *obj_str;
605f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence	struct cil_class *obj;
606ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	struct cil_list *expr_str;
607ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence	ebitmap_t *perms;
608ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence};
609ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence
610b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_TYPE_TRANSITION 16
611b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_TYPE_MEMBER     32
612b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_TYPE_CHANGE     64
613b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_AVRULE_TYPE       (AVRULE_TRANSITION | AVRULE_MEMBER | AVRULE_CHANGE)
614b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_type_rule {
615b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t rule_kind;
616b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
617b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *src; /* type, alias, or attribute */
618b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *tgt_str;
619b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *tgt; /* type, alias, or attribute */
620b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *obj_str;
621b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *obj;
622b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *result_str;
623b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *result; /* type or alias */
624b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
625b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
626b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_roletransition {
627b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
628b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_role *src;
629b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *tgt_str;
630b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *tgt; /* type, alias, or attribute */
631b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *obj_str;
632b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *obj;
633b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *result_str;
634b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_role *result;
635b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
636b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
637b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_roleallow {
638b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *src_str;
639b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *src; /* role or attribute */
640b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *tgt_str;
641b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *tgt; /* role or attribute */
642b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
643b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
644b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sens {
645b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
646b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cats_list;
647b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ordered;
648b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
649b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
650b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_sensorder {
651b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *sens_list_str;
652b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
653b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
654b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_cat {
655b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
656b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ordered;
657b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int value;
658b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
659b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
660b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_cats {
661b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t evaluated;
662b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
663b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
664b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
665b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
666b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_catset {
667b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
668b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_cats *cats;
669b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
670b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
671b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_catorder {
672b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cat_list_str;
673b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
674b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
675b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_senscat {
676b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *sens_str;
677b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_cats *cats;
678b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
679b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
680b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_level {
681b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
682b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *sens_str;
683b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sens *sens;
684b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_cats *cats;
685b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
686b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
687b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_levelrange {
688b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
689b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *low_str;
690b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_level *low;
691b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *high_str;
692b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_level *high;
693b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
694b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
695b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_context {
696b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
697b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *user_str;
698b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_user *user;
699b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *role_str;
700b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_role *role;
701b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *type_str;
702b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	void *type; /* type or alias */
703b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *range_str;
704b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_levelrange *range;
705b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
706b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
707b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_filecon_types {
708b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_FILE = 1,
709b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_DIR,
710b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_CHAR,
711b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_BLOCK,
712b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_SOCKET,
713b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_PIPE,
714b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_SYMLINK,
715b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FILECON_ANY
716b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
717b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
718b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_filecon {
719b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *path_str;
720b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_filecon_types type;
721b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
722b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
723b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
724b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
725b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_protocol {
726b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_PROTOCOL_UDP = 1,
7273895fbbe0cf2ec52d6b6eda66084b6e9f8d88fb2Richard Haines	CIL_PROTOCOL_TCP,
7283895fbbe0cf2ec52d6b6eda66084b6e9f8d88fb2Richard Haines	CIL_PROTOCOL_DCCP
729b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
730b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
731b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_portcon {
732b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_protocol proto;
733b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t port_low;
734b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t port_high;
735b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
736b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
737b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
738b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
739b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_nodecon {
740b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *addr_str;
741b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_ipaddr *addr;
742b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *mask_str;
743b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_ipaddr *mask;
744b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
745b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
746b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
747b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
748b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_ipaddr {
749b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
750b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int family;
751b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	union {
752b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		struct in_addr v4;
753b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		struct in6_addr v6;
754b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	} ip;
755b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
756b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
757b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_genfscon {
758b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *fs_str;
759b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *path_str;
760b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
761b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
762b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
763b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
764b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_netifcon {
765b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *interface_str;
766b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *if_context_str;
767b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *if_context;
768b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *packet_context_str;
769b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *packet_context;
770b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
771b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
772b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
773b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_pirqcon {
774b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t pirq;
775b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
776b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
777b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
778b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
779b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_iomemcon {
78082030de5dc8d08a9417842156293c65fef9dc70cDaniel De Graaf	uint64_t iomem_low;
78182030de5dc8d08a9417842156293c65fef9dc70cDaniel De Graaf	uint64_t iomem_high;
782b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
783b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
784b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
785b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
786b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_ioportcon {
787b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ioport_low;
788b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t ioport_high;
789b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
790b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
791b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
792b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
793b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_pcidevicecon {
794b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t dev;
795b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
796b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
797b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
798b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
799f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graafstruct cil_devicetreecon {
800f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf	char *path;
801f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf	char *context_str;
802f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf	struct cil_context *context;
803f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf};
804f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf
805f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf
806b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* Ensure that CIL uses the same values as sepol services.h */
807b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_fsuse_types {
808b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FSUSE_XATTR = SECURITY_FS_USE_XATTR,
809b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FSUSE_TASK = SECURITY_FS_USE_TASK,
810b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_FSUSE_TRANS = SECURITY_FS_USE_TRANS
811b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
812b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
813b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_fsuse {
814b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_fsuse_types type;
815b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *fs_str;
816b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *context_str;
817b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_context *context;
818b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
819b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
820b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_MLS_LEVELS "l1 l2 h1 h2"
821b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_CONSTRAIN_KEYS "t1 t2 r1 r2 u1 u2"
822b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_MLSCONSTRAIN_KEYS CIL_MLS_LEVELS CIL_CONSTRAIN_KEYS
823b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_CONSTRAIN_OPER "== != eq dom domby incomp not and or"
824b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_constrain {
825b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *classperms;
826b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
827b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
828b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
829b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
830b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_validatetrans {
831b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *class_str;
832b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *class;
833b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
834b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
835b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
836b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
837b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_param {
838b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *str;
839b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_flavor flavor;
840b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
841b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
842b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_macro {
843b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
844b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t symtab[CIL_SYM_NUM];
845b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *params;
846b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
847b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
848b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_args {
849b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *arg_str;
850b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum *arg;
851b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *param_str;
852b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_flavor flavor;
853b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
854b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
855b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_call {
856b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *macro_str;
857b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_macro *macro;
858b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *args_tree;
859b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *args;
860b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int copied;
861b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
862b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
863b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_TRUE	1
864b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_FALSE	0
865b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
866b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_condblock {
867b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_flavor flavor;
868b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t symtab[CIL_SYM_NUM];
869b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
870b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
871b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_booleanif {
872b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
873b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
874b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int preserved_tunable;
875b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
876b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
877b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_tunableif {
878b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *str_expr;
879b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *datum_expr;
880b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
881b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
882b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_policycap {
883b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_symtab_datum datum;
884b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
885b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
886b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_bounds {
887b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *parent_str;
888b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *child_str;
889b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
890b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
891b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* Ensure that CIL uses the same values as sepol policydb.h */
892b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_default_object {
893b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_SOURCE = DEFAULT_SOURCE,
894b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_TARGET = DEFAULT_TARGET,
895b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
896b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
897b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* Default labeling behavior for users, roles, and types */
898b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_default {
899b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_flavor flavor;
900b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *class_strs;
901b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *class_datums;
902b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_default_object object;
903b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
904b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
905b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* Ensure that CIL uses the same values as sepol policydb.h */
906b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceenum cil_default_object_range {
907b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_SOURCE_LOW      = DEFAULT_SOURCE_LOW,
908b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_SOURCE_HIGH     = DEFAULT_SOURCE_HIGH,
909b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_SOURCE_LOW_HIGH = DEFAULT_SOURCE_LOW_HIGH,
910b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_TARGET_LOW      = DEFAULT_TARGET_LOW,
911b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_TARGET_HIGH     = DEFAULT_TARGET_HIGH,
912b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CIL_DEFAULT_TARGET_LOW_HIGH = DEFAULT_TARGET_LOW_HIGH,
913b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
914b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
915b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* Default labeling behavior for range */
916b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_defaultrange {
917b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *class_strs;
918b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *class_datums;
919b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	enum cil_default_object_range object_range;
920b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
921b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
922b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_handleunknown {
923b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int handle_unknown;
924b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
925b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
926b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_mls {
927b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int value;
928b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
929b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
930875a6bcbe8885c927122c6931b3a01d821e04b10James Carterstruct cil_src_info {
931875a6bcbe8885c927122c6931b3a01d821e04b10James Carter	int is_cil;
932875a6bcbe8885c927122c6931b3a01d821e04b10James Carter	char *path;
933875a6bcbe8885c927122c6931b3a01d821e04b10James Carter};
934875a6bcbe8885c927122c6931b3a01d821e04b10James Carter
935b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_db_init(struct cil_db **db);
936b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_db_destroy(struct cil_db **db);
937b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
93880afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrencevoid cil_root_init(struct cil_root **root);
93980afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrencevoid cil_root_destroy(struct cil_root *root);
94080afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence
941b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_destroy_data(void **data, enum cil_flavor flavor);
942b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
943b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_flavor_to_symtab_index(enum cil_flavor flavor, enum cil_sym_index *index);
944b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceconst char * cil_node_to_string(struct cil_tree_node *node);
945b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
9468147bc762241b899444e43557c45f7f79c707502Steve Lawrenceint cil_userprefixes_to_string(struct cil_db *db, char **out, size_t *size);
9478147bc762241b899444e43557c45f7f79c707502Steve Lawrenceint cil_selinuxusers_to_string(struct cil_db *db, char **out, size_t *size);
9488147bc762241b899444e43557c45f7f79c707502Steve Lawrenceint cil_filecons_to_string(struct cil_db *db, char **out, size_t *size);
949b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
950b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_symtab_array_init(symtab_t symtab[], int symtab_sizes[CIL_SYM_NUM]);
951b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_symtab_array_destroy(symtab_t symtab[]);
952b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_destroy_ast_symtabs(struct cil_tree_node *root);
95380afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrenceint cil_get_symtab(struct cil_tree_node *ast_node, symtab_t **symtab, enum cil_sym_index sym_index);
954b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
955b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sort_init(struct cil_sort **sort);
956b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sort_destroy(struct cil_sort **sort);
957b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_netifcon_init(struct cil_netifcon **netifcon);
958b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_context_init(struct cil_context **context);
959b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_level_init(struct cil_level **level);
960b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_levelrange_init(struct cil_levelrange **lvlrange);
961b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sens_init(struct cil_sens **sens);
962b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_block_init(struct cil_block **block);
963b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_blockinherit_init(struct cil_blockinherit **inherit);
964b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_blockabstract_init(struct cil_blockabstract **abstract);
965b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_in_init(struct cil_in **in);
966b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_class_init(struct cil_class **class);
967b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classorder_init(struct cil_classorder **classorder);
968b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classcommon_init(struct cil_classcommon **classcommon);
969b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sid_init(struct cil_sid **sid);
970b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sidcontext_init(struct cil_sidcontext **sidcontext);
971b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sidorder_init(struct cil_sidorder **sidorder);
972b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_userrole_init(struct cil_userrole **userrole);
973b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_userprefix_init(struct cil_userprefix **userprefix);
974b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_selinuxuser_init(struct cil_selinuxuser **selinuxuser);
975b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_roleattribute_init(struct cil_roleattribute **attribute);
976b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_roleattributeset_init(struct cil_roleattributeset **attrset);
977b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_roletype_init(struct cil_roletype **roletype);
978b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_typeattribute_init(struct cil_typeattribute **attribute);
979b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_typeattributeset_init(struct cil_typeattributeset **attrset);
980b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_alias_init(struct cil_alias **alias);
981b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_aliasactual_init(struct cil_aliasactual **aliasactual);
982b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_typepermissive_init(struct cil_typepermissive **typeperm);
983b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_name_init(struct cil_name **name);
984b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_nametypetransition_init(struct cil_nametypetransition **nametypetrans);
985b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_rangetransition_init(struct cil_rangetransition **rangetrans);
986b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_bool_init(struct cil_bool **cilbool);
987b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_boolif_init(struct cil_booleanif **bif);
988b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_condblock_init(struct cil_condblock **cb);
989b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_tunable_init(struct cil_tunable **ciltun);
990b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_tunif_init(struct cil_tunableif **tif);
991b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_avrule_init(struct cil_avrule **avrule);
992ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrencevoid cil_permissionx_init(struct cil_permissionx **permx);
993b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_type_rule_init(struct cil_type_rule **type_rule);
994b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_roletransition_init(struct cil_roletransition **roletrans);
995b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_roleallow_init(struct cil_roleallow **role_allow);
996b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_catset_init(struct cil_catset **catset);
997b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_cats_init(struct cil_cats **cats);
998b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_senscat_init(struct cil_senscat **senscat);
999b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_filecon_init(struct cil_filecon **filecon);
1000b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_portcon_init(struct cil_portcon **portcon);
1001b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_nodecon_init(struct cil_nodecon **nodecon);
1002b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_genfscon_init(struct cil_genfscon **genfscon);
1003b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_pirqcon_init(struct cil_pirqcon **pirqcon);
1004b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_iomemcon_init(struct cil_iomemcon **iomemcon);
1005b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_ioportcon_init(struct cil_ioportcon **ioportcon);
1006b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_pcidevicecon_init(struct cil_pcidevicecon **pcidevicecon);
1007f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graafvoid cil_devicetreecon_init(struct cil_devicetreecon **devicetreecon);
1008b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_fsuse_init(struct cil_fsuse **fsuse);
1009b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_constrain_init(struct cil_constrain **constrain);
1010b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_validatetrans_init(struct cil_validatetrans **validtrans);
1011b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_ipaddr_init(struct cil_ipaddr **ipaddr);
1012b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_perm_init(struct cil_perm **perm);
1013b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classpermission_init(struct cil_classpermission **cp);
1014b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classpermissionset_init(struct cil_classpermissionset **cps);
1015b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classperms_set_init(struct cil_classperms_set **cp_set);
1016b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classperms_init(struct cil_classperms **cp);
1017b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_classmapping_init(struct cil_classmapping **mapping);
1018b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_user_init(struct cil_user **user);
1019b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_userlevel_init(struct cil_userlevel **usrlvl);
1020b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_userrange_init(struct cil_userrange **userrange);
1021b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_role_init(struct cil_role **role);
1022b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_type_init(struct cil_type **type);
1023b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_cat_init(struct cil_cat **cat);
1024b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_catorder_init(struct cil_catorder **catorder);
1025b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_sensorder_init(struct cil_sensorder **sensorder);
1026b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_args_init(struct cil_args **args);
1027b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_call_init(struct cil_call **call);
1028b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_optional_init(struct cil_optional **optional);
1029b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_param_init(struct cil_param **param);
1030b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_macro_init(struct cil_macro **macro);
1031b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_policycap_init(struct cil_policycap **policycap);
1032b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_bounds_init(struct cil_bounds **bounds);
1033b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_default_init(struct cil_default **def);
1034b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_defaultrange_init(struct cil_defaultrange **def);
1035b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_handleunknown_init(struct cil_handleunknown **unk);
1036b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_mls_init(struct cil_mls **mls);
1037875a6bcbe8885c927122c6931b3a01d821e04b10James Cartervoid cil_src_info_init(struct cil_src_info **info);
103877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiyvoid cil_userattribute_init(struct cil_userattribute **attribute);
103977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiyvoid cil_userattributeset_init(struct cil_userattributeset **attrset);
1040b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1041b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#endif
1042