user_internal.h revision 13cd4c8960688af11ad23b4c946149015c80d549
1#ifndef _SEMANAGE_USER_INTERNAL_H_ 2#define _SEMANAGE_USER_INTERNAL_H_ 3 4#include <sepol/user_record.h> 5#include <semanage/user_record.h> 6#include <semanage/users_local.h> 7#include <semanage/users_policy.h> 8#include "database.h" 9#include "handle.h" 10#include "dso.h" 11 12hidden_proto(semanage_user_add_role) 13 hidden_proto(semanage_user_clone) 14 hidden_proto(semanage_user_compare) 15 hidden_proto(semanage_user_compare2) 16 hidden_proto(semanage_user_create) 17 hidden_proto(semanage_user_free) 18 hidden_proto(semanage_user_get_mlslevel) 19 hidden_proto(semanage_user_get_mlsrange) 20 hidden_proto(semanage_user_get_name) 21 hidden_proto(semanage_user_get_roles) 22 hidden_proto(semanage_user_key_create) 23 hidden_proto(semanage_user_key_extract) 24 hidden_proto(semanage_user_key_free) 25 hidden_proto(semanage_user_set_mlslevel) 26 hidden_proto(semanage_user_set_mlsrange) 27 hidden_proto(semanage_user_set_name) 28 hidden_proto(semanage_user_exists) 29 hidden_proto(semanage_user_query) 30 31/* USER record: metod table */ 32extern record_table_t SEMANAGE_USER_RTABLE; 33 34/* USER BASE record: method table */ 35extern record_table_t SEMANAGE_USER_BASE_RTABLE; 36 37/* USER EXTRA record: method table */ 38extern record_table_t SEMANAGE_USER_EXTRA_RTABLE; 39 40/* ============ Init/Release functions ========== */ 41 42/* USER BASE record, FILE backend */ 43extern int user_base_file_dbase_init(semanage_handle_t * handle, 44 const char *fname, 45 dbase_config_t * dconfig); 46 47extern void user_base_file_dbase_release(dbase_config_t * dconfig); 48 49/* USER EXTRA record, FILE backend */ 50extern int user_extra_file_dbase_init(semanage_handle_t * handle, 51 const char *fname, 52 dbase_config_t * dconfig); 53 54extern void user_extra_file_dbase_release(dbase_config_t * dconfig); 55 56/* USER BASE record, POLICYDB backend */ 57extern int user_base_policydb_dbase_init(semanage_handle_t * handle, 58 dbase_config_t * dconfig); 59 60extern void user_base_policydb_dbase_release(dbase_config_t * dconfig); 61 62/* USER record, JOIN backend */ 63extern int user_join_dbase_init(semanage_handle_t * handle, 64 dbase_config_t * join1, 65 dbase_config_t * join2, 66 dbase_config_t * dconfig); 67 68extern void user_join_dbase_release(dbase_config_t * dconfig); 69 70/*======= Internal API: Base (Policy) User record ====== */ 71 72#ifndef _SEMANAGE_USER_BASE_DEFINED_ 73struct semanage_user_base; 74typedef struct semanage_user_base semanage_user_base_t; 75#define _SEMANAGE_USER_BASE_DEFINED_ 76#endif 77 78hidden int semanage_user_base_create(semanage_handle_t * handle, 79 semanage_user_base_t ** user_ptr); 80 81hidden int semanage_user_base_clone(semanage_handle_t * handle, 82 const semanage_user_base_t * user, 83 semanage_user_base_t ** user_ptr); 84 85hidden int semanage_user_base_key_extract(semanage_handle_t * handle, 86 const semanage_user_base_t * user, 87 semanage_user_key_t ** key); 88 89hidden const char *semanage_user_base_get_name(const semanage_user_base_t * 90 user); 91 92hidden int semanage_user_base_set_name(semanage_handle_t * handle, 93 semanage_user_base_t * user, 94 const char *name); 95 96hidden const char *semanage_user_base_get_mlslevel(const semanage_user_base_t * 97 user); 98 99hidden int semanage_user_base_set_mlslevel(semanage_handle_t * handle, 100 semanage_user_base_t * user, 101 const char *mls_level); 102 103hidden const char *semanage_user_base_get_mlsrange(const semanage_user_base_t * 104 user); 105 106hidden int semanage_user_base_set_mlsrange(semanage_handle_t * handle, 107 semanage_user_base_t * user, 108 const char *mls_range); 109 110hidden int semanage_user_base_get_num_roles(const semanage_user_base_t * user); 111 112hidden int semanage_user_base_add_role(semanage_handle_t * handle, 113 semanage_user_base_t * user, 114 const char *role); 115 116hidden void semanage_user_base_del_role(semanage_user_base_t * user, 117 const char *role); 118 119hidden int semanage_user_base_has_role(const semanage_user_base_t * user, 120 const char *role); 121 122hidden int semanage_user_base_get_roles(semanage_handle_t * handle, 123 const semanage_user_base_t * user, 124 const char ***roles_arr, 125 unsigned int *num_roles); 126 127hidden int semanage_user_base_set_roles(semanage_handle_t * handle, 128 semanage_user_base_t * user, 129 const char **roles_arr, 130 unsigned int num_roles); 131 132hidden void semanage_user_base_free(semanage_user_base_t * user); 133 134/*=========== Internal API: Extra User record ==========*/ 135struct semanage_user_extra; 136typedef struct semanage_user_extra semanage_user_extra_t; 137 138hidden int semanage_user_extra_create(semanage_handle_t * handle, 139 semanage_user_extra_t ** user_extra_ptr); 140 141hidden int semanage_user_extra_clone(semanage_handle_t * handle, 142 const semanage_user_extra_t * user_extra, 143 semanage_user_extra_t ** user_extra_ptr); 144 145hidden const char *semanage_user_extra_get_name(const semanage_user_extra_t * 146 user_extra); 147 148hidden int semanage_user_extra_set_name(semanage_handle_t * handle, 149 semanage_user_extra_t * user_extra, 150 const char *name); 151 152hidden const char *semanage_user_extra_get_prefix(const semanage_user_extra_t * 153 user_extra); 154 155hidden int semanage_user_extra_set_prefix(semanage_handle_t * handle, 156 semanage_user_extra_t * user_extra, 157 const char *prefix); 158 159hidden void semanage_user_extra_free(semanage_user_extra_t * user_extra); 160 161/*======== Internal API: Join record ========== */ 162hidden void semanage_user_key_unpack(const semanage_user_key_t * key, 163 const char **name); 164 165hidden int semanage_user_join(semanage_handle_t * handle, 166 const semanage_user_base_t * record1, 167 const semanage_user_extra_t * record2, 168 semanage_user_t ** result); 169 170hidden int semanage_user_split(semanage_handle_t * handle, 171 const semanage_user_t * record, 172 semanage_user_base_t ** split1, 173 semanage_user_extra_t ** split2); 174 175#endif 176