sidtab.h 1.9 KB

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