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