11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * A security identifier table (sidtab) is a hash table 31da177e4SLinus Torvalds * of security context structures indexed by SID value. 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * Author : Stephen Smalley, <sds@epoch.ncsc.mil> 61da177e4SLinus Torvalds */ 71da177e4SLinus Torvalds #ifndef _SS_SIDTAB_H_ 81da177e4SLinus Torvalds #define _SS_SIDTAB_H_ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #include "context.h" 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds struct sidtab_node { 131da177e4SLinus Torvalds u32 sid; /* security identifier */ 141da177e4SLinus Torvalds struct context context; /* security context structure */ 151da177e4SLinus Torvalds struct sidtab_node *next; 161da177e4SLinus Torvalds }; 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds #define SIDTAB_HASH_BITS 7 191da177e4SLinus Torvalds #define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS) 201da177e4SLinus Torvalds #define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1) 211da177e4SLinus Torvalds 221da177e4SLinus Torvalds #define SIDTAB_SIZE SIDTAB_HASH_BUCKETS 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds struct sidtab { 251da177e4SLinus Torvalds struct sidtab_node **htable; 261da177e4SLinus Torvalds unsigned int nel; /* number of elements */ 271da177e4SLinus Torvalds unsigned int next_sid; /* next SID to allocate */ 281da177e4SLinus Torvalds unsigned char shutdown; 291da177e4SLinus Torvalds spinlock_t lock; 301da177e4SLinus Torvalds }; 311da177e4SLinus Torvalds 321da177e4SLinus Torvalds int sidtab_init(struct sidtab *s); 331da177e4SLinus Torvalds int sidtab_insert(struct sidtab *s, u32 sid, struct context *context); 341da177e4SLinus Torvalds struct context *sidtab_search(struct sidtab *s, u32 sid); 35*12b29f34SStephen Smalley struct context *sidtab_search_force(struct sidtab *s, u32 sid); 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds int sidtab_map(struct sidtab *s, 381da177e4SLinus Torvalds int (*apply) (u32 sid, 391da177e4SLinus Torvalds struct context *context, 401da177e4SLinus Torvalds void *args), 411da177e4SLinus Torvalds void *args); 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds int sidtab_context_to_sid(struct sidtab *s, 441da177e4SLinus Torvalds struct context *context, 451da177e4SLinus Torvalds u32 *sid); 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds void sidtab_hash_eval(struct sidtab *h, char *tag); 481da177e4SLinus Torvalds void sidtab_destroy(struct sidtab *s); 491da177e4SLinus Torvalds void sidtab_set(struct sidtab *dst, struct sidtab *src); 501da177e4SLinus Torvalds void sidtab_shutdown(struct sidtab *s); 511da177e4SLinus Torvalds 521da177e4SLinus Torvalds #endif /* _SS_SIDTAB_H_ */ 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds 55