1/* Author : Stephen Smalley, <sds@epoch.ncsc.mil> */
2
3/* FLASK */
4
5/*
6 * A security identifier table (sidtab) is a hash table
7 * of security context structures indexed by SID value.
8 */
9
10#ifndef _SEPOL_POLICYDB_SIDTAB_H_
11#define _SEPOL_POLICYDB_SIDTAB_H_
12
13#include <sepol/policydb/context.h>
14#include <sys/cdefs.h>
15
16__BEGIN_DECLS
17
18typedef struct sidtab_node {
19	sepol_security_id_t sid;	/* security identifier */
20	context_struct_t context;	/* security context structure */
21	struct sidtab_node *next;
22} sidtab_node_t;
23
24typedef struct sidtab_node *sidtab_ptr_t;
25
26#define SIDTAB_HASH_BITS 7
27#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
28#define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
29
30#define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
31
32typedef struct {
33	sidtab_ptr_t *htable;
34	unsigned int nel;	/* number of elements */
35	unsigned int next_sid;	/* next SID to allocate */
36	unsigned char shutdown;
37} sidtab_t;
38
39extern int sepol_sidtab_init(sidtab_t * s);
40
41extern int sepol_sidtab_insert(sidtab_t * s,
42			       sepol_security_id_t sid,
43			       context_struct_t * context);
44
45extern context_struct_t *sepol_sidtab_search(sidtab_t * s,
46					     sepol_security_id_t sid);
47
48extern int sepol_sidtab_map(sidtab_t * s,
49			    int (*apply) (sepol_security_id_t sid,
50					  context_struct_t * context,
51					  void *args), void *args);
52
53extern void sepol_sidtab_map_remove_on_error(sidtab_t * s,
54					     int (*apply) (sepol_security_id_t
55							   s,
56							   context_struct_t *
57							   context, void *args),
58					     void *args);
59
60extern int sepol_sidtab_context_to_sid(sidtab_t * s,	/* IN */
61				       context_struct_t * context,	/* IN */
62				       sepol_security_id_t * sid);	/* OUT */
63
64extern void sepol_sidtab_hash_eval(sidtab_t * h, char *tag);
65
66extern void sepol_sidtab_destroy(sidtab_t * s);
67
68extern void sepol_sidtab_set(sidtab_t * dst, sidtab_t * src);
69
70extern void sepol_sidtab_shutdown(sidtab_t * s);
71
72__END_DECLS
73#endif				/* _SIDTAB_H_ */
74
75/* FLASK */
76