113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Author: Joshua Brindle <jbrindle@tresys.com> 213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Jason Tang <jtang@tresys.com> 3d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Caleb Case <ccase@tresys.com> 413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 5d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Copyright (C) 2005,2009 Tresys Technology, LLC 613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * This library is free software; you can redistribute it and/or 813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * modify it under the terms of the GNU Lesser General Public 913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * License as published by the Free Software Foundation; either 1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * version 2.1 of the License, or (at your option) any later version. 1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * This library is distributed in the hope that it will be useful, 1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * but WITHOUT ANY WARRANTY; without even the implied warranty of 1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Lesser General Public License for more details. 1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * You should have received a copy of the GNU Lesser General Public 1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * License along with this library; if not, write to the Free Software 1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */ 2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#ifndef _SEMANAGE_INTERNAL_MODULES_H_ 2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#define _SEMANAGE_INTERNAL_MODULES_H_ 2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2573430e5542dc3f22eee54a41ad54318ad14d1cabCaleb Case#include <stdint.h> 2673430e5542dc3f22eee54a41ad54318ad14d1cabCaleb Case 2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include "module_internal.h" 2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 29d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_install_pp(semanage_handle_t * sh, 30d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence char *module_data, size_t data_len); 31d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_install_hll(semanage_handle_t * sh, 3281f17737e76aad8eada653b23f00e2f288fa679cNicolas Iooss char *module_data, size_t data_len, const char *name, const char *ext_lang); 33d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_upgrade(semanage_handle_t * sh, 34d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence char *module_data, size_t data_len); 35d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_upgrade_file(semanage_handle_t * sh, 36d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence const char *module_name); 37d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_install_base(semanage_handle_t * sh, 38d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence char *module_data, size_t data_len); 39d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrenceint semanage_module_install_base_file(semanage_handle_t * sh, 40d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence const char *module_name); 41d5bcc2285f7a4a739f1b38eeb66d345c3427b1b3Steve Lawrence 42d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Module Info */ 4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlestruct semanage_module_info { 44d220f4910f2a7a765f7b3057606ed17689849782Caleb Case uint16_t priority; /* key, module priority */ 45d220f4910f2a7a765f7b3057606ed17689849782Caleb Case char *name; /* key, module name */ 46d220f4910f2a7a765f7b3057606ed17689849782Caleb Case char *lang_ext; /* module source language extension */ 47d220f4910f2a7a765f7b3057606ed17689849782Caleb Case int enabled; /* module enabled/disabled status */ 4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle}; 4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 50d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Initializes a pre-allocated module info struct. 51d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * 52d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Returns 0 on success and -1 on error. 53d220f4910f2a7a765f7b3057606ed17689849782Caleb Case */ 54d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_info_init(semanage_handle_t *sh, 55d220f4910f2a7a765f7b3057606ed17689849782Caleb Case semanage_module_info_t *modinfo); 56d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 57d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Clones module info @source's members into module info @target. 58d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * 59d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Returns 0 on success and -1 on error. 60d220f4910f2a7a765f7b3057606ed17689849782Caleb Case */ 61d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_info_clone(semanage_handle_t *sh, 62d220f4910f2a7a765f7b3057606ed17689849782Caleb Case const semanage_module_info_t *source, 63d220f4910f2a7a765f7b3057606ed17689849782Caleb Case semanage_module_info_t *target); 64d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 65d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Convert a cstring to a priority. 66d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * 67d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Returns 0 on success and -1 on error. 68d220f4910f2a7a765f7b3057606ed17689849782Caleb Case */ 69d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_string_to_priority(const char *str, uint16_t *priority); 70d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 71d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_info_validate(const semanage_module_info_t *modinfo); 7273430e5542dc3f22eee54a41ad54318ad14d1cabCaleb Caseint semanage_module_validate_priority(uint16_t priority); 73d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_validate_name(const char *name); 74d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_validate_enabled(int enabled); 75d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_validate_lang_ext(const char *ext); 76d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_validate_version(const char *version); 77d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 78d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Module Key */ 791875c85d5bafc42bfa39d1d9fbe7be2fc0a4e133Caleb Casestruct semanage_module_key { 80d220f4910f2a7a765f7b3057606ed17689849782Caleb Case uint16_t priority; /* module priority */ 81d220f4910f2a7a765f7b3057606ed17689849782Caleb Case char *name; /* module name */ 821875c85d5bafc42bfa39d1d9fbe7be2fc0a4e133Caleb Case}; 83d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 84d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Initializes a pre-allocated module key struct. 85d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * 86d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Returns 0 on success, and -1 on error. 87d220f4910f2a7a765f7b3057606ed17689849782Caleb Case */ 88d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_key_init(semanage_handle_t *sh, 89d220f4910f2a7a765f7b3057606ed17689849782Caleb Case semanage_module_key_t *modkey); 90d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 91d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Module Paths */ 92d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 93d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseenum semanage_module_path_type { 94d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_PRIORITY, 95d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_NAME, 96d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_HLL, 97d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_CIL, 98d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_LANG_EXT, 99d220f4910f2a7a765f7b3057606ed17689849782Caleb Case SEMANAGE_MODULE_PATH_DISABLED, 100d220f4910f2a7a765f7b3057606ed17689849782Caleb Case}; 101d220f4910f2a7a765f7b3057606ed17689849782Caleb Case 102d220f4910f2a7a765f7b3057606ed17689849782Caleb Case/* Get the module path for the given path @type. 103d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * 104d220f4910f2a7a765f7b3057606ed17689849782Caleb Case * Returns 0 on success and -1 on error. 105d220f4910f2a7a765f7b3057606ed17689849782Caleb Case */ 106d220f4910f2a7a765f7b3057606ed17689849782Caleb Caseint semanage_module_get_path(semanage_handle_t *sh, 107d220f4910f2a7a765f7b3057606ed17689849782Caleb Case const semanage_module_info_t *module, 108d220f4910f2a7a765f7b3057606ed17689849782Caleb Case enum semanage_module_path_type type, 109d220f4910f2a7a765f7b3057606ed17689849782Caleb Case char *path, 110d220f4910f2a7a765f7b3057606ed17689849782Caleb Case size_t len); 11173430e5542dc3f22eee54a41ad54318ad14d1cabCaleb Case 11213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#endif 113