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