tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#ifndef _SEMANAGE_USER_INTERNAL_H_
#define _SEMANAGE_USER_INTERNAL_H_
 
#include <sepol/user_record.h>
#include <semanage/user_record.h>
#include <semanage/users_local.h>
#include <semanage/users_policy.h>
#include "database.h"
#include "handle.h"
#include "dso.h"
 
hidden_proto(semanage_user_add_role)
    hidden_proto(semanage_user_clone)
    hidden_proto(semanage_user_compare)
    hidden_proto(semanage_user_compare2)
    hidden_proto(semanage_user_create)
    hidden_proto(semanage_user_free)
    hidden_proto(semanage_user_get_mlslevel)
    hidden_proto(semanage_user_get_mlsrange)
    hidden_proto(semanage_user_get_name)
    hidden_proto(semanage_user_get_roles)
    hidden_proto(semanage_user_key_create)
    hidden_proto(semanage_user_key_extract)
    hidden_proto(semanage_user_key_free)
    hidden_proto(semanage_user_set_mlslevel)
    hidden_proto(semanage_user_set_mlsrange)
    hidden_proto(semanage_user_set_name)
    hidden_proto(semanage_user_exists)
    hidden_proto(semanage_user_query)
 
/* USER record: metod table */
extern record_table_t SEMANAGE_USER_RTABLE;
 
/* USER BASE record: method table */
extern record_table_t SEMANAGE_USER_BASE_RTABLE;
 
/* USER EXTRA record: method table */
extern record_table_t SEMANAGE_USER_EXTRA_RTABLE;
 
/* ============ Init/Release functions ========== */
 
/* USER BASE record, FILE backend */
extern int user_base_file_dbase_init(semanage_handle_t * handle,
                    const char *path_ro,
                    const char *path_rw,
                    dbase_config_t * dconfig);
 
extern void user_base_file_dbase_release(dbase_config_t * dconfig);
 
/* USER EXTRA record, FILE backend */
extern int user_extra_file_dbase_init(semanage_handle_t * handle,
                     const char *path_ro,
                     const char *path_rw,
                     dbase_config_t * dconfig);
 
extern void user_extra_file_dbase_release(dbase_config_t * dconfig);
 
/* USER BASE record, POLICYDB backend */
extern int user_base_policydb_dbase_init(semanage_handle_t * handle,
                    dbase_config_t * dconfig);
 
extern void user_base_policydb_dbase_release(dbase_config_t * dconfig);
 
/* USER record, JOIN backend */
extern int user_join_dbase_init(semanage_handle_t * handle,
               dbase_config_t * join1,
               dbase_config_t * join2,
               dbase_config_t * dconfig);
 
extern void user_join_dbase_release(dbase_config_t * dconfig);
 
/*======= Internal API: Base (Policy) User record ====== */
 
#ifndef _SEMANAGE_USER_BASE_DEFINED_
struct semanage_user_base;
typedef struct semanage_user_base semanage_user_base_t;
#define _SEMANAGE_USER_BASE_DEFINED_
#endif
 
hidden int semanage_user_base_create(semanage_handle_t * handle,
                    semanage_user_base_t ** user_ptr);
 
hidden int semanage_user_base_clone(semanage_handle_t * handle,
                   const semanage_user_base_t * user,
                   semanage_user_base_t ** user_ptr);
 
hidden int semanage_user_base_key_extract(semanage_handle_t * handle,
                     const semanage_user_base_t * user,
                     semanage_user_key_t ** key);
 
hidden const char *semanage_user_base_get_name(const semanage_user_base_t *
                          user);
 
hidden int semanage_user_base_set_name(semanage_handle_t * handle,
                      semanage_user_base_t * user,
                      const char *name);
 
hidden const char *semanage_user_base_get_mlslevel(const semanage_user_base_t *
                          user);
 
hidden int semanage_user_base_set_mlslevel(semanage_handle_t * handle,
                      semanage_user_base_t * user,
                      const char *mls_level);
 
hidden const char *semanage_user_base_get_mlsrange(const semanage_user_base_t *
                          user);
 
hidden int semanage_user_base_set_mlsrange(semanage_handle_t * handle,
                      semanage_user_base_t * user,
                      const char *mls_range);
 
hidden int semanage_user_base_get_num_roles(const semanage_user_base_t * user);
 
hidden int semanage_user_base_add_role(semanage_handle_t * handle,
                      semanage_user_base_t * user,
                      const char *role);
 
hidden void semanage_user_base_del_role(semanage_user_base_t * user,
                   const char *role);
 
hidden int semanage_user_base_has_role(const semanage_user_base_t * user,
                      const char *role);
 
hidden int semanage_user_base_get_roles(semanage_handle_t * handle,
                   const semanage_user_base_t * user,
                   const char ***roles_arr,
                   unsigned int *num_roles);
 
hidden int semanage_user_base_set_roles(semanage_handle_t * handle,
                   semanage_user_base_t * user,
                   const char **roles_arr,
                   unsigned int num_roles);
 
hidden void semanage_user_base_free(semanage_user_base_t * user);
 
/*=========== Internal API: Extra User record ==========*/
struct semanage_user_extra;
typedef struct semanage_user_extra semanage_user_extra_t;
 
hidden int semanage_user_extra_create(semanage_handle_t * handle,
                     semanage_user_extra_t ** user_extra_ptr);
 
hidden int semanage_user_extra_clone(semanage_handle_t * handle,
                    const semanage_user_extra_t * user_extra,
                    semanage_user_extra_t ** user_extra_ptr);
 
hidden const char *semanage_user_extra_get_name(const semanage_user_extra_t *
                       user_extra);
 
hidden int semanage_user_extra_set_name(semanage_handle_t * handle,
                   semanage_user_extra_t * user_extra,
                   const char *name);
 
hidden const char *semanage_user_extra_get_prefix(const semanage_user_extra_t *
                         user_extra);
 
hidden int semanage_user_extra_set_prefix(semanage_handle_t * handle,
                     semanage_user_extra_t * user_extra,
                     const char *prefix);
 
hidden void semanage_user_extra_free(semanage_user_extra_t * user_extra);
 
/*======== Internal API: Join record ========== */
hidden void semanage_user_key_unpack(const semanage_user_key_t * key,
                    const char **name);
 
hidden int semanage_user_join(semanage_handle_t * handle,
                 const semanage_user_base_t * record1,
                 const semanage_user_extra_t * record2,
                 semanage_user_t ** result);
 
hidden int semanage_user_split(semanage_handle_t * handle,
                  const semanage_user_t * record,
                  semanage_user_base_t ** split1,
                  semanage_user_extra_t ** split2);
 
#endif