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 11 /* USER record: method table */ 12 extern record_table_t SEMANAGE_USER_RTABLE; 13 14 /* USER BASE record: method table */ 15 extern record_table_t SEMANAGE_USER_BASE_RTABLE; 16 17 /* USER EXTRA record: method table */ 18 extern record_table_t SEMANAGE_USER_EXTRA_RTABLE; 19 20 /* ============ Init/Release functions ========== */ 21 22 /* USER BASE record, FILE backend */ 23 extern int user_base_file_dbase_init(semanage_handle_t * handle, 24 const char *path_ro, 25 const char *path_rw, 26 dbase_config_t * dconfig); 27 28 extern void user_base_file_dbase_release(dbase_config_t * dconfig); 29 30 /* USER EXTRA record, FILE backend */ 31 extern int user_extra_file_dbase_init(semanage_handle_t * handle, 32 const char *path_ro, 33 const char *path_rw, 34 dbase_config_t * dconfig); 35 36 extern void user_extra_file_dbase_release(dbase_config_t * dconfig); 37 38 /* USER BASE record, POLICYDB backend */ 39 extern int user_base_policydb_dbase_init(semanage_handle_t * handle, 40 dbase_config_t * dconfig); 41 42 extern void user_base_policydb_dbase_release(dbase_config_t * dconfig); 43 44 /* USER record, JOIN backend */ 45 extern int user_join_dbase_init(semanage_handle_t * handle, 46 dbase_config_t * join1, 47 dbase_config_t * join2, 48 dbase_config_t * dconfig); 49 50 extern void user_join_dbase_release(dbase_config_t * dconfig); 51 52 /*======= Internal API: Base (Policy) User record ====== */ 53 54 #ifndef _SEMANAGE_USER_BASE_DEFINED_ 55 struct semanage_user_base; 56 typedef struct semanage_user_base semanage_user_base_t; 57 #define _SEMANAGE_USER_BASE_DEFINED_ 58 #endif 59 60 int semanage_user_base_create(semanage_handle_t * handle, 61 semanage_user_base_t ** user_ptr); 62 63 int semanage_user_base_clone(semanage_handle_t * handle, 64 const semanage_user_base_t * user, 65 semanage_user_base_t ** user_ptr); 66 67 int semanage_user_base_key_extract(semanage_handle_t * handle, 68 const semanage_user_base_t * user, 69 semanage_user_key_t ** key); 70 71 const char *semanage_user_base_get_name(const semanage_user_base_t * 72 user); 73 74 int semanage_user_base_set_name(semanage_handle_t * handle, 75 semanage_user_base_t * user, 76 const char *name); 77 78 const char *semanage_user_base_get_mlslevel(const semanage_user_base_t * 79 user); 80 81 int semanage_user_base_set_mlslevel(semanage_handle_t * handle, 82 semanage_user_base_t * user, 83 const char *mls_level); 84 85 const char *semanage_user_base_get_mlsrange(const semanage_user_base_t * 86 user); 87 88 int semanage_user_base_set_mlsrange(semanage_handle_t * handle, 89 semanage_user_base_t * user, 90 const char *mls_range); 91 92 int semanage_user_base_get_num_roles(const semanage_user_base_t * user); 93 94 int semanage_user_base_add_role(semanage_handle_t * handle, 95 semanage_user_base_t * user, 96 const char *role); 97 98 void semanage_user_base_del_role(semanage_user_base_t * user, 99 const char *role); 100 101 int semanage_user_base_has_role(const semanage_user_base_t * user, 102 const char *role); 103 104 int semanage_user_base_get_roles(semanage_handle_t * handle, 105 const semanage_user_base_t * user, 106 const char ***roles_arr, 107 unsigned int *num_roles); 108 109 int semanage_user_base_set_roles(semanage_handle_t * handle, 110 semanage_user_base_t * user, 111 const char **roles_arr, 112 unsigned int num_roles); 113 114 void semanage_user_base_free(semanage_user_base_t * user); 115 116 /*=========== Internal API: Extra User record ==========*/ 117 struct semanage_user_extra; 118 typedef struct semanage_user_extra semanage_user_extra_t; 119 120 int semanage_user_extra_create(semanage_handle_t * handle, 121 semanage_user_extra_t ** user_extra_ptr); 122 123 int semanage_user_extra_clone(semanage_handle_t * handle, 124 const semanage_user_extra_t * user_extra, 125 semanage_user_extra_t ** user_extra_ptr); 126 127 const char *semanage_user_extra_get_name(const semanage_user_extra_t * 128 user_extra); 129 130 int semanage_user_extra_set_name(semanage_handle_t * handle, 131 semanage_user_extra_t * user_extra, 132 const char *name); 133 134 const char *semanage_user_extra_get_prefix(const semanage_user_extra_t * 135 user_extra); 136 137 int semanage_user_extra_set_prefix(semanage_handle_t * handle, 138 semanage_user_extra_t * user_extra, 139 const char *prefix); 140 141 void semanage_user_extra_free(semanage_user_extra_t * user_extra); 142 143 /*======== Internal API: Join record ========== */ 144 void semanage_user_key_unpack(const semanage_user_key_t * key, 145 const char **name); 146 147 int semanage_user_join(semanage_handle_t * handle, 148 const semanage_user_base_t * record1, 149 const semanage_user_extra_t * record2, 150 semanage_user_t ** result); 151 152 int semanage_user_split(semanage_handle_t * handle, 153 const semanage_user_t * record, 154 semanage_user_base_t ** split1, 155 semanage_user_extra_t ** split2); 156 157 #endif 158