policydb.h revision f470207454f5f6ce539aa543e5168a07d667254b
113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Author : Stephen Smalley, <sds@epoch.ncsc.mil> */
313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/*
513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Updated: Joshua Brindle <jbrindle@tresys.com>
613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *	    Karl MacMillan <kmacmillan@tresys.com>
713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *	    Jason Tang <jtang@tresys.com>
813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *	Module support
1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Updated: Trusted Computer Solutions, Inc. <dgoeddel@trustedcs.com>
1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *	Support for enhanced MLS infrastructure.
1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Updated: Frank Mayer <mayerf@tresys.com> and Karl MacMillan <kmacmillan@tresys.com>
1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 	Added conditional policy language extensions
1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Updated: Red Hat, Inc.  James Morris <jmorris@redhat.com>
2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *      Fine-grained netlink support
2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *      IPv6 support
2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *      Code cleanup
2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Copyright (C) 2003 - 2004 Tresys Technology, LLC
2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Copyright (C) 2003 - 2004 Red Hat, Inc.
2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  This library is free software; you can redistribute it and/or
3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  modify it under the terms of the GNU Lesser General Public
3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  License as published by the Free Software Foundation; either
3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  version 2.1 of the License, or (at your option) any later version.
3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  This library is distributed in the hope that it will be useful,
3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  but WITHOUT ANY WARRANTY; without even the implied warranty of
3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  Lesser General Public License for more details.
3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *
3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  You should have received a copy of the GNU Lesser General Public
4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  License along with this library; if not, write to the Free Software
4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */
4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* FLASK */
4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/*
4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * A policy database (policydb) specifies the
4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * configuration data for the security policy.
4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */
5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#ifndef _SEPOL_POLICYDB_POLICYDB_H_
5213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define _SEPOL_POLICYDB_POLICYDB_H_
5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdio.h>
5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stddef.h>
5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb.h>
5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/flask_types.h>
6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/symtab.h>
6113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/avtab.h>
6213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/context.h>
6313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/constraint.h>
6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/policydb/sidtab.h>
6513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define ERRMSG_LEN 1024
6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_SUCCESS      0
6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_ERROR       -1
7013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_UNSUPPORTED -2
7113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
7213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/*
7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * A datum type is defined for each kind of symbol
7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * in the configuration data:  individual permissions,
7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * common prefixes for access vectors, classes,
7613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * users, roles, types, sensitivities, categories, etc.
7713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */
7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* type set preserves data needed by modules such as *, ~ and attributes */
8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct type_set {
8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t types;
8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t negset;
8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_STAR 1
8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_COMP 2
8513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flags;
8613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} type_set_t;
8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_set {
8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t roles;
9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define ROLE_STAR 1
9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define ROLE_COMP 2
9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flags;
9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_set_t;
9413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Permission attributes */
9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct perm_datum {
9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} perm_datum_t;
9913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Attributes of a common prefix for access vectors */
10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct common_datum {
10213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_t permissions;	/* common permissions */
10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} common_datum_t;
10513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
10613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Class attributes */
10713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct class_datum {
10813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
10913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *comkey;		/* common name */
11013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	common_datum_t *comdatum;	/* common datum */
11113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_t permissions;	/* class-specific permission symbol table */
11213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	constraint_node_t *constraints;	/* constraints on class permissions */
11313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	constraint_node_t *validatetrans;	/* special transition rules */
11413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} class_datum_t;
11513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
11613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Role attributes */
11713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_datum {
11813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
11913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t dominates;	/* set of roles dominated by this role */
12013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t types;	/* set of authorized types for role */
12113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t cache;	/* This is an expanded set used for context validation during parsing */
122f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	uint32_t bounds;	/* bounds role, if exist */
12313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_datum_t;
12413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
12513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_trans {
12613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t role;		/* current role */
12713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t type;		/* program executable type */
12813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t new_role;	/* new role */
12913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct role_trans *next;
13013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_trans_t;
13113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
13213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_allow {
13313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t role;		/* current role */
13413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t new_role;	/* new role */
13513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct role_allow *next;
13613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_allow_t;
13713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
13813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Type attributes */
13913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct type_datum {
14013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
14113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t primary;	/* primary name? can be set to primary value if below is TYPE_ */
14213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_TYPE 0		/* regular type or alias in kernel policies */
14313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_ATTRIB 1		/* attribute */
14413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_ALIAS 2		/* alias in modular policy */
14513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flavor;
14613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t types;	/* types with this attribute */
14713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define TYPE_FLAGS_PERMISSIVE	0x01
14813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flags;
149f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	uint32_t bounds;	/* bounds type, if exist */
15013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} type_datum_t;
15113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
152f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle/*
153f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle * Properties of type_datum
154f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle * available on the policy version >= (MOD_)POLICYDB_VERSION_BOUNDARY
155f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle */
156f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define TYPEDATUM_PROPERTY_PRIMARY	0x0001
157f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define TYPEDATUM_PROPERTY_ATTRIBUTE	0x0002
158f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define TYPEDATUM_PROPERTY_ALIAS	0x0004	/* userspace only */
159f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define TYPEDATUM_PROPERTY_PERMISSIVE	0x0008	/* userspace only */
160f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle
16113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* User attributes */
16213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct user_datum {
16313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
16413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_set_t roles;	/* set of authorized roles for user */
16513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_semantic_range_t range;	/* MLS range (min. - max.) for user */
16613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_semantic_level_t dfltlevel;	/* default login MLS level for user */
16713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t cache;	/* This is an expanded set used for context validation during parsing */
16813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_range_t exp_range;     /* expanded range used for validation */
16913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_level_t exp_dfltlevel; /* expanded range used for validation */
170f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	uint32_t bounds;	/* bounds user, if exist */
17113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} user_datum_t;
17213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
17313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Sensitivity attributes */
17413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct level_datum {
17513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_level_t *level;	/* sensitivity and associated categories */
17613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned char isalias;	/* is this sensitivity an alias for another? */
17713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned char defined;
17813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} level_datum_t;
17913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
18013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Category attributes */
18113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct cat_datum {
18213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
18313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned char isalias;	/* is this category an alias for another? */
18413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} cat_datum_t;
18513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
18613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct range_trans {
18713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t source_type;
18813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t target_type;
18913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t target_class;
19013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_range_t target_range;
19113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct range_trans *next;
19213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} range_trans_t;
19313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
19413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Boolean data type */
19513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct cond_bool_datum {
19613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_datum_t s;
19713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	int state;
19813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} cond_bool_datum_t;
19913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
20013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestruct cond_node;
20113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
20213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct cond_node cond_list_t;
20313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestruct cond_av_list;
20413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
20513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct class_perm_node {
20613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t class;
20713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t data;		/* permissions or new type */
20813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct class_perm_node *next;
20913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} class_perm_node_t;
21013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
21113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct avrule {
21213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* these typedefs are almost exactly the same as those in avtab.h - they are
21313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * here because of the need to include neverallow and dontaudit messages */
21413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_ALLOWED     1
21513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_AUDITALLOW  2
21613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_AUDITDENY   4
21713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_DONTAUDIT   8
21813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_NEVERALLOW 128
21913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_AV         (AVRULE_ALLOWED | AVRULE_AUDITALLOW | AVRULE_AUDITDENY | AVRULE_DONTAUDIT | AVRULE_NEVERALLOW)
22013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_TRANSITION 16
22113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_MEMBER     32
22213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_CHANGE     64
22313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_TYPE       (AVRULE_TRANSITION | AVRULE_MEMBER | AVRULE_CHANGE)
22413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t specified;
22513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define RULE_SELF 1
22613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flags;
22713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t stypes;
22813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t ttypes;
22913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	class_perm_node_t *perms;
23013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned long line;	/* line number from policy.conf where
23113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle				 * this rule originated  */
23213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct avrule *next;
23313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} avrule_t;
23413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
23513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_trans_rule {
23613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_set_t roles;	/* current role */
23713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t types;	/* program executable type */
23813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t new_role;	/* new role */
23913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct role_trans_rule *next;
24013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_trans_rule_t;
24113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
24213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct role_allow_rule {
24313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_set_t roles;	/* current role */
24413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_set_t new_roles;	/* new roles */
24513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct role_allow_rule *next;
24613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} role_allow_rule_t;
24713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
24813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct range_trans_rule {
24913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t stypes;
25013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_set_t ttypes;
25113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t tclasses;
25213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	mls_semantic_range_t trange;
25313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct range_trans_rule *next;
25413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} range_trans_rule_t;
25513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
25613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/*
25713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * The configuration data includes security contexts for
25813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * initial SIDs, unlabeled file systems, TCP and UDP port numbers,
25913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * network interfaces, and nodes.  This structure stores the
26013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * relevant data for one such entry.  Entries of the same kind
26113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * (e.g. all initial SIDs) are linked together into a list.
26213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */
26313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct ocontext {
26413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	union {
26513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		char *name;	/* name of initial SID, fs, netif, fstype, path */
26613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		struct {
26713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint8_t protocol;
26813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint16_t low_port;
26913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint16_t high_port;
27013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		} port;		/* TCP or UDP port information */
27113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		struct {
27213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint32_t addr; /* network order */
27313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint32_t mask; /* network order */
27413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		} node;		/* node information */
27513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		struct {
27613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint32_t addr[4]; /* network order */
27713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			uint32_t mask[4]; /* network order */
27813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		} node6;	/* IPv6 node information */
27913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	} u;
28013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	union {
28113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		uint32_t sclass;	/* security class for genfs */
28213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		uint32_t behavior;	/* labeling behavior for fs_use */
28313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	} v;
28413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	context_struct_t context[2];	/* security context(s) */
28513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	sepol_security_id_t sid[2];	/* SID(s) */
28613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct ocontext *next;
28713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} ocontext_t;
28813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
28913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct genfs {
29013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *fstype;
29113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct ocontext *head;
29213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct genfs *next;
29313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} genfs_t;
29413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
29513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* symbol table array indices */
29613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_COMMONS 0
29713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_CLASSES 1
29813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_ROLES   2
29913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_TYPES   3
30013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_USERS   4
30113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_BOOLS   5
30213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_LEVELS  6
30313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_CATS    7
30413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SYM_NUM     8
30513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
30613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* object context array indices */
30713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_ISID  0		/* initial SIDs */
30813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_FS    1		/* unlabeled file systems */
30913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_PORT  2		/* TCP and UDP port numbers */
31013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_NETIF 3		/* network interfaces */
31113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_NODE  4		/* nodes */
31213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_FSUSE 5		/* fs_use */
31313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_NODE6 6		/* IPv6 nodes */
31413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OCON_NUM   7
31513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
31613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* section: module information */
31713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
31813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* scope_index_t holds all of the symbols that are in scope in a
31913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * particular situation.  The bitmaps are indices (and thus must
32013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * subtract one) into the global policydb->scope array. */
32113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct scope_index {
32213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t scope[SYM_NUM];
32313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_classes_scope scope[SYM_CLASSES]
32413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_roles_scope scope[SYM_ROLES]
32513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_types_scope scope[SYM_TYPES]
32613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_users_scope scope[SYM_USERS]
32713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_bools_scope scope[SYM_BOOLS]
32813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_sens_scope scope[SYM_LEVELS]
32913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_cat_scope scope[SYM_CATS]
33013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
33113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* this array maps from class->value to the permissions within
33213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * scope.  if bit (perm->value - 1) is set in map
33313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * class_perms_map[class->value - 1] then that permission is
33413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * enabled for this class within this decl.  */
33513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t *class_perms_map;
33613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* total number of classes in class_perms_map array */
33713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t class_perms_len;
33813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} scope_index_t;
33913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
34013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* a list of declarations for a particular avrule_decl */
34113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
34213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* These two structs declare a block of policy that has TE and RBAC
34313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * statements and declarations.  The root block (the global policy)
34413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * can never have an ELSE branch. */
34513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct avrule_decl {
34613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t decl_id;
34713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t enabled;	/* whether this block is enabled */
34813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
34913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	cond_list_t *cond_list;
35013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avrule_t *avrules;
35113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_trans_rule_t *role_tr_rules;
35213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_allow_rule_t *role_allow_rules;
35313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	range_trans_rule_t *range_tr_rules;
35413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	scope_index_t required;	/* symbols needed to activate this block */
35513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	scope_index_t declared;	/* symbols declared within this block */
35613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
35713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* for additive statements (type attribute, roles, and users) */
35813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_t symtab[SYM_NUM];
35913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
36013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* In a linked module this will contain the name of the module
36113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * from which this avrule_decl originated. */
36213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *module_name;
36313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
36413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct avrule_decl *next;
36513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} avrule_decl_t;
36613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
36713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct avrule_block {
36813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avrule_decl_t *branch_list;
36913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avrule_decl_t *enabled;	/* pointer to which branch is enabled.  this is
37013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle				   used in linking and never written to disk */
37113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define AVRULE_OPTIONAL 1
37213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t flags;		/* any flags for this block, currently just optional */
37313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct avrule_block *next;
37413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} avrule_block_t;
37513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
37613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Every identifier has its own scope datum.  The datum describes if
37713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * the item is to be included into the final policy during
37813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * expansion. */
37913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct scope_datum {
38013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Required for this decl */
38113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SCOPE_REQ  1
38213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Declared in this decl */
38313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define SCOPE_DECL 2
38413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t scope;
38513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t *decl_ids;
38613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t decl_ids_len;
38713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* decl_ids is a list of avrule_decl's that declare/require
38813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * this symbol.  If scope==SCOPE_DECL then this is a list of
38913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * declarations.  If the symbol may only be declared once
39013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * (types, bools) then decl_ids_len will be exactly 1.  For
39113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * implicitly declared things (roles, users) then decl_ids_len
39213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * will be at least 1. */
39313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} scope_datum_t;
39413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
39513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* The policy database */
39613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct policydb {
39713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICY_KERN SEPOL_POLICY_KERN
39813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICY_BASE SEPOL_POLICY_BASE
39913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICY_MOD SEPOL_POLICY_MOD
40013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	uint32_t policy_type;
40113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *name;
40213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *version;
40313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
40413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* Set when the policydb is modified such that writing is unsupported */
40513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	int unsupported_format;
40613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
40713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* Whether this policydb is mls, should always be set */
40813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	int mls;
40913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
41013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* symbol tables */
41113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_t symtab[SYM_NUM];
41213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_commons symtab[SYM_COMMONS]
41313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_classes symtab[SYM_CLASSES]
41413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_roles symtab[SYM_ROLES]
41513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_types symtab[SYM_TYPES]
41613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_users symtab[SYM_USERS]
41713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_bools symtab[SYM_BOOLS]
41813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_levels symtab[SYM_LEVELS]
41913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_cats symtab[SYM_CATS]
42013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
42113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* symbol names indexed by (value - 1) */
42213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char **sym_val_to_name[SYM_NUM];
42313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_common_val_to_name sym_val_to_name[SYM_COMMONS]
42413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_class_val_to_name sym_val_to_name[SYM_CLASSES]
42513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_role_val_to_name sym_val_to_name[SYM_ROLES]
42613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_type_val_to_name sym_val_to_name[SYM_TYPES]
42713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_user_val_to_name sym_val_to_name[SYM_USERS]
42813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_bool_val_to_name sym_val_to_name[SYM_BOOLS]
42913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_sens_val_to_name sym_val_to_name[SYM_LEVELS]
43013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define p_cat_val_to_name sym_val_to_name[SYM_CATS]
43113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
43213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* class, role, and user attributes indexed by (value - 1) */
43313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	class_datum_t **class_val_to_struct;
43413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_datum_t **role_val_to_struct;
43513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	user_datum_t **user_val_to_struct;
43613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	type_datum_t **type_val_to_struct;
43713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
43813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* module stuff section -- used in parsing and for modules */
43913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
44013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* keep track of the scope for every identifier.  these are
44113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * hash tables, where the key is the identifier name and value
44213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * a scope_datum_t.  as a convenience, one may use the
44313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	 * p_*_macros (cf. struct scope_index_t declaration). */
44413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	symtab_t scope[SYM_NUM];
44513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
44613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* module rule storage */
44713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avrule_block_t *global;
44813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* avrule_decl index used for link/expand */
44913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avrule_decl_t **decl_val_to_struct;
45013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
45113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* compiled storage of rules - use for the kernel policy */
45213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
45313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* type enforcement access vectors and transitions */
45413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avtab_t te_avtab;
45513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
45613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* bools indexed by (value - 1) */
45713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	cond_bool_datum_t **bool_val_to_struct;
45813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* type enforcement conditional access vectors and transitions */
45913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	avtab_t te_cond_avtab;
46013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* linked list indexing te_cond_avtab by conditional */
46113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	cond_list_t *cond_list;
46213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
46313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* role transitions */
46413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_trans_t *role_tr;
46513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
46613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* role allows */
46713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	role_allow_t *role_allow;
46813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
46913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* security contexts of initial SIDs, unlabeled file systems,
47013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	   TCP or UDP port numbers, network interfaces and nodes */
47113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ocontext_t *ocontexts[OCON_NUM];
47213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
47313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* security contexts for files in filesystems that cannot support
47413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	   a persistent label mapping or use another
47513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	   fixed labeling behavior. */
47613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	genfs_t *genfs;
47713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
47813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* range transitions */
47913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	range_trans_t *range_tr;
48013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
48113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t *type_attr_map;
48213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
48313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t *attr_type_map;	/* not saved in the binary policy */
48413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
48513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t policycaps;
48613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
48713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	/* this bitmap is referenced by type NOT the typical type-1 used in other
48813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	   bitmaps.  Someday the 0 bit may be used for global permissive */
48913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	ebitmap_t permissive_map;
49013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
49113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned policyvers;
49213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
49313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned handle_unknown;
49413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} policydb_t;
49513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
49613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestruct sepol_policydb {
49713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct policydb p;
49813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle};
49913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
50013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_init(policydb_t * p);
50113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
50213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_from_image(sepol_handle_t * handle,
50313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			       void *data, size_t len, policydb_t * policydb);
50413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
50513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_to_image(sepol_handle_t * handle,
50613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			     policydb_t * policydb, void **newdata,
50713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			     size_t * newlen);
50813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
50913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_index_classes(policydb_t * p);
51013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
51113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_index_bools(policydb_t * p);
51213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
51313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_index_others(sepol_handle_t * handle, policydb_t * p,
51413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle				 unsigned int verbose);
51513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
51613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_reindex_users(policydb_t * p);
51713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
51813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void policydb_destroy(policydb_t * p);
51913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
52013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_load_isids(policydb_t * p, sidtab_t * s);
52113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
52213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Deprecated */
52313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_context_isvalid(const policydb_t * p,
52413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle				    const context_struct_t * c);
52513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
52613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void symtabs_destroy(symtab_t * symtab);
52713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int scope_destroy(hashtab_key_t key, hashtab_datum_t datum, void *p);
52813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef void (*hashtab_destroy_func_t) (hashtab_key_t k, hashtab_datum_t d,
52913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle					void *args);
53013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern hashtab_destroy_func_t get_symtab_destroy_func(int sym_num);
53113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
53213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void class_perm_node_init(class_perm_node_t * x);
53313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void type_set_init(type_set_t * x);
53413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void type_set_destroy(type_set_t * x);
53513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int type_set_cpy(type_set_t * dst, type_set_t * src);
53613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int type_set_or_eq(type_set_t * dst, type_set_t * other);
53713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_set_init(role_set_t * x);
53813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_set_destroy(role_set_t * x);
53913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void avrule_init(avrule_t * x);
54013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void avrule_destroy(avrule_t * x);
54113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void avrule_list_destroy(avrule_t * x);
54213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_trans_rule_init(role_trans_rule_t * x);
54313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_trans_rule_list_destroy(role_trans_rule_t * x);
54413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
54513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_datum_init(role_datum_t * x);
54613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_datum_destroy(role_datum_t * x);
54713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_allow_rule_init(role_allow_rule_t * x);
54813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_allow_rule_destroy(role_allow_rule_t * x);
54913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void role_allow_rule_list_destroy(role_allow_rule_t * x);
55013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void range_trans_rule_init(range_trans_rule_t *x);
55113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void range_trans_rule_destroy(range_trans_rule_t *x);
55213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void range_trans_rule_list_destroy(range_trans_rule_t *x);
55313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void type_datum_init(type_datum_t * x);
55413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void type_datum_destroy(type_datum_t * x);
55513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void user_datum_init(user_datum_t * x);
55613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void user_datum_destroy(user_datum_t * x);
55713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void level_datum_init(level_datum_t * x);
55813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void level_datum_destroy(level_datum_t * x);
55913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void cat_datum_init(cat_datum_t * x);
56013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void cat_datum_destroy(cat_datum_t * x);
56113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
56213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int check_assertions(sepol_handle_t * handle,
56313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			    policydb_t * p, avrule_t * avrules);
56413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
56513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int symtab_insert(policydb_t * x, uint32_t sym,
56613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			 hashtab_key_t key, hashtab_datum_t datum,
56713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			 uint32_t scope, uint32_t avrule_decl_id,
56813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			 uint32_t * value);
56913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
57013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* A policy "file" may be a memory region referenced by a (data, len) pair
57113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle   or a file referenced by a FILE pointer. */
57213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindletypedef struct policy_file {
57313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define PF_USE_MEMORY  0
57413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define PF_USE_STDIO   1
57513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define PF_LEN         2	/* total up length in len field */
57613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	unsigned type;
57713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *data;
57813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	size_t len;
57913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	size_t size;
58013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	FILE *fp;
58113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct sepol_handle *handle;
58213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} policy_file_t;
58313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
58413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestruct sepol_policy_file {
58513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	struct policy_file pf;
58613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle};
58713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
58813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern void policy_file_init(policy_file_t * x);
58913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
59013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_read(policydb_t * p, struct policy_file *fp,
59113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			 unsigned int verbose);
59213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int avrule_read_list(policydb_t * p, avrule_t ** avrules,
59313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			    struct policy_file *fp);
59413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
59513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int policydb_write(struct policydb *p, struct policy_file *pf);
59613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
59713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define PERM_SYMTAB_SIZE 32
59813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
59913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Identify specific policy version changes */
60013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_BASE		15
60113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_BOOL		16
60213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_IPV6		17
60313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_NLCLASS	18
60413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_VALIDATETRANS	19
60513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_MLS		19
60613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_AVTAB		20
60713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_RANGETRANS	21
60813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_POLCAP		22
60913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_PERMISSIVE	23
610f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define POLICYDB_VERSION_BOUNDARY	24
61113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
61213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Range of policy versions we understand*/
61313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_VERSION_MIN	POLICYDB_VERSION_BASE
614f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_BOUNDARY
61513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
61613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Module versions and specific changes*/
61713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_BASE	   4
61813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_VALIDATETRANS 5
61913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_MLS	   5
62013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_RANGETRANS	   6
62113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_MLS_USERS	   6
62213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_POLCAP	   7
62313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_PERMISSIVE	   8
624f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define MOD_POLICYDB_VERSION_BOUNDARY      9
62513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
62613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define MOD_POLICYDB_VERSION_MIN MOD_POLICYDB_VERSION_BASE
627f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define MOD_POLICYDB_VERSION_MAX MOD_POLICYDB_VERSION_BOUNDARY
62813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
62913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_CONFIG_MLS    1
63013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
631f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle/* macros to check policy feature */
632f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle
633f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle/* TODO: add other features here */
634f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle
635f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle#define policydb_has_boundary_feature(p)			\
636f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	(((p)->policy_type == POLICY_KERN			\
637f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	  && p->policyvers >= POLICYDB_VERSION_BOUNDARY) ||	\
638f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	 ((p)->policy_type != POLICY_KERN			\
639f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle	  && p->policyvers >= MOD_POLICYDB_VERSION_BOUNDARY))
640f470207454f5f6ce539aa543e5168a07d667254bJoshua Brindle
64113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* the config flags related to unknown classes/perms are bits 2 and 3 */
64213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define DENY_UNKNOWN	SEPOL_DENY_UNKNOWN
64313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define REJECT_UNKNOWN	SEPOL_REJECT_UNKNOWN
64413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define ALLOW_UNKNOWN 	SEPOL_ALLOW_UNKNOWN
64513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
64613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_CONFIG_UNKNOWN_MASK	(DENY_UNKNOWN | REJECT_UNKNOWN | ALLOW_UNKNOWN)
64713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
64813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OBJECT_R "object_r"
64913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define OBJECT_R_VAL 1
65013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
65113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_MAGIC SELINUX_MAGIC
65213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_STRING "SE Linux"
65313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_ALT_STRING "Flask"
65413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_MOD_MAGIC SELINUX_MOD_MAGIC
65513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define POLICYDB_MOD_STRING "SE Linux Module"
65613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
65713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#endif				/* _POLICYDB_H_ */
65813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
65913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* FLASK */
660