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