1 #include <stdio.h> 2 #include <stdarg.h> 3 #include <sys/types.h> 4 5 #include <sepol/policydb/avtab.h> 6 #include <sepol/policydb/policydb.h> 7 8 9 #define STACK_SIZE 16 10 #define DEFAULT_LEVEL "systemlow" 11 #define DEFAULT_OBJECT "object_r" 12 13 // initial sid names aren't actually stored in the pp files, need to a have 14 // a mapping, taken from the linux kernel 15 static const char * const selinux_sid_to_str[] = { 16 "null", 17 "kernel", 18 "security", 19 "unlabeled", 20 "fs", 21 "file", 22 "file_labels", 23 "init", 24 "any_socket", 25 "port", 26 "netif", 27 "netmsg", 28 "node", 29 "igmp_packet", 30 "icmp_socket", 31 "tcp_socket", 32 "sysctl_modprobe", 33 "sysctl", 34 "sysctl_fs", 35 "sysctl_kernel", 36 "sysctl_net", 37 "sysctl_net_unix", 38 "sysctl_vm", 39 "sysctl_dev", 40 "kmod", 41 "policy", 42 "scmp_packet", 43 "devnull", 44 }; 45 46 static const char * const xen_sid_to_str[] = { 47 "null", 48 "xen", 49 "dom0", 50 "domio", 51 "domxen", 52 "unlabeled", 53 "security", 54 "ioport", 55 "iomem", 56 "irq", 57 "device", 58 }; 59 60 static const uint32_t avtab_flavors[] = { 61 AVTAB_ALLOWED, 62 AVTAB_AUDITALLOW, 63 AVTAB_AUDITDENY, 64 AVTAB_XPERMS_ALLOWED, 65 AVTAB_XPERMS_AUDITALLOW, 66 AVTAB_XPERMS_DONTAUDIT, 67 AVTAB_TRANSITION, 68 AVTAB_MEMBER, 69 AVTAB_CHANGE, 70 }; 71 72 #define AVTAB_FLAVORS_SZ (sizeof(avtab_flavors)/sizeof(avtab_flavors[0])) 73 74 struct strs { 75 char **list; 76 unsigned num; 77 size_t size; 78 }; 79 80 __attribute__ ((format(printf, 1, 2))) 81 void sepol_log_err(const char *fmt, ...); 82 void sepol_indent(FILE *out, int indent); 83 __attribute__ ((format(printf, 2, 3))) 84 void sepol_printf(FILE *out, const char *fmt, ...); 85 86 __attribute__ ((format(printf, 1, 3))) 87 char *create_str(const char *fmt, int num, ...); 88 89 int strs_init(struct strs **strs, size_t size); 90 void strs_destroy(struct strs **strs); 91 void strs_free_all(struct strs *strs); 92 int strs_add(struct strs *strs, char *s); 93 __attribute__ ((format(printf, 2, 4))) 94 int strs_create_and_add(struct strs *strs, const char *fmt, int num, ...); 95 char *strs_remove_last(struct strs *strs); 96 int strs_add_at_index(struct strs *strs, char *s, unsigned index); 97 char *strs_read_at_index(struct strs *strs, unsigned index); 98 void strs_sort(struct strs *strs); 99 unsigned strs_num_items(struct strs *strs); 100 size_t strs_len_items(struct strs *strs); 101 char *strs_to_str(struct strs *strs); 102 void strs_write_each(struct strs *strs, FILE *out); 103 void strs_write_each_indented(struct strs *strs, FILE *out, int indent); 104 int hashtab_ordered_to_strs(char *key, void *data, void *args); 105 int ebitmap_to_strs(struct ebitmap *map, struct strs *strs, char **val_to_name); 106 char *ebitmap_to_str(struct ebitmap *map, char **val_to_name, int sort); 107 108 int stack_init(struct strs **stack); 109 void stack_destroy(struct strs **stack); 110 int stack_push(struct strs *stack, char *s); 111 char *stack_pop(struct strs *stack); 112 int stack_empty(struct strs *stack); 113 114 int sort_ocontexts(struct policydb *pdb); 115