xref: /aosp_15_r20/external/selinux/libsemanage/include/semanage/modules.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker /* Authors: Joshua Brindle  <[email protected]>
2*2d543d20SAndroid Build Coastguard Worker  *	    Jason Tang	    <[email protected]>
3*2d543d20SAndroid Build Coastguard Worker  *
4*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2005 Tresys Technology, LLC
5*2d543d20SAndroid Build Coastguard Worker  *
6*2d543d20SAndroid Build Coastguard Worker  *  This library is free software; you can redistribute it and/or
7*2d543d20SAndroid Build Coastguard Worker  *  modify it under the terms of the GNU Lesser General Public
8*2d543d20SAndroid Build Coastguard Worker  *  License as published by the Free Software Foundation; either
9*2d543d20SAndroid Build Coastguard Worker  *  version 2.1 of the License, or (at your option) any later version.
10*2d543d20SAndroid Build Coastguard Worker  *
11*2d543d20SAndroid Build Coastguard Worker  *  This library is distributed in the hope that it will be useful,
12*2d543d20SAndroid Build Coastguard Worker  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2d543d20SAndroid Build Coastguard Worker  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*2d543d20SAndroid Build Coastguard Worker  *  Lesser General Public License for more details.
15*2d543d20SAndroid Build Coastguard Worker  *
16*2d543d20SAndroid Build Coastguard Worker  *  You should have received a copy of the GNU Lesser General Public
17*2d543d20SAndroid Build Coastguard Worker  *  License along with this library; if not, write to the Free Software
18*2d543d20SAndroid Build Coastguard Worker  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19*2d543d20SAndroid Build Coastguard Worker  */
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker #ifndef _SEMANAGE_MODULES_H_
22*2d543d20SAndroid Build Coastguard Worker #define _SEMANAGE_MODULES_H_
23*2d543d20SAndroid Build Coastguard Worker 
24*2d543d20SAndroid Build Coastguard Worker #include <stddef.h>
25*2d543d20SAndroid Build Coastguard Worker #include <stdint.h>
26*2d543d20SAndroid Build Coastguard Worker #include <semanage/handle.h>
27*2d543d20SAndroid Build Coastguard Worker #include <sys/types.h>
28*2d543d20SAndroid Build Coastguard Worker 
29*2d543d20SAndroid Build Coastguard Worker typedef struct semanage_module_key semanage_module_key_t;
30*2d543d20SAndroid Build Coastguard Worker 
31*2d543d20SAndroid Build Coastguard Worker /* High level module management functions. These are all part of
32*2d543d20SAndroid Build Coastguard Worker  * a transaction
33*2d543d20SAndroid Build Coastguard Worker  */
34*2d543d20SAndroid Build Coastguard Worker 
35*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_install(semanage_handle_t *,
36*2d543d20SAndroid Build Coastguard Worker 				   char *module_data, size_t data_len, const char *name, const char *ext_lang);
37*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_install_file(semanage_handle_t *,
38*2d543d20SAndroid Build Coastguard Worker 					const char *module_name);
39*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_remove(semanage_handle_t *, char *module_name);
40*2d543d20SAndroid Build Coastguard Worker 
41*2d543d20SAndroid Build Coastguard Worker /* semanage_module_info is for getting information on installed
42*2d543d20SAndroid Build Coastguard Worker    modules, only name at this time */
43*2d543d20SAndroid Build Coastguard Worker typedef struct semanage_module_info semanage_module_info_t;
44*2d543d20SAndroid Build Coastguard Worker 
45*2d543d20SAndroid Build Coastguard Worker /* Look up a module using @modkey. The module's raw data is returned as a
46*2d543d20SAndroid Build Coastguard Worker  * @mapped_data blob and size of the mapped_data is returned as @data_len.
47*2d543d20SAndroid Build Coastguard Worker  * @modinfo contains additional information which can be used by the caller such
48*2d543d20SAndroid Build Coastguard Worker  * as the high level language extension of @mapped_data.
49*2d543d20SAndroid Build Coastguard Worker  *
50*2d543d20SAndroid Build Coastguard Worker  * On success, the caller is responsible for unmapping @mapped_data with munmap(),
51*2d543d20SAndroid Build Coastguard Worker  * destroying @modinfo with semanage_module_info_destroy(), and freeing @modinfo.
52*2d543d20SAndroid Build Coastguard Worker  *
53*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
54*2d543d20SAndroid Build Coastguard Worker  */
55*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_extract(semanage_handle_t *sh,
56*2d543d20SAndroid Build Coastguard Worker 				  semanage_module_key_t *modkey,
57*2d543d20SAndroid Build Coastguard Worker 				  int extract_cil,
58*2d543d20SAndroid Build Coastguard Worker 				  void **mapped_data,
59*2d543d20SAndroid Build Coastguard Worker 				  size_t *data_len,
60*2d543d20SAndroid Build Coastguard Worker 				  semanage_module_info_t **modinfo);
61*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_list(semanage_handle_t *,
62*2d543d20SAndroid Build Coastguard Worker 				semanage_module_info_t **, int *num_modules);
63*2d543d20SAndroid Build Coastguard Worker extern void semanage_module_info_datum_destroy(semanage_module_info_t *);
64*2d543d20SAndroid Build Coastguard Worker extern semanage_module_info_t *semanage_module_list_nth(semanage_module_info_t * list,
65*2d543d20SAndroid Build Coastguard Worker 							int n);
66*2d543d20SAndroid Build Coastguard Worker extern const char *semanage_module_get_name(semanage_module_info_t *);
67*2d543d20SAndroid Build Coastguard Worker 
68*2d543d20SAndroid Build Coastguard Worker /* Module Info */
69*2d543d20SAndroid Build Coastguard Worker 
70*2d543d20SAndroid Build Coastguard Worker /* Creates a module info struct.
71*2d543d20SAndroid Build Coastguard Worker  *
72*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on failure.
73*2d543d20SAndroid Build Coastguard Worker  *
74*2d543d20SAndroid Build Coastguard Worker  * The @modinfo should be destroyed with semanage_module_info_destroy.
75*2d543d20SAndroid Build Coastguard Worker  * The caller should call free() on the struct.
76*2d543d20SAndroid Build Coastguard Worker  */
77*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_create(semanage_handle_t *sh,
78*2d543d20SAndroid Build Coastguard Worker 				       semanage_module_info_t **modinfo);
79*2d543d20SAndroid Build Coastguard Worker 
80*2d543d20SAndroid Build Coastguard Worker /* Frees the members of the module info struct.
81*2d543d20SAndroid Build Coastguard Worker  *
82*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on failure.
83*2d543d20SAndroid Build Coastguard Worker  *
84*2d543d20SAndroid Build Coastguard Worker  * The caller should call free() on the struct.
85*2d543d20SAndroid Build Coastguard Worker  */
86*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_destroy(semanage_handle_t *handle,
87*2d543d20SAndroid Build Coastguard Worker 					semanage_module_info_t *modinfo);
88*2d543d20SAndroid Build Coastguard Worker 
89*2d543d20SAndroid Build Coastguard Worker /* Module Info Getters */
90*2d543d20SAndroid Build Coastguard Worker 
91*2d543d20SAndroid Build Coastguard Worker /* Get @priority from @modinfo.
92*2d543d20SAndroid Build Coastguard Worker  *
93*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
94*2d543d20SAndroid Build Coastguard Worker  */
95*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_get_priority(semanage_handle_t *sh,
96*2d543d20SAndroid Build Coastguard Worker 					     semanage_module_info_t *modinfo,
97*2d543d20SAndroid Build Coastguard Worker 					     uint16_t *priority);
98*2d543d20SAndroid Build Coastguard Worker 
99*2d543d20SAndroid Build Coastguard Worker /* Get @name from @modinfo. Caller should not free @name.
100*2d543d20SAndroid Build Coastguard Worker  *
101*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
102*2d543d20SAndroid Build Coastguard Worker  */
103*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_get_name(semanage_handle_t *sh,
104*2d543d20SAndroid Build Coastguard Worker 					 semanage_module_info_t *modinfo,
105*2d543d20SAndroid Build Coastguard Worker 					 const char **name);
106*2d543d20SAndroid Build Coastguard Worker 
107*2d543d20SAndroid Build Coastguard Worker /* Get @lang_ext from @modinfo. Caller should not free @lang_ext.
108*2d543d20SAndroid Build Coastguard Worker  *
109*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
110*2d543d20SAndroid Build Coastguard Worker  */
111*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_get_lang_ext(semanage_handle_t *sh,
112*2d543d20SAndroid Build Coastguard Worker 					     semanage_module_info_t *modinfo,
113*2d543d20SAndroid Build Coastguard Worker 					     const char **lang_ext);
114*2d543d20SAndroid Build Coastguard Worker 
115*2d543d20SAndroid Build Coastguard Worker /* Get @enabled from @modinfo.
116*2d543d20SAndroid Build Coastguard Worker  *
117*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
118*2d543d20SAndroid Build Coastguard Worker  */
119*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_get_enabled(semanage_handle_t *sh,
120*2d543d20SAndroid Build Coastguard Worker 					    semanage_module_info_t *modinfo,
121*2d543d20SAndroid Build Coastguard Worker 					    int *enabled);
122*2d543d20SAndroid Build Coastguard Worker 
123*2d543d20SAndroid Build Coastguard Worker /* Module Info Setters */
124*2d543d20SAndroid Build Coastguard Worker 
125*2d543d20SAndroid Build Coastguard Worker /* Set @priority in @modinfo.
126*2d543d20SAndroid Build Coastguard Worker  *
127*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
128*2d543d20SAndroid Build Coastguard Worker  */
129*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_set_priority(semanage_handle_t *sh,
130*2d543d20SAndroid Build Coastguard Worker 					     semanage_module_info_t *modinfo,
131*2d543d20SAndroid Build Coastguard Worker 					     uint16_t priority);
132*2d543d20SAndroid Build Coastguard Worker 
133*2d543d20SAndroid Build Coastguard Worker /* Set @name in @modinfo.
134*2d543d20SAndroid Build Coastguard Worker  *
135*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
136*2d543d20SAndroid Build Coastguard Worker  */
137*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_set_name(semanage_handle_t *sh,
138*2d543d20SAndroid Build Coastguard Worker 					 semanage_module_info_t *modinfo,
139*2d543d20SAndroid Build Coastguard Worker 					 const char *name);
140*2d543d20SAndroid Build Coastguard Worker 
141*2d543d20SAndroid Build Coastguard Worker /* Set @lang_ext in @modinfo.
142*2d543d20SAndroid Build Coastguard Worker  *
143*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
144*2d543d20SAndroid Build Coastguard Worker  */
145*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_set_lang_ext(semanage_handle_t *sh,
146*2d543d20SAndroid Build Coastguard Worker 					     semanage_module_info_t *modinfo,
147*2d543d20SAndroid Build Coastguard Worker 					     const char *lang_ext);
148*2d543d20SAndroid Build Coastguard Worker 
149*2d543d20SAndroid Build Coastguard Worker /* Set @enabled in @modinfo.
150*2d543d20SAndroid Build Coastguard Worker  *
151*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
152*2d543d20SAndroid Build Coastguard Worker  */
153*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_info_set_enabled(semanage_handle_t *sh,
154*2d543d20SAndroid Build Coastguard Worker 					    semanage_module_info_t *modinfo,
155*2d543d20SAndroid Build Coastguard Worker 					    int enabled);
156*2d543d20SAndroid Build Coastguard Worker 
157*2d543d20SAndroid Build Coastguard Worker /* Module Key */
158*2d543d20SAndroid Build Coastguard Worker 
159*2d543d20SAndroid Build Coastguard Worker /* Creates a module key struct.
160*2d543d20SAndroid Build Coastguard Worker  *
161*2d543d20SAndroid Build Coastguard Worker  * Return 0 on success, and -1 on error.
162*2d543d20SAndroid Build Coastguard Worker  *
163*2d543d20SAndroid Build Coastguard Worker  * The @modkey should be destroyed with semanage_module_key_destroy.
164*2d543d20SAndroid Build Coastguard Worker  * The caller should call free() on the struct.
165*2d543d20SAndroid Build Coastguard Worker  */
166*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_create(semanage_handle_t *sh,
167*2d543d20SAndroid Build Coastguard Worker 				      semanage_module_key_t **modkey);
168*2d543d20SAndroid Build Coastguard Worker 
169*2d543d20SAndroid Build Coastguard Worker /* Frees members of the @modkey, but not the struct. The caller should
170*2d543d20SAndroid Build Coastguard Worker  * call free() on struct.
171*2d543d20SAndroid Build Coastguard Worker  *
172*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success, and -1 on error.
173*2d543d20SAndroid Build Coastguard Worker  */
174*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_destroy(semanage_handle_t *sh,
175*2d543d20SAndroid Build Coastguard Worker 				       semanage_module_key_t *modkey);
176*2d543d20SAndroid Build Coastguard Worker 
177*2d543d20SAndroid Build Coastguard Worker /* Module Key Getters */
178*2d543d20SAndroid Build Coastguard Worker 
179*2d543d20SAndroid Build Coastguard Worker /* Get @name from @modkey. Caller should not free @name.
180*2d543d20SAndroid Build Coastguard Worker  *
181*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
182*2d543d20SAndroid Build Coastguard Worker  */
183*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_get_name(semanage_handle_t *sh,
184*2d543d20SAndroid Build Coastguard Worker 					semanage_module_key_t *modkey,
185*2d543d20SAndroid Build Coastguard Worker 					const char **name);
186*2d543d20SAndroid Build Coastguard Worker 
187*2d543d20SAndroid Build Coastguard Worker /* Get @name from @modkey.
188*2d543d20SAndroid Build Coastguard Worker  *
189*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
190*2d543d20SAndroid Build Coastguard Worker  */
191*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_get_priority(semanage_handle_t *sh,
192*2d543d20SAndroid Build Coastguard Worker 					    semanage_module_key_t *modkey,
193*2d543d20SAndroid Build Coastguard Worker 					    uint16_t *priority);
194*2d543d20SAndroid Build Coastguard Worker 
195*2d543d20SAndroid Build Coastguard Worker /* Module Key Setters */
196*2d543d20SAndroid Build Coastguard Worker 
197*2d543d20SAndroid Build Coastguard Worker /* Set @name in @modkey.
198*2d543d20SAndroid Build Coastguard Worker  *
199*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
200*2d543d20SAndroid Build Coastguard Worker  */
201*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_set_name(semanage_handle_t *sh,
202*2d543d20SAndroid Build Coastguard Worker 					semanage_module_key_t *modkey,
203*2d543d20SAndroid Build Coastguard Worker 					const char *name);
204*2d543d20SAndroid Build Coastguard Worker 
205*2d543d20SAndroid Build Coastguard Worker /* Set @priority in @modkey.
206*2d543d20SAndroid Build Coastguard Worker  *
207*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
208*2d543d20SAndroid Build Coastguard Worker  */
209*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_key_set_priority(semanage_handle_t *sh,
210*2d543d20SAndroid Build Coastguard Worker 					    semanage_module_key_t *modkey,
211*2d543d20SAndroid Build Coastguard Worker 					    uint16_t priority);
212*2d543d20SAndroid Build Coastguard Worker 
213*2d543d20SAndroid Build Coastguard Worker /* Set module @enabled status from @modkey. Modules are enabled on a per
214*2d543d20SAndroid Build Coastguard Worker  * module name basis (across all priorities). @modkey only needs to have
215*2d543d20SAndroid Build Coastguard Worker  * name set (priority is ignored).
216*2d543d20SAndroid Build Coastguard Worker  *
217*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
218*2d543d20SAndroid Build Coastguard Worker  */
219*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_set_enabled(semanage_handle_t *sh,
220*2d543d20SAndroid Build Coastguard Worker 				       const semanage_module_key_t *modkey,
221*2d543d20SAndroid Build Coastguard Worker 				       int enabled);
222*2d543d20SAndroid Build Coastguard Worker 
223*2d543d20SAndroid Build Coastguard Worker /* Lookup @modinfo by @modkey. Caller should use
224*2d543d20SAndroid Build Coastguard Worker  * semanage_module_info_destroy and free on @modinfo.
225*2d543d20SAndroid Build Coastguard Worker  *
226*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
227*2d543d20SAndroid Build Coastguard Worker  */
228*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_get_module_info(semanage_handle_t *sh,
229*2d543d20SAndroid Build Coastguard Worker 					   const semanage_module_key_t *modkey,
230*2d543d20SAndroid Build Coastguard Worker 					   semanage_module_info_t **modinfo);
231*2d543d20SAndroid Build Coastguard Worker 
232*2d543d20SAndroid Build Coastguard Worker /* Create a list of all modules in @modinfos of length @modinfos_len.
233*2d543d20SAndroid Build Coastguard Worker  * The list will be sorted from high priority to low and alphabetically
234*2d543d20SAndroid Build Coastguard Worker  * by module name within a priority.
235*2d543d20SAndroid Build Coastguard Worker  *
236*2d543d20SAndroid Build Coastguard Worker  * Caller should use semanage_module_info_destroy on each modinfo in
237*2d543d20SAndroid Build Coastguard Worker  * @modinfos and free on @modinfos.
238*2d543d20SAndroid Build Coastguard Worker  *
239*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
240*2d543d20SAndroid Build Coastguard Worker  */
241*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_list_all(semanage_handle_t *sh,
242*2d543d20SAndroid Build Coastguard Worker 				    semanage_module_info_t **modinfos,
243*2d543d20SAndroid Build Coastguard Worker 				    int *modinfos_len);
244*2d543d20SAndroid Build Coastguard Worker 
245*2d543d20SAndroid Build Coastguard Worker /* Install the module indicated by @modinfo with input data from
246*2d543d20SAndroid Build Coastguard Worker  * @module_data with length @data_len.
247*2d543d20SAndroid Build Coastguard Worker  *
248*2d543d20SAndroid Build Coastguard Worker  * @modinfo must have all values filled in.
249*2d543d20SAndroid Build Coastguard Worker  * @module_data may be bzip compressed.
250*2d543d20SAndroid Build Coastguard Worker  *
251*2d543d20SAndroid Build Coastguard Worker  * Returns:
252*2d543d20SAndroid Build Coastguard Worker  *	 0	success
253*2d543d20SAndroid Build Coastguard Worker  *	-1	failure, out of memory
254*2d543d20SAndroid Build Coastguard Worker  *	-2	failure, invalid @modinfo
255*2d543d20SAndroid Build Coastguard Worker  *	-3	failure, error writing file
256*2d543d20SAndroid Build Coastguard Worker  */
257*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_install_info(semanage_handle_t *sh,
258*2d543d20SAndroid Build Coastguard Worker 					const semanage_module_info_t *modinfo,
259*2d543d20SAndroid Build Coastguard Worker 					char *data,
260*2d543d20SAndroid Build Coastguard Worker 					size_t data_len);
261*2d543d20SAndroid Build Coastguard Worker 
262*2d543d20SAndroid Build Coastguard Worker /* Remove the module indicated by @modkey.
263*2d543d20SAndroid Build Coastguard Worker  * @modkey must have key values filled in.
264*2d543d20SAndroid Build Coastguard Worker  *
265*2d543d20SAndroid Build Coastguard Worker  * Returns:
266*2d543d20SAndroid Build Coastguard Worker  * 	 0	success
267*2d543d20SAndroid Build Coastguard Worker  *	-1	failure, out of memory
268*2d543d20SAndroid Build Coastguard Worker  *	-2	failure, @module not found or couldn't be removed
269*2d543d20SAndroid Build Coastguard Worker  */
270*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_remove_key(semanage_handle_t *sh,
271*2d543d20SAndroid Build Coastguard Worker 				      const semanage_module_key_t *modkey);
272*2d543d20SAndroid Build Coastguard Worker 
273*2d543d20SAndroid Build Coastguard Worker /* Module Enabled */
274*2d543d20SAndroid Build Coastguard Worker 
275*2d543d20SAndroid Build Coastguard Worker /* Get module @enabled status from @modkey. Modules are enabled on a per
276*2d543d20SAndroid Build Coastguard Worker  * module name basis (across all priorities). @modkey only needs to have
277*2d543d20SAndroid Build Coastguard Worker  * name set (priority is ignored).
278*2d543d20SAndroid Build Coastguard Worker  *
279*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
280*2d543d20SAndroid Build Coastguard Worker  */
281*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_get_enabled(semanage_handle_t *sh,
282*2d543d20SAndroid Build Coastguard Worker 				       const semanage_module_key_t *modkey,
283*2d543d20SAndroid Build Coastguard Worker 				       int *enabled);
284*2d543d20SAndroid Build Coastguard Worker 
285*2d543d20SAndroid Build Coastguard Worker /* Compute checksum for @modkey module contents.
286*2d543d20SAndroid Build Coastguard Worker  *
287*2d543d20SAndroid Build Coastguard Worker  * If @checksum is NULL, the function will just return the length of the
288*2d543d20SAndroid Build Coastguard Worker  * checksum string in @checksum_len (checksum strings are guaranteed to
289*2d543d20SAndroid Build Coastguard Worker  * have a fixed length for a given libsemanage binary). @modkey and @cil
290*2d543d20SAndroid Build Coastguard Worker  * are ignored in this case and should be set to NULL and 0 (respectively).
291*2d543d20SAndroid Build Coastguard Worker  *
292*2d543d20SAndroid Build Coastguard Worker  * If @checksum is non-NULL, on success, @checksum will point to a buffer
293*2d543d20SAndroid Build Coastguard Worker  * containing the checksum string and @checksum_len will point to the
294*2d543d20SAndroid Build Coastguard Worker  * length of the string (without the null terminator). The semantics of
295*2d543d20SAndroid Build Coastguard Worker  * @cil are the same as for @extract_cil in semanage_module_extract().
296*2d543d20SAndroid Build Coastguard Worker  *
297*2d543d20SAndroid Build Coastguard Worker  * The caller is responsible to free the buffer returned in @checksum (using
298*2d543d20SAndroid Build Coastguard Worker  * free(3)).
299*2d543d20SAndroid Build Coastguard Worker  *
300*2d543d20SAndroid Build Coastguard Worker  * Callers may assume that if the checksum strings for two modules match,
301*2d543d20SAndroid Build Coastguard Worker  * the module content is the same (collisions are theoretically possible,
302*2d543d20SAndroid Build Coastguard Worker  * yet extremely unlikely).
303*2d543d20SAndroid Build Coastguard Worker  *
304*2d543d20SAndroid Build Coastguard Worker  * Returns 0 on success and -1 on error.
305*2d543d20SAndroid Build Coastguard Worker  */
306*2d543d20SAndroid Build Coastguard Worker extern int semanage_module_compute_checksum(semanage_handle_t *sh,
307*2d543d20SAndroid Build Coastguard Worker 					    semanage_module_key_t *modkey,
308*2d543d20SAndroid Build Coastguard Worker 					    int cil, char **checksum,
309*2d543d20SAndroid Build Coastguard Worker 					    size_t *checksum_len);
310*2d543d20SAndroid Build Coastguard Worker 
311*2d543d20SAndroid Build Coastguard Worker #endif
312