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 12 hidden_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: method table */ 32 extern record_table_t SEMANAGE_USER_RTABLE; 33 34 /* USER BASE record: method table */ 35 extern record_table_t SEMANAGE_USER_BASE_RTABLE; 36 37 /* USER EXTRA record: method table */ 38 extern record_table_t SEMANAGE_USER_EXTRA_RTABLE; 39 40 /* ============ Init/Release functions ========== */ 41 42 /* USER BASE record, FILE backend */ 43 extern 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 48 extern void user_base_file_dbase_release(dbase_config_t * dconfig); 49 50 /* USER EXTRA record, FILE backend */ 51 extern 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 56 extern void user_extra_file_dbase_release(dbase_config_t * dconfig); 57 58 /* USER BASE record, POLICYDB backend */ 59 extern int user_base_policydb_dbase_init(semanage_handle_t * handle, 60 dbase_config_t * dconfig); 61 62 extern void user_base_policydb_dbase_release(dbase_config_t * dconfig); 63 64 /* USER record, JOIN backend */ 65 extern 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 70 extern void user_join_dbase_release(dbase_config_t * dconfig); 71 72 /*======= Internal API: Base (Policy) User record ====== */ 73 74 #ifndef _SEMANAGE_USER_BASE_DEFINED_ 75 struct semanage_user_base; 76 typedef struct semanage_user_base semanage_user_base_t; 77 #define _SEMANAGE_USER_BASE_DEFINED_ 78 #endif 79 80 hidden int semanage_user_base_create(semanage_handle_t * handle, 81 semanage_user_base_t ** user_ptr); 82 83 hidden int semanage_user_base_clone(semanage_handle_t * handle, 84 const semanage_user_base_t * user, 85 semanage_user_base_t ** user_ptr); 86 87 hidden int semanage_user_base_key_extract(semanage_handle_t * handle, 88 const semanage_user_base_t * user, 89 semanage_user_key_t ** key); 90 91 hidden const char *semanage_user_base_get_name(const semanage_user_base_t * 92 user); 93 94 hidden int semanage_user_base_set_name(semanage_handle_t * handle, 95 semanage_user_base_t * user, 96 const char *name); 97 98 hidden const char *semanage_user_base_get_mlslevel(const semanage_user_base_t * 99 user); 100 101 hidden int semanage_user_base_set_mlslevel(semanage_handle_t * handle, 102 semanage_user_base_t * user, 103 const char *mls_level); 104 105 hidden const char *semanage_user_base_get_mlsrange(const semanage_user_base_t * 106 user); 107 108 hidden int semanage_user_base_set_mlsrange(semanage_handle_t * handle, 109 semanage_user_base_t * user, 110 const char *mls_range); 111 112 hidden int semanage_user_base_get_num_roles(const semanage_user_base_t * user); 113 114 hidden int semanage_user_base_add_role(semanage_handle_t * handle, 115 semanage_user_base_t * user, 116 const char *role); 117 118 hidden void semanage_user_base_del_role(semanage_user_base_t * user, 119 const char *role); 120 121 hidden int semanage_user_base_has_role(const semanage_user_base_t * user, 122 const char *role); 123 124 hidden 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 129 hidden 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 134 hidden void semanage_user_base_free(semanage_user_base_t * user); 135 136 /*=========== Internal API: Extra User record ==========*/ 137 struct semanage_user_extra; 138 typedef struct semanage_user_extra semanage_user_extra_t; 139 140 hidden int semanage_user_extra_create(semanage_handle_t * handle, 141 semanage_user_extra_t ** user_extra_ptr); 142 143 hidden 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 147 hidden const char *semanage_user_extra_get_name(const semanage_user_extra_t * 148 user_extra); 149 150 hidden int semanage_user_extra_set_name(semanage_handle_t * handle, 151 semanage_user_extra_t * user_extra, 152 const char *name); 153 154 hidden const char *semanage_user_extra_get_prefix(const semanage_user_extra_t * 155 user_extra); 156 157 hidden int semanage_user_extra_set_prefix(semanage_handle_t * handle, 158 semanage_user_extra_t * user_extra, 159 const char *prefix); 160 161 hidden void semanage_user_extra_free(semanage_user_extra_t * user_extra); 162 163 /*======== Internal API: Join record ========== */ 164 hidden void semanage_user_key_unpack(const semanage_user_key_t * key, 165 const char **name); 166 167 hidden 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 172 hidden 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