1#include <stdio.h>
2#include <stdarg.h>
3#include <sys/types.h>
4
5#include <sepol/policydb/avtab.h>
6#include <sepol/policydb/policydb.h>
7
8
9#define STACK_SIZE 16
10#define DEFAULT_LEVEL "systemlow"
11#define DEFAULT_OBJECT "object_r"
12
13// initial sid names aren't actually stored in the pp files, need to a have
14// a mapping, taken from the linux kernel
15static const char * const selinux_sid_to_str[] = {
16	"null",
17	"kernel",
18	"security",
19	"unlabeled",
20	"fs",
21	"file",
22	"file_labels",
23	"init",
24	"any_socket",
25	"port",
26	"netif",
27	"netmsg",
28	"node",
29	"igmp_packet",
30	"icmp_socket",
31	"tcp_socket",
32	"sysctl_modprobe",
33	"sysctl",
34	"sysctl_fs",
35	"sysctl_kernel",
36	"sysctl_net",
37	"sysctl_net_unix",
38	"sysctl_vm",
39	"sysctl_dev",
40	"kmod",
41	"policy",
42	"scmp_packet",
43	"devnull",
44};
45
46static const char * const xen_sid_to_str[] = {
47	"null",
48	"xen",
49	"dom0",
50	"domio",
51	"domxen",
52	"unlabeled",
53	"security",
54	"ioport",
55	"iomem",
56	"irq",
57	"device",
58};
59
60static const uint32_t avtab_flavors[] = {
61	AVTAB_ALLOWED,
62	AVTAB_AUDITALLOW,
63	AVTAB_AUDITDENY,
64	AVTAB_XPERMS_ALLOWED,
65	AVTAB_XPERMS_AUDITALLOW,
66	AVTAB_XPERMS_DONTAUDIT,
67	AVTAB_TRANSITION,
68	AVTAB_MEMBER,
69	AVTAB_CHANGE,
70};
71
72#define AVTAB_FLAVORS_SZ (sizeof(avtab_flavors)/sizeof(avtab_flavors[0]))
73
74struct strs {
75	char **list;
76	unsigned num;
77	size_t size;
78};
79
80__attribute__ ((format(printf, 1, 2)))
81void sepol_log_err(const char *fmt, ...);
82void sepol_indent(FILE *out, int indent);
83__attribute__ ((format(printf, 2, 3)))
84void sepol_printf(FILE *out, const char *fmt, ...);
85
86__attribute__ ((format(printf, 1, 3)))
87char *create_str(const char *fmt, int num, ...);
88
89int strs_init(struct strs **strs, size_t size);
90void strs_destroy(struct strs **strs);
91void strs_free_all(struct strs *strs);
92int strs_add(struct strs *strs, char *s);
93__attribute__ ((format(printf, 2, 4)))
94int strs_create_and_add(struct strs *strs, const char *fmt, int num, ...);
95char *strs_remove_last(struct strs *strs);
96int strs_add_at_index(struct strs *strs, char *s, unsigned index);
97char *strs_read_at_index(struct strs *strs, unsigned index);
98void strs_sort(struct strs *strs);
99unsigned strs_num_items(struct strs *strs);
100size_t strs_len_items(struct strs *strs);
101char *strs_to_str(struct strs *strs);
102void strs_write_each(struct strs *strs, FILE *out);
103void strs_write_each_indented(struct strs *strs, FILE *out, int indent);
104int hashtab_ordered_to_strs(char *key, void *data, void *args);
105int ebitmap_to_strs(struct ebitmap *map, struct strs *strs, char **val_to_name);
106char *ebitmap_to_str(struct ebitmap *map, char **val_to_name, int sort);
107
108int stack_init(struct strs **stack);
109void stack_destroy(struct strs **stack);
110int stack_push(struct strs *stack, char *s);
111char *stack_pop(struct strs *stack);
112int stack_empty(struct strs *stack);
113
114int sort_ocontexts(struct policydb *pdb);
115