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