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