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