1 /* Copyright (C) 2005 Red Hat, Inc. */ 2 3 /* Object: semanage_user_base_t (SELinux User/Class Policy Object) 4 * Object: semanage_user_key_t (SELinux User/Class Key) 5 * Implements: record_t (Database Record) 6 * Implements: record_key_t (Database Record Key) 7 */ 8 9 #include <sepol/user_record.h> 10 11 typedef sepol_user_key_t semanage_user_key_t; 12 #define _SEMANAGE_USER_KEY_DEFINED_ 13 14 typedef sepol_user_t semanage_user_base_t; 15 #define _SEMANAGE_USER_BASE_DEFINED_ 16 17 typedef semanage_user_base_t record_t; 18 typedef semanage_user_key_t record_key_t; 19 #define DBASE_RECORD_DEFINED 20 21 #include <stdlib.h> 22 #include "user_internal.h" 23 #include "handle.h" 24 #include "database.h" 25 #include "debug.h" 26 27 /* Key */ 28 hidden int semanage_user_base_key_extract(semanage_handle_t * handle, 29 const semanage_user_base_t * user, 30 semanage_user_key_t ** key) 31 { 32 33 return sepol_user_key_extract(handle->sepolh, user, key); 34 } 35 36 static int semanage_user_base_compare(const semanage_user_base_t * user, 37 const semanage_user_key_t * key) 38 { 39 40 return sepol_user_compare(user, key); 41 } 42 43 static int semanage_user_base_compare2(const semanage_user_base_t * user, 44 const semanage_user_base_t * user2) 45 { 46 47 return sepol_user_compare2(user, user2); 48 } 49 50 static int semanage_user_base_compare2_qsort(const semanage_user_base_t ** user, 51 const semanage_user_base_t ** 52 user2) 53 { 54 55 return sepol_user_compare2(*user, *user2); 56 } 57 58 /* Name */ 59 hidden const char *semanage_user_base_get_name(const semanage_user_base_t * 60 user) 61 { 62 63 return sepol_user_get_name(user); 64 } 65 66 hidden int semanage_user_base_set_name(semanage_handle_t * handle, 67 semanage_user_base_t * user, 68 const char *name) 69 { 70 71 return sepol_user_set_name(handle->sepolh, user, name); 72 } 73 74 /* MLS */ 75 hidden const char *semanage_user_base_get_mlslevel(const semanage_user_base_t * 76 user) 77 { 78 79 return sepol_user_get_mlslevel(user); 80 } 81 82 hidden int semanage_user_base_set_mlslevel(semanage_handle_t * handle, 83 semanage_user_base_t * user, 84 const char *mls_level) 85 { 86 87 return sepol_user_set_mlslevel(handle->sepolh, user, mls_level); 88 } 89 90 hidden const char *semanage_user_base_get_mlsrange(const semanage_user_base_t * 91 user) 92 { 93 94 return sepol_user_get_mlsrange(user); 95 } 96 97 hidden int semanage_user_base_set_mlsrange(semanage_handle_t * handle, 98 semanage_user_base_t * user, 99 const char *mls_range) 100 { 101 102 return sepol_user_set_mlsrange(handle->sepolh, user, mls_range); 103 } 104 105 /* Role management */ 106 hidden int semanage_user_base_get_num_roles(const semanage_user_base_t * user) 107 { 108 109 return sepol_user_get_num_roles(user); 110 } 111 112 hidden int semanage_user_base_add_role(semanage_handle_t * handle, 113 semanage_user_base_t * user, 114 const char *role) 115 { 116 117 return sepol_user_add_role(handle->sepolh, user, role); 118 } 119 120 hidden void semanage_user_base_del_role(semanage_user_base_t * user, 121 const char *role) 122 { 123 124 sepol_user_del_role(user, role); 125 } 126 127 hidden int semanage_user_base_has_role(const semanage_user_base_t * user, 128 const char *role) 129 { 130 131 return sepol_user_has_role(user, role); 132 } 133 134 hidden int semanage_user_base_get_roles(semanage_handle_t * handle, 135 const semanage_user_base_t * user, 136 const char ***roles_arr, 137 unsigned int *num_roles) 138 { 139 140 return sepol_user_get_roles(handle->sepolh, user, roles_arr, num_roles); 141 } 142 143 hidden int semanage_user_base_set_roles(semanage_handle_t * handle, 144 semanage_user_base_t * user, 145 const char **roles_arr, 146 unsigned int num_roles) 147 { 148 149 return sepol_user_set_roles(handle->sepolh, user, roles_arr, num_roles); 150 } 151 152 /* Create/Clone/Destroy */ 153 hidden int semanage_user_base_create(semanage_handle_t * handle, 154 semanage_user_base_t ** user_ptr) 155 { 156 157 return sepol_user_create(handle->sepolh, user_ptr); 158 } 159 160 hidden int semanage_user_base_clone(semanage_handle_t * handle, 161 const semanage_user_base_t * user, 162 semanage_user_base_t ** user_ptr) 163 { 164 165 return sepol_user_clone(handle->sepolh, user, user_ptr); 166 } 167 168 hidden void semanage_user_base_free(semanage_user_base_t * user) 169 { 170 171 sepol_user_free(user); 172 } 173 174 /* Record base functions */ 175 record_table_t SEMANAGE_USER_BASE_RTABLE = { 176 .create = semanage_user_base_create, 177 .key_extract = semanage_user_base_key_extract, 178 .key_free = semanage_user_key_free, 179 .clone = semanage_user_base_clone, 180 .compare = semanage_user_base_compare, 181 .compare2 = semanage_user_base_compare2, 182 .compare2_qsort = semanage_user_base_compare2_qsort, 183 .free = semanage_user_base_free, 184 }; 185