xref: /aosp_15_r20/external/selinux/libsemanage/src/user_internal.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
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