113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <selinux/selinux.h> 28c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#include <pthread.h> 313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include "dso.h" 413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_mkload_policy) 61629d2f89a8c5f758413b87b94740aaaa5f21144Daniel J Walsh hidden_proto(fini_selinuxmnt) 713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(set_selinuxmnt) 8b3b19fdce58ff6ddfa6dfb8e5576c922c96e1e45Eric Paris hidden_proto(selinuxfs_exists) 913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_disable) 1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_policyvers) 1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_load_policy) 1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_get_boolean_active) 1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_get_boolean_names) 1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_set_boolean) 1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_commit_booleans) 1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_check_context) 1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_check_context_raw) 1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_canonicalize_context) 1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_canonicalize_context_raw) 2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_av) 2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_av_raw) 2255ed6e7fa6b7d55c628fa04508521920e60a43f7KaiGai Kohei hidden_proto(security_compute_av_flags) 2355ed6e7fa6b7d55c628fa04508521920e60a43f7KaiGai Kohei hidden_proto(security_compute_av_flags_raw) 2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_user) 2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_user_raw) 2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_create) 2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_create_raw) 282b5a0530e7c06150c84fc233fbfab40c57130f84Kohei KaiGai hidden_proto(security_compute_create_name) 292b5a0530e7c06150c84fc233fbfab40c57130f84Kohei KaiGai hidden_proto(security_compute_create_name_raw) 3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_member_raw) 3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_compute_relabel_raw) 3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(is_selinux_enabled) 3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(is_selinux_mls_enabled) 3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(freecon) 3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(freeconary) 3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getprevcon) 3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getprevcon_raw) 3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getcon) 3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getcon_raw) 4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setcon_raw) 4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getpeercon_raw) 4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getpidcon_raw) 4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getexeccon_raw) 4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getfilecon) 4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getfilecon_raw) 4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(lgetfilecon_raw) 4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(fgetfilecon_raw) 4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setfilecon_raw) 4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(lsetfilecon_raw) 5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(fsetfilecon_raw) 5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setexeccon) 5213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setexeccon_raw) 5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getfscreatecon_raw) 5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getkeycreatecon_raw) 5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(getsockcreatecon_raw) 5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setfscreatecon_raw) 5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setkeycreatecon_raw) 5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(setsockcreatecon_raw) 5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_getenforce) 6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(security_setenforce) 61433a99d4032706af724ff779d8d9d539f20793f8KaiGai Kohei hidden_proto(security_deny_unknown) 62ee6901618c9da360515474145504c7b58258441fDan Walsh hidden_proto(selinux_boolean_sub) 637eec00a5be8b5cebcbbc9a30b42b34f4a623c587Dan Walsh hidden_proto(selinux_current_policy_path) 6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_binary_policy_path) 6588c35241535803247bd3044187c6c3b3c7f02c79Eric Paris hidden_proto(selinux_booleans_subs_path) 6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_default_context_path) 6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_securetty_types_path) 6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_failsafe_context_path) 6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_removable_context_path) 7020271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh hidden_proto(selinux_virtual_domain_context_path) 7120271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh hidden_proto(selinux_virtual_image_context_path) 72c802d4a6d53120a7c067c29625a17b09f922f4d3Dan Walsh hidden_proto(selinux_lxc_contexts_path) 7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_file_context_path) 7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_file_context_homedir_path) 7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_file_context_local_path) 7620b43b3fd3d392c4f12a963a4e46c264e7ed5163Daniel J Walsh hidden_proto(selinux_file_context_subs_dist_path) 7720271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh hidden_proto(selinux_file_context_subs_path) 7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_netfilter_context_path) 7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_homedir_context_path) 8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_user_contexts_path) 8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_booleans_path) 8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_customizable_types_path) 8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_media_context_path) 8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_x_context_path) 8570aeeb918aa721ad90ed8e1b433a55c8ecf2cb83Eamon Walsh hidden_proto(selinux_sepgsql_context_path) 86ce2a8848ad45e375cfdb58cebe28bc12431bb3dbDan Walsh hidden_proto(selinux_systemd_contexts_path) 8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_path) 8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_check_passwd_access) 8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_check_securetty_context) 9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(matchpathcon_init_prefix) 9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_users_path) 9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle hidden_proto(selinux_usersconf_path); 9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_translations_path); 94f9b1f1a2a17298b60a94780ab5899a8d91cbf100Eamon Walshhidden_proto(selinux_colors_path); 9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_getenforcemode); 9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_getpolicytype); 9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_raw_to_trans_context); 9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_trans_to_raw_context); 99cfa3cb6fa5d0cc00fde75ee74ec2da577f62e141Eamon Walsh hidden_proto(selinux_raw_context_to_color); 10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(security_get_initial_context); 10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(security_get_initial_context_raw); 1027d19f9df510daef5dc929df5854c2dda2a64f475Chad Sellershidden_proto(selinux_reset_config); 10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int load_setlocaldefs hidden; 10513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int require_seusers hidden; 10613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int selinux_page_size hidden; 1078c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley 1088c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley/* Make pthread_once optional */ 1098c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#pragma weak pthread_once 110a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#pragma weak pthread_key_create 111f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh#pragma weak pthread_key_delete 112a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#pragma weak pthread_setspecific 1138c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley 1148c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley/* Call handler iff the first call. */ 1158c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#define __selinux_once(ONCE_CONTROL, INIT_FUNCTION) \ 1168c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley do { \ 1178c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley if (pthread_once != NULL) \ 1188c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION)); \ 1198c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \ 1208c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley INIT_FUNCTION (); \ 1218c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley (ONCE_CONTROL) = 2; \ 1228c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley } \ 1238c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley } while (0) 1248c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley 125a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh/* Pthread key macros */ 126a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#define __selinux_key_create(KEY, DESTRUCTOR) \ 1271629d2f89a8c5f758413b87b94740aaaa5f21144Daniel J Walsh (pthread_key_create != NULL ? pthread_key_create(KEY, DESTRUCTOR) : -1) 1288c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley 129f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh#define __selinux_key_delete(KEY) \ 130f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh do { \ 131f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh if (pthread_key_delete != NULL) \ 132f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh pthread_key_delete(KEY); \ 133f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh } while (0) 134f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh 135a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#define __selinux_setspecific(KEY, VALUE) \ 136a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh do { \ 137a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh if (pthread_setspecific != NULL) \ 138a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh pthread_setspecific(KEY, VALUE); \ 139a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh } while (0) 140