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