Home | History | Annotate | Download | only in policydb
      1 
      2 /* Author : Stephen Smalley, <sds (at) 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 
     16 typedef 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 
     22 typedef 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 
     30 typedef 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 
     37 extern int sepol_sidtab_init(sidtab_t * s);
     38 
     39 extern int sepol_sidtab_insert(sidtab_t * s,
     40 			       sepol_security_id_t sid,
     41 			       context_struct_t * context);
     42 
     43 extern context_struct_t *sepol_sidtab_search(sidtab_t * s,
     44 					     sepol_security_id_t sid);
     45 
     46 extern 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 
     51 extern 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 
     58 extern int sepol_sidtab_context_to_sid(sidtab_t * s,	/* IN */
     59 				       context_struct_t * context,	/* IN */
     60 				       sepol_security_id_t * sid);	/* OUT */
     61 
     62 extern void sepol_sidtab_hash_eval(sidtab_t * h, char *tag);
     63 
     64 extern void sepol_sidtab_destroy(sidtab_t * s);
     65 
     66 extern void sepol_sidtab_set(sidtab_t * dst, sidtab_t * src);
     67 
     68 extern void sepol_sidtab_shutdown(sidtab_t * s);
     69 
     70 #endif				/* _SIDTAB_H_ */
     71 
     72 /* FLASK */
     73