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 *path_ro, 45 const char *path_rw, 46 dbase_config_t * dconfig); 47 48extern void user_base_file_dbase_release(dbase_config_t * dconfig); 49 50/* USER EXTRA record, FILE backend */ 51extern int user_extra_file_dbase_init(semanage_handle_t * handle, 52 const char *path_ro, 53 const char *path_rw, 54 dbase_config_t * dconfig); 55 56extern void user_extra_file_dbase_release(dbase_config_t * dconfig); 57 58/* USER BASE record, POLICYDB backend */ 59extern int user_base_policydb_dbase_init(semanage_handle_t * handle, 60 dbase_config_t * dconfig); 61 62extern void user_base_policydb_dbase_release(dbase_config_t * dconfig); 63 64/* USER record, JOIN backend */ 65extern int user_join_dbase_init(semanage_handle_t * handle, 66 dbase_config_t * join1, 67 dbase_config_t * join2, 68 dbase_config_t * dconfig); 69 70extern void user_join_dbase_release(dbase_config_t * dconfig); 71 72/*======= Internal API: Base (Policy) User record ====== */ 73 74#ifndef _SEMANAGE_USER_BASE_DEFINED_ 75struct semanage_user_base; 76typedef struct semanage_user_base semanage_user_base_t; 77#define _SEMANAGE_USER_BASE_DEFINED_ 78#endif 79 80hidden int semanage_user_base_create(semanage_handle_t * handle, 81 semanage_user_base_t ** user_ptr); 82 83hidden int semanage_user_base_clone(semanage_handle_t * handle, 84 const semanage_user_base_t * user, 85 semanage_user_base_t ** user_ptr); 86 87hidden int semanage_user_base_key_extract(semanage_handle_t * handle, 88 const semanage_user_base_t * user, 89 semanage_user_key_t ** key); 90 91hidden const char *semanage_user_base_get_name(const semanage_user_base_t * 92 user); 93 94hidden int semanage_user_base_set_name(semanage_handle_t * handle, 95 semanage_user_base_t * user, 96 const char *name); 97 98hidden const char *semanage_user_base_get_mlslevel(const semanage_user_base_t * 99 user); 100 101hidden int semanage_user_base_set_mlslevel(semanage_handle_t * handle, 102 semanage_user_base_t * user, 103 const char *mls_level); 104 105hidden const char *semanage_user_base_get_mlsrange(const semanage_user_base_t * 106 user); 107 108hidden int semanage_user_base_set_mlsrange(semanage_handle_t * handle, 109 semanage_user_base_t * user, 110 const char *mls_range); 111 112hidden int semanage_user_base_get_num_roles(const semanage_user_base_t * user); 113 114hidden int semanage_user_base_add_role(semanage_handle_t * handle, 115 semanage_user_base_t * user, 116 const char *role); 117 118hidden void semanage_user_base_del_role(semanage_user_base_t * user, 119 const char *role); 120 121hidden int semanage_user_base_has_role(const semanage_user_base_t * user, 122 const char *role); 123 124hidden int semanage_user_base_get_roles(semanage_handle_t * handle, 125 const semanage_user_base_t * user, 126 const char ***roles_arr, 127 unsigned int *num_roles); 128 129hidden int semanage_user_base_set_roles(semanage_handle_t * handle, 130 semanage_user_base_t * user, 131 const char **roles_arr, 132 unsigned int num_roles); 133 134hidden void semanage_user_base_free(semanage_user_base_t * user); 135 136/*=========== Internal API: Extra User record ==========*/ 137struct semanage_user_extra; 138typedef struct semanage_user_extra semanage_user_extra_t; 139 140hidden int semanage_user_extra_create(semanage_handle_t * handle, 141 semanage_user_extra_t ** user_extra_ptr); 142 143hidden int semanage_user_extra_clone(semanage_handle_t * handle, 144 const semanage_user_extra_t * user_extra, 145 semanage_user_extra_t ** user_extra_ptr); 146 147hidden const char *semanage_user_extra_get_name(const semanage_user_extra_t * 148 user_extra); 149 150hidden int semanage_user_extra_set_name(semanage_handle_t * handle, 151 semanage_user_extra_t * user_extra, 152 const char *name); 153 154hidden const char *semanage_user_extra_get_prefix(const semanage_user_extra_t * 155 user_extra); 156 157hidden int semanage_user_extra_set_prefix(semanage_handle_t * handle, 158 semanage_user_extra_t * user_extra, 159 const char *prefix); 160 161hidden void semanage_user_extra_free(semanage_user_extra_t * user_extra); 162 163/*======== Internal API: Join record ========== */ 164hidden void semanage_user_key_unpack(const semanage_user_key_t * key, 165 const char **name); 166 167hidden int semanage_user_join(semanage_handle_t * handle, 168 const semanage_user_base_t * record1, 169 const semanage_user_extra_t * record2, 170 semanage_user_t ** result); 171 172hidden int semanage_user_split(semanage_handle_t * handle, 173 const semanage_user_t * record, 174 semanage_user_base_t ** split1, 175 semanage_user_extra_t ** split2); 176 177#endif 178