1/* Author : Stephen Smalley, <sds@tycho.nsa.gov> */
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
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19typedef struct sidtab_node {
20	sepol_security_id_t sid;	/* security identifier */
21	context_struct_t context;	/* security context structure */
22	struct sidtab_node *next;
23} sidtab_node_t;
24
25typedef struct sidtab_node *sidtab_ptr_t;
26
27#define SIDTAB_HASH_BITS 7
28#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
29#define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
30
31#define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
32
33typedef struct {
34	sidtab_ptr_t *htable;
35	unsigned int nel;	/* number of elements */
36	unsigned int next_sid;	/* next SID to allocate */
37	unsigned char shutdown;
38} sidtab_t;
39
40extern int sepol_sidtab_init(sidtab_t * s);
41
42extern int sepol_sidtab_insert(sidtab_t * s,
43			       sepol_security_id_t sid,
44			       context_struct_t * context);
45
46extern context_struct_t *sepol_sidtab_search(sidtab_t * s,
47					     sepol_security_id_t sid);
48
49extern int sepol_sidtab_map(sidtab_t * s,
50			    int (*apply) (sepol_security_id_t sid,
51					  context_struct_t * context,
52					  void *args), void *args);
53
54extern void sepol_sidtab_map_remove_on_error(sidtab_t * s,
55					     int (*apply) (sepol_security_id_t
56							   s,
57							   context_struct_t *
58							   context, void *args),
59					     void *args);
60
61extern int sepol_sidtab_context_to_sid(sidtab_t * s,	/* IN */
62				       context_struct_t * context,	/* IN */
63				       sepol_security_id_t * sid);	/* OUT */
64
65extern void sepol_sidtab_hash_eval(sidtab_t * h, char *tag);
66
67extern void sepol_sidtab_destroy(sidtab_t * s);
68
69extern void sepol_sidtab_set(sidtab_t * dst, sidtab_t * src);
70
71extern void sepol_sidtab_shutdown(sidtab_t * s);
72
73#ifdef __cplusplus
74}
75#endif
76
77#endif				/* _SIDTAB_H_ */
78
79/* FLASK */
80