16cd6a6acSopenharmony_ci#include <stdio.h> 26cd6a6acSopenharmony_ci#include <stdio_ext.h> 36cd6a6acSopenharmony_ci#include <string.h> 46cd6a6acSopenharmony_ci#include <ctype.h> 56cd6a6acSopenharmony_ci#include <stddef.h> 66cd6a6acSopenharmony_ci#include <stdint.h> 76cd6a6acSopenharmony_ci#include <stdlib.h> 86cd6a6acSopenharmony_ci#include <limits.h> 96cd6a6acSopenharmony_ci#include <unistd.h> 106cd6a6acSopenharmony_ci#include <pthread.h> 116cd6a6acSopenharmony_ci#include <errno.h> 126cd6a6acSopenharmony_ci#include "policy.h" 136cd6a6acSopenharmony_ci#include "selinux_internal.h" 146cd6a6acSopenharmony_ci#include "get_default_type_internal.h" 156cd6a6acSopenharmony_ci 166cd6a6acSopenharmony_ci#define SELINUXDEFAULT "targeted" 176cd6a6acSopenharmony_ci#define SELINUXTYPETAG "SELINUXTYPE=" 186cd6a6acSopenharmony_ci#define SELINUXTAG "SELINUX=" 196cd6a6acSopenharmony_ci#define REQUIRESEUSERS "REQUIRESEUSERS=" 206cd6a6acSopenharmony_ci 216cd6a6acSopenharmony_ci/* Indices for file paths arrays. */ 226cd6a6acSopenharmony_ci#define BINPOLICY 0 236cd6a6acSopenharmony_ci#define CONTEXTS_DIR 1 246cd6a6acSopenharmony_ci#define FILE_CONTEXTS 2 256cd6a6acSopenharmony_ci#define HOMEDIR_CONTEXTS 3 266cd6a6acSopenharmony_ci#define DEFAULT_CONTEXTS 4 276cd6a6acSopenharmony_ci#define USER_CONTEXTS 5 286cd6a6acSopenharmony_ci#define FAILSAFE_CONTEXT 6 296cd6a6acSopenharmony_ci#define DEFAULT_TYPE 7 306cd6a6acSopenharmony_ci/* BOOLEANS is deprecated */ 316cd6a6acSopenharmony_ci#define BOOLEANS 8 326cd6a6acSopenharmony_ci#define MEDIA_CONTEXTS 9 336cd6a6acSopenharmony_ci#define REMOVABLE_CONTEXT 10 346cd6a6acSopenharmony_ci#define CUSTOMIZABLE_TYPES 11 356cd6a6acSopenharmony_ci/* USERS_DIR is deprecated */ 366cd6a6acSopenharmony_ci#define USERS_DIR 12 376cd6a6acSopenharmony_ci#define SEUSERS 13 386cd6a6acSopenharmony_ci#define TRANSLATIONS 14 396cd6a6acSopenharmony_ci#define NETFILTER_CONTEXTS 15 406cd6a6acSopenharmony_ci#define FILE_CONTEXTS_HOMEDIR 16 416cd6a6acSopenharmony_ci#define FILE_CONTEXTS_LOCAL 17 426cd6a6acSopenharmony_ci#define SECURETTY_TYPES 18 436cd6a6acSopenharmony_ci#define X_CONTEXTS 19 446cd6a6acSopenharmony_ci#define COLORS 20 456cd6a6acSopenharmony_ci#define VIRTUAL_DOMAIN 21 466cd6a6acSopenharmony_ci#define VIRTUAL_IMAGE 22 476cd6a6acSopenharmony_ci#define FILE_CONTEXT_SUBS 23 486cd6a6acSopenharmony_ci#define SEPGSQL_CONTEXTS 24 496cd6a6acSopenharmony_ci#define FILE_CONTEXT_SUBS_DIST 25 506cd6a6acSopenharmony_ci#define LXC_CONTEXTS 26 516cd6a6acSopenharmony_ci#define BOOLEAN_SUBS 27 526cd6a6acSopenharmony_ci#define OPENSSH_CONTEXTS 28 536cd6a6acSopenharmony_ci#define SYSTEMD_CONTEXTS 29 546cd6a6acSopenharmony_ci#define SNAPPERD_CONTEXTS 30 556cd6a6acSopenharmony_ci#define OPENRC_CONTEXTS 31 566cd6a6acSopenharmony_ci#define NEL 32 576cd6a6acSopenharmony_ci 586cd6a6acSopenharmony_ci/* Part of one-time lazy init */ 596cd6a6acSopenharmony_cistatic pthread_once_t once = PTHREAD_ONCE_INIT; 606cd6a6acSopenharmony_cistatic void init_selinux_config(void); 616cd6a6acSopenharmony_ci 626cd6a6acSopenharmony_ci/* New layout is relative to SELINUXDIR/policytype. */ 636cd6a6acSopenharmony_cistatic char *file_paths[NEL]; 646cd6a6acSopenharmony_ci#define L1(l) L2(l) 656cd6a6acSopenharmony_ci#define L2(l)str##l 666cd6a6acSopenharmony_cistatic const union file_path_suffixes_data { 676cd6a6acSopenharmony_ci struct { 686cd6a6acSopenharmony_ci#define S_(n, s) char L1(__LINE__)[sizeof(s)]; 696cd6a6acSopenharmony_ci#include "file_path_suffixes.h" 706cd6a6acSopenharmony_ci#undef S_ 716cd6a6acSopenharmony_ci }; 726cd6a6acSopenharmony_ci char str[0]; 736cd6a6acSopenharmony_ci} file_path_suffixes_data = { 746cd6a6acSopenharmony_ci { 756cd6a6acSopenharmony_ci#define S_(n, s) s, 766cd6a6acSopenharmony_ci#include "file_path_suffixes.h" 776cd6a6acSopenharmony_ci#undef S_ 786cd6a6acSopenharmony_ci } 796cd6a6acSopenharmony_ci}; 806cd6a6acSopenharmony_cistatic const uint16_t file_path_suffixes_idx[NEL] = { 816cd6a6acSopenharmony_ci#define S_(n, s) [n] = offsetof(union file_path_suffixes_data, L1(__LINE__)), 826cd6a6acSopenharmony_ci#include "file_path_suffixes.h" 836cd6a6acSopenharmony_ci#undef S_ 846cd6a6acSopenharmony_ci}; 856cd6a6acSopenharmony_ci 866cd6a6acSopenharmony_ci#undef L1 876cd6a6acSopenharmony_ci#undef L2 886cd6a6acSopenharmony_ci 896cd6a6acSopenharmony_ciint selinux_getenforcemode(int *enforce) 906cd6a6acSopenharmony_ci{ 916cd6a6acSopenharmony_ci int ret = -1; 926cd6a6acSopenharmony_ci FILE *cfg = fopen(SELINUXCONFIG, "re"); 936cd6a6acSopenharmony_ci if (cfg) { 946cd6a6acSopenharmony_ci char *buf; 956cd6a6acSopenharmony_ci char *tag; 966cd6a6acSopenharmony_ci int len = sizeof(SELINUXTAG) - 1; 976cd6a6acSopenharmony_ci buf = malloc(selinux_page_size); 986cd6a6acSopenharmony_ci if (!buf) { 996cd6a6acSopenharmony_ci fclose(cfg); 1006cd6a6acSopenharmony_ci return -1; 1016cd6a6acSopenharmony_ci } 1026cd6a6acSopenharmony_ci while (fgets_unlocked(buf, selinux_page_size, cfg)) { 1036cd6a6acSopenharmony_ci if (strncmp(buf, SELINUXTAG, len)) 1046cd6a6acSopenharmony_ci continue; 1056cd6a6acSopenharmony_ci tag = buf+len; 1066cd6a6acSopenharmony_ci while (isspace(*tag)) 1076cd6a6acSopenharmony_ci tag++; 1086cd6a6acSopenharmony_ci if (!strncasecmp 1096cd6a6acSopenharmony_ci (tag, "enforcing", sizeof("enforcing") - 1)) { 1106cd6a6acSopenharmony_ci *enforce = 1; 1116cd6a6acSopenharmony_ci ret = 0; 1126cd6a6acSopenharmony_ci break; 1136cd6a6acSopenharmony_ci } else 1146cd6a6acSopenharmony_ci if (!strncasecmp 1156cd6a6acSopenharmony_ci (tag, "permissive", 1166cd6a6acSopenharmony_ci sizeof("permissive") - 1)) { 1176cd6a6acSopenharmony_ci *enforce = 0; 1186cd6a6acSopenharmony_ci ret = 0; 1196cd6a6acSopenharmony_ci break; 1206cd6a6acSopenharmony_ci } else 1216cd6a6acSopenharmony_ci if (!strncasecmp 1226cd6a6acSopenharmony_ci (tag, "disabled", 1236cd6a6acSopenharmony_ci sizeof("disabled") - 1)) { 1246cd6a6acSopenharmony_ci *enforce = -1; 1256cd6a6acSopenharmony_ci ret = 0; 1266cd6a6acSopenharmony_ci break; 1276cd6a6acSopenharmony_ci } 1286cd6a6acSopenharmony_ci } 1296cd6a6acSopenharmony_ci fclose(cfg); 1306cd6a6acSopenharmony_ci free(buf); 1316cd6a6acSopenharmony_ci } 1326cd6a6acSopenharmony_ci return ret; 1336cd6a6acSopenharmony_ci} 1346cd6a6acSopenharmony_ci 1356cd6a6acSopenharmony_ci 1366cd6a6acSopenharmony_cistatic char *selinux_policytype; 1376cd6a6acSopenharmony_ci 1386cd6a6acSopenharmony_ciint selinux_getpolicytype(char **type) 1396cd6a6acSopenharmony_ci{ 1406cd6a6acSopenharmony_ci __selinux_once(once, init_selinux_config); 1416cd6a6acSopenharmony_ci if (!selinux_policytype) 1426cd6a6acSopenharmony_ci return -1; 1436cd6a6acSopenharmony_ci *type = strdup(selinux_policytype); 1446cd6a6acSopenharmony_ci return *type ? 0 : -1; 1456cd6a6acSopenharmony_ci} 1466cd6a6acSopenharmony_ci 1476cd6a6acSopenharmony_ci 1486cd6a6acSopenharmony_cistatic int setpolicytype(const char *type) 1496cd6a6acSopenharmony_ci{ 1506cd6a6acSopenharmony_ci free(selinux_policytype); 1516cd6a6acSopenharmony_ci selinux_policytype = strdup(type); 1526cd6a6acSopenharmony_ci return selinux_policytype ? 0 : -1; 1536cd6a6acSopenharmony_ci} 1546cd6a6acSopenharmony_ci 1556cd6a6acSopenharmony_cistatic char *selinux_policyroot = NULL; 1566cd6a6acSopenharmony_cistatic const char *selinux_rootpath = SELINUXDIR; 1576cd6a6acSopenharmony_ci 1586cd6a6acSopenharmony_cistatic void init_selinux_config(void) 1596cd6a6acSopenharmony_ci{ 1606cd6a6acSopenharmony_ci int i, *intptr; 1616cd6a6acSopenharmony_ci size_t line_len; 1626cd6a6acSopenharmony_ci ssize_t len; 1636cd6a6acSopenharmony_ci char *line_buf = NULL, *buf_p, *value, *type = NULL, *end; 1646cd6a6acSopenharmony_ci FILE *fp; 1656cd6a6acSopenharmony_ci 1666cd6a6acSopenharmony_ci if (selinux_policyroot) 1676cd6a6acSopenharmony_ci return; 1686cd6a6acSopenharmony_ci 1696cd6a6acSopenharmony_ci fp = fopen(SELINUXCONFIG, "re"); 1706cd6a6acSopenharmony_ci if (fp) { 1716cd6a6acSopenharmony_ci __fsetlocking(fp, FSETLOCKING_BYCALLER); 1726cd6a6acSopenharmony_ci while ((len = getline(&line_buf, &line_len, fp)) > 0) { 1736cd6a6acSopenharmony_ci if (line_buf[len - 1] == '\n') 1746cd6a6acSopenharmony_ci line_buf[len - 1] = 0; 1756cd6a6acSopenharmony_ci buf_p = line_buf; 1766cd6a6acSopenharmony_ci while (isspace(*buf_p)) 1776cd6a6acSopenharmony_ci buf_p++; 1786cd6a6acSopenharmony_ci if (*buf_p == '#' || *buf_p == 0) 1796cd6a6acSopenharmony_ci continue; 1806cd6a6acSopenharmony_ci 1816cd6a6acSopenharmony_ci if (!strncasecmp(buf_p, SELINUXTYPETAG, 1826cd6a6acSopenharmony_ci sizeof(SELINUXTYPETAG) - 1)) { 1836cd6a6acSopenharmony_ci buf_p += sizeof(SELINUXTYPETAG) - 1; 1846cd6a6acSopenharmony_ci while (isspace(*buf_p)) 1856cd6a6acSopenharmony_ci buf_p++; 1866cd6a6acSopenharmony_ci type = strdup(buf_p); 1876cd6a6acSopenharmony_ci if (!type) { 1886cd6a6acSopenharmony_ci free(line_buf); 1896cd6a6acSopenharmony_ci fclose(fp); 1906cd6a6acSopenharmony_ci return; 1916cd6a6acSopenharmony_ci } 1926cd6a6acSopenharmony_ci end = type + strlen(type) - 1; 1936cd6a6acSopenharmony_ci while ((end > type) && 1946cd6a6acSopenharmony_ci (isspace(*end) || iscntrl(*end))) { 1956cd6a6acSopenharmony_ci *end = 0; 1966cd6a6acSopenharmony_ci end--; 1976cd6a6acSopenharmony_ci } 1986cd6a6acSopenharmony_ci if (setpolicytype(type) != 0) { 1996cd6a6acSopenharmony_ci free(type); 2006cd6a6acSopenharmony_ci free(line_buf); 2016cd6a6acSopenharmony_ci fclose(fp); 2026cd6a6acSopenharmony_ci return; 2036cd6a6acSopenharmony_ci } 2046cd6a6acSopenharmony_ci free(type); 2056cd6a6acSopenharmony_ci continue; 2066cd6a6acSopenharmony_ci } else if (!strncmp(buf_p, REQUIRESEUSERS, 2076cd6a6acSopenharmony_ci sizeof(REQUIRESEUSERS) - 1)) { 2086cd6a6acSopenharmony_ci value = buf_p + sizeof(REQUIRESEUSERS) - 1; 2096cd6a6acSopenharmony_ci while (isspace(*value)) 2106cd6a6acSopenharmony_ci value++; 2116cd6a6acSopenharmony_ci intptr = &require_seusers; 2126cd6a6acSopenharmony_ci } else { 2136cd6a6acSopenharmony_ci continue; 2146cd6a6acSopenharmony_ci } 2156cd6a6acSopenharmony_ci 2166cd6a6acSopenharmony_ci if (isdigit(*value)) 2176cd6a6acSopenharmony_ci *intptr = atoi(value); 2186cd6a6acSopenharmony_ci else if (strncasecmp(value, "true", sizeof("true") - 1)) 2196cd6a6acSopenharmony_ci *intptr = 1; 2206cd6a6acSopenharmony_ci else if (strncasecmp 2216cd6a6acSopenharmony_ci (value, "false", sizeof("false") - 1)) 2226cd6a6acSopenharmony_ci *intptr = 0; 2236cd6a6acSopenharmony_ci } 2246cd6a6acSopenharmony_ci free(line_buf); 2256cd6a6acSopenharmony_ci fclose(fp); 2266cd6a6acSopenharmony_ci } 2276cd6a6acSopenharmony_ci 2286cd6a6acSopenharmony_ci if (!selinux_policytype && setpolicytype(SELINUXDEFAULT) != 0) 2296cd6a6acSopenharmony_ci return; 2306cd6a6acSopenharmony_ci 2316cd6a6acSopenharmony_ci if (asprintf(&selinux_policyroot, "%s%s", SELINUXDIR, selinux_policytype) == -1) 2326cd6a6acSopenharmony_ci return; 2336cd6a6acSopenharmony_ci 2346cd6a6acSopenharmony_ci for (i = 0; i < NEL; i++) 2356cd6a6acSopenharmony_ci if (asprintf(&file_paths[i], "%s%s", 2366cd6a6acSopenharmony_ci selinux_policyroot, 2376cd6a6acSopenharmony_ci file_path_suffixes_data.str + 2386cd6a6acSopenharmony_ci file_path_suffixes_idx[i]) 2396cd6a6acSopenharmony_ci == -1) 2406cd6a6acSopenharmony_ci return; 2416cd6a6acSopenharmony_ci} 2426cd6a6acSopenharmony_ci 2436cd6a6acSopenharmony_cistatic void fini_selinux_policyroot(void) __attribute__ ((destructor)); 2446cd6a6acSopenharmony_ci 2456cd6a6acSopenharmony_cistatic void fini_selinux_policyroot(void) 2466cd6a6acSopenharmony_ci{ 2476cd6a6acSopenharmony_ci int i; 2486cd6a6acSopenharmony_ci free(selinux_policyroot); 2496cd6a6acSopenharmony_ci selinux_policyroot = NULL; 2506cd6a6acSopenharmony_ci for (i = 0; i < NEL; i++) { 2516cd6a6acSopenharmony_ci free(file_paths[i]); 2526cd6a6acSopenharmony_ci file_paths[i] = NULL; 2536cd6a6acSopenharmony_ci } 2546cd6a6acSopenharmony_ci free(selinux_policytype); 2556cd6a6acSopenharmony_ci selinux_policytype = NULL; 2566cd6a6acSopenharmony_ci} 2576cd6a6acSopenharmony_ci 2586cd6a6acSopenharmony_civoid selinux_reset_config(void) 2596cd6a6acSopenharmony_ci{ 2606cd6a6acSopenharmony_ci fini_selinux_policyroot(); 2616cd6a6acSopenharmony_ci init_selinux_config(); 2626cd6a6acSopenharmony_ci} 2636cd6a6acSopenharmony_ci 2646cd6a6acSopenharmony_ci 2656cd6a6acSopenharmony_cistatic const char *get_path(int idx) 2666cd6a6acSopenharmony_ci{ 2676cd6a6acSopenharmony_ci __selinux_once(once, init_selinux_config); 2686cd6a6acSopenharmony_ci return file_paths[idx]; 2696cd6a6acSopenharmony_ci} 2706cd6a6acSopenharmony_ci 2716cd6a6acSopenharmony_ciconst char *selinux_default_type_path(void) 2726cd6a6acSopenharmony_ci{ 2736cd6a6acSopenharmony_ci return get_path(DEFAULT_TYPE); 2746cd6a6acSopenharmony_ci} 2756cd6a6acSopenharmony_ci 2766cd6a6acSopenharmony_ci 2776cd6a6acSopenharmony_ciconst char *selinux_policy_root(void) 2786cd6a6acSopenharmony_ci{ 2796cd6a6acSopenharmony_ci __selinux_once(once, init_selinux_config); 2806cd6a6acSopenharmony_ci return selinux_policyroot; 2816cd6a6acSopenharmony_ci} 2826cd6a6acSopenharmony_ci 2836cd6a6acSopenharmony_ciint selinux_set_policy_root(const char *path) 2846cd6a6acSopenharmony_ci{ 2856cd6a6acSopenharmony_ci int i; 2866cd6a6acSopenharmony_ci char *policy_type = strrchr(path, '/'); 2876cd6a6acSopenharmony_ci if (!policy_type) { 2886cd6a6acSopenharmony_ci errno = EINVAL; 2896cd6a6acSopenharmony_ci return -1; 2906cd6a6acSopenharmony_ci } 2916cd6a6acSopenharmony_ci policy_type++; 2926cd6a6acSopenharmony_ci 2936cd6a6acSopenharmony_ci fini_selinux_policyroot(); 2946cd6a6acSopenharmony_ci 2956cd6a6acSopenharmony_ci selinux_policyroot = strdup(path); 2966cd6a6acSopenharmony_ci if (! selinux_policyroot) 2976cd6a6acSopenharmony_ci return -1; 2986cd6a6acSopenharmony_ci 2996cd6a6acSopenharmony_ci if (setpolicytype(policy_type) != 0) 3006cd6a6acSopenharmony_ci return -1; 3016cd6a6acSopenharmony_ci 3026cd6a6acSopenharmony_ci for (i = 0; i < NEL; i++) 3036cd6a6acSopenharmony_ci if (asprintf(&file_paths[i], "%s%s", 3046cd6a6acSopenharmony_ci selinux_policyroot, 3056cd6a6acSopenharmony_ci file_path_suffixes_data.str + 3066cd6a6acSopenharmony_ci file_path_suffixes_idx[i]) 3076cd6a6acSopenharmony_ci == -1) 3086cd6a6acSopenharmony_ci return -1; 3096cd6a6acSopenharmony_ci 3106cd6a6acSopenharmony_ci return 0; 3116cd6a6acSopenharmony_ci} 3126cd6a6acSopenharmony_ci 3136cd6a6acSopenharmony_ciconst char *selinux_path(void) 3146cd6a6acSopenharmony_ci{ 3156cd6a6acSopenharmony_ci return selinux_rootpath; 3166cd6a6acSopenharmony_ci} 3176cd6a6acSopenharmony_ci 3186cd6a6acSopenharmony_ci 3196cd6a6acSopenharmony_ciconst char *selinux_default_context_path(void) 3206cd6a6acSopenharmony_ci{ 3216cd6a6acSopenharmony_ci return get_path(DEFAULT_CONTEXTS); 3226cd6a6acSopenharmony_ci} 3236cd6a6acSopenharmony_ci 3246cd6a6acSopenharmony_ci 3256cd6a6acSopenharmony_ciconst char *selinux_securetty_types_path(void) 3266cd6a6acSopenharmony_ci{ 3276cd6a6acSopenharmony_ci return get_path(SECURETTY_TYPES); 3286cd6a6acSopenharmony_ci} 3296cd6a6acSopenharmony_ci 3306cd6a6acSopenharmony_ci 3316cd6a6acSopenharmony_ciconst char *selinux_failsafe_context_path(void) 3326cd6a6acSopenharmony_ci{ 3336cd6a6acSopenharmony_ci return get_path(FAILSAFE_CONTEXT); 3346cd6a6acSopenharmony_ci} 3356cd6a6acSopenharmony_ci 3366cd6a6acSopenharmony_ci 3376cd6a6acSopenharmony_ciconst char *selinux_removable_context_path(void) 3386cd6a6acSopenharmony_ci{ 3396cd6a6acSopenharmony_ci return get_path(REMOVABLE_CONTEXT); 3406cd6a6acSopenharmony_ci} 3416cd6a6acSopenharmony_ci 3426cd6a6acSopenharmony_ci 3436cd6a6acSopenharmony_ciconst char *selinux_binary_policy_path(void) 3446cd6a6acSopenharmony_ci{ 3456cd6a6acSopenharmony_ci return get_path(BINPOLICY); 3466cd6a6acSopenharmony_ci} 3476cd6a6acSopenharmony_ci 3486cd6a6acSopenharmony_ci 3496cd6a6acSopenharmony_ciconst char *selinux_current_policy_path(void) 3506cd6a6acSopenharmony_ci{ 3516cd6a6acSopenharmony_ci int rc = 0; 3526cd6a6acSopenharmony_ci int vers = 0; 3536cd6a6acSopenharmony_ci static char policy_path[PATH_MAX]; 3546cd6a6acSopenharmony_ci 3556cd6a6acSopenharmony_ci if (selinux_mnt) { 3566cd6a6acSopenharmony_ci snprintf(policy_path, sizeof(policy_path), "%s/policy", selinux_mnt); 3576cd6a6acSopenharmony_ci if (access(policy_path, F_OK) == 0 ) { 3586cd6a6acSopenharmony_ci return policy_path; 3596cd6a6acSopenharmony_ci } 3606cd6a6acSopenharmony_ci } 3616cd6a6acSopenharmony_ci vers = security_policyvers(); 3626cd6a6acSopenharmony_ci do { 3636cd6a6acSopenharmony_ci /* Check prior versions to see if old policy is available */ 3646cd6a6acSopenharmony_ci snprintf(policy_path, sizeof(policy_path), "%s.%d", 3656cd6a6acSopenharmony_ci selinux_binary_policy_path(), vers); 3666cd6a6acSopenharmony_ci } while ((rc = access(policy_path, F_OK)) && --vers > 0); 3676cd6a6acSopenharmony_ci 3686cd6a6acSopenharmony_ci if (rc) return NULL; 3696cd6a6acSopenharmony_ci return policy_path; 3706cd6a6acSopenharmony_ci} 3716cd6a6acSopenharmony_ci 3726cd6a6acSopenharmony_ci 3736cd6a6acSopenharmony_ciconst char *selinux_file_context_path(void) 3746cd6a6acSopenharmony_ci{ 3756cd6a6acSopenharmony_ci return get_path(FILE_CONTEXTS); 3766cd6a6acSopenharmony_ci} 3776cd6a6acSopenharmony_ci 3786cd6a6acSopenharmony_ci 3796cd6a6acSopenharmony_ciconst char *selinux_homedir_context_path(void) 3806cd6a6acSopenharmony_ci{ 3816cd6a6acSopenharmony_ci return get_path(HOMEDIR_CONTEXTS); 3826cd6a6acSopenharmony_ci} 3836cd6a6acSopenharmony_ci 3846cd6a6acSopenharmony_ci 3856cd6a6acSopenharmony_ciconst char *selinux_media_context_path(void) 3866cd6a6acSopenharmony_ci{ 3876cd6a6acSopenharmony_ci return get_path(MEDIA_CONTEXTS); 3886cd6a6acSopenharmony_ci} 3896cd6a6acSopenharmony_ci 3906cd6a6acSopenharmony_ci 3916cd6a6acSopenharmony_ciconst char *selinux_customizable_types_path(void) 3926cd6a6acSopenharmony_ci{ 3936cd6a6acSopenharmony_ci return get_path(CUSTOMIZABLE_TYPES); 3946cd6a6acSopenharmony_ci} 3956cd6a6acSopenharmony_ci 3966cd6a6acSopenharmony_ci 3976cd6a6acSopenharmony_ciconst char *selinux_contexts_path(void) 3986cd6a6acSopenharmony_ci{ 3996cd6a6acSopenharmony_ci return get_path(CONTEXTS_DIR); 4006cd6a6acSopenharmony_ci} 4016cd6a6acSopenharmony_ci 4026cd6a6acSopenharmony_ciconst char *selinux_user_contexts_path(void) 4036cd6a6acSopenharmony_ci{ 4046cd6a6acSopenharmony_ci return get_path(USER_CONTEXTS); 4056cd6a6acSopenharmony_ci} 4066cd6a6acSopenharmony_ci 4076cd6a6acSopenharmony_ci 4086cd6a6acSopenharmony_ci/* Deprecated as local policy booleans no longer supported. */ 4096cd6a6acSopenharmony_ciconst char *selinux_booleans_path(void) 4106cd6a6acSopenharmony_ci{ 4116cd6a6acSopenharmony_ci return get_path(BOOLEANS); 4126cd6a6acSopenharmony_ci} 4136cd6a6acSopenharmony_ci 4146cd6a6acSopenharmony_ci 4156cd6a6acSopenharmony_ci/* Deprecated as no longer supported. */ 4166cd6a6acSopenharmony_ciconst char *selinux_users_path(void) 4176cd6a6acSopenharmony_ci{ 4186cd6a6acSopenharmony_ci return get_path(USERS_DIR); 4196cd6a6acSopenharmony_ci} 4206cd6a6acSopenharmony_ci 4216cd6a6acSopenharmony_ci 4226cd6a6acSopenharmony_ciconst char *selinux_usersconf_path(void) 4236cd6a6acSopenharmony_ci{ 4246cd6a6acSopenharmony_ci return get_path(SEUSERS); 4256cd6a6acSopenharmony_ci} 4266cd6a6acSopenharmony_ci 4276cd6a6acSopenharmony_ci 4286cd6a6acSopenharmony_ciconst char *selinux_translations_path(void) 4296cd6a6acSopenharmony_ci{ 4306cd6a6acSopenharmony_ci return get_path(TRANSLATIONS); 4316cd6a6acSopenharmony_ci} 4326cd6a6acSopenharmony_ci 4336cd6a6acSopenharmony_ci 4346cd6a6acSopenharmony_ciconst char *selinux_colors_path(void) 4356cd6a6acSopenharmony_ci{ 4366cd6a6acSopenharmony_ci return get_path(COLORS); 4376cd6a6acSopenharmony_ci} 4386cd6a6acSopenharmony_ci 4396cd6a6acSopenharmony_ci 4406cd6a6acSopenharmony_ciconst char *selinux_netfilter_context_path(void) 4416cd6a6acSopenharmony_ci{ 4426cd6a6acSopenharmony_ci return get_path(NETFILTER_CONTEXTS); 4436cd6a6acSopenharmony_ci} 4446cd6a6acSopenharmony_ci 4456cd6a6acSopenharmony_ci 4466cd6a6acSopenharmony_ciconst char *selinux_file_context_homedir_path(void) 4476cd6a6acSopenharmony_ci{ 4486cd6a6acSopenharmony_ci return get_path(FILE_CONTEXTS_HOMEDIR); 4496cd6a6acSopenharmony_ci} 4506cd6a6acSopenharmony_ci 4516cd6a6acSopenharmony_ci 4526cd6a6acSopenharmony_ciconst char *selinux_file_context_local_path(void) 4536cd6a6acSopenharmony_ci{ 4546cd6a6acSopenharmony_ci return get_path(FILE_CONTEXTS_LOCAL); 4556cd6a6acSopenharmony_ci} 4566cd6a6acSopenharmony_ci 4576cd6a6acSopenharmony_ci 4586cd6a6acSopenharmony_ciconst char *selinux_x_context_path(void) 4596cd6a6acSopenharmony_ci{ 4606cd6a6acSopenharmony_ci return get_path(X_CONTEXTS); 4616cd6a6acSopenharmony_ci} 4626cd6a6acSopenharmony_ci 4636cd6a6acSopenharmony_ci 4646cd6a6acSopenharmony_ciconst char *selinux_virtual_domain_context_path(void) 4656cd6a6acSopenharmony_ci{ 4666cd6a6acSopenharmony_ci return get_path(VIRTUAL_DOMAIN); 4676cd6a6acSopenharmony_ci} 4686cd6a6acSopenharmony_ci 4696cd6a6acSopenharmony_ci 4706cd6a6acSopenharmony_ciconst char *selinux_virtual_image_context_path(void) 4716cd6a6acSopenharmony_ci{ 4726cd6a6acSopenharmony_ci return get_path(VIRTUAL_IMAGE); 4736cd6a6acSopenharmony_ci} 4746cd6a6acSopenharmony_ci 4756cd6a6acSopenharmony_ci 4766cd6a6acSopenharmony_ciconst char *selinux_lxc_contexts_path(void) 4776cd6a6acSopenharmony_ci{ 4786cd6a6acSopenharmony_ci return get_path(LXC_CONTEXTS); 4796cd6a6acSopenharmony_ci} 4806cd6a6acSopenharmony_ci 4816cd6a6acSopenharmony_ci 4826cd6a6acSopenharmony_ciconst char *selinux_openrc_contexts_path(void) 4836cd6a6acSopenharmony_ci{ 4846cd6a6acSopenharmony_ci return get_path(OPENRC_CONTEXTS); 4856cd6a6acSopenharmony_ci} 4866cd6a6acSopenharmony_ci 4876cd6a6acSopenharmony_ci 4886cd6a6acSopenharmony_ciconst char *selinux_openssh_contexts_path(void) 4896cd6a6acSopenharmony_ci{ 4906cd6a6acSopenharmony_ci return get_path(OPENSSH_CONTEXTS); 4916cd6a6acSopenharmony_ci} 4926cd6a6acSopenharmony_ci 4936cd6a6acSopenharmony_ci 4946cd6a6acSopenharmony_ciconst char *selinux_snapperd_contexts_path(void) 4956cd6a6acSopenharmony_ci{ 4966cd6a6acSopenharmony_ci return get_path(SNAPPERD_CONTEXTS); 4976cd6a6acSopenharmony_ci} 4986cd6a6acSopenharmony_ci 4996cd6a6acSopenharmony_ci 5006cd6a6acSopenharmony_ciconst char *selinux_systemd_contexts_path(void) 5016cd6a6acSopenharmony_ci{ 5026cd6a6acSopenharmony_ci return get_path(SYSTEMD_CONTEXTS); 5036cd6a6acSopenharmony_ci} 5046cd6a6acSopenharmony_ci 5056cd6a6acSopenharmony_ci 5066cd6a6acSopenharmony_ciconst char * selinux_booleans_subs_path(void) { 5076cd6a6acSopenharmony_ci return get_path(BOOLEAN_SUBS); 5086cd6a6acSopenharmony_ci} 5096cd6a6acSopenharmony_ci 5106cd6a6acSopenharmony_ci 5116cd6a6acSopenharmony_ciconst char * selinux_file_context_subs_path(void) { 5126cd6a6acSopenharmony_ci return get_path(FILE_CONTEXT_SUBS); 5136cd6a6acSopenharmony_ci} 5146cd6a6acSopenharmony_ci 5156cd6a6acSopenharmony_ci 5166cd6a6acSopenharmony_ciconst char * selinux_file_context_subs_dist_path(void) { 5176cd6a6acSopenharmony_ci return get_path(FILE_CONTEXT_SUBS_DIST); 5186cd6a6acSopenharmony_ci} 5196cd6a6acSopenharmony_ci 5206cd6a6acSopenharmony_ci 5216cd6a6acSopenharmony_ciconst char *selinux_sepgsql_context_path(void) 5226cd6a6acSopenharmony_ci{ 5236cd6a6acSopenharmony_ci return get_path(SEPGSQL_CONTEXTS); 5246cd6a6acSopenharmony_ci} 5256cd6a6acSopenharmony_ci 526