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