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