Blame src/selinux_config.c

Packit 3feee0
#include <stdio.h>
Packit 3feee0
#include <stdio_ext.h>
Packit 3feee0
#include <string.h>
Packit 3feee0
#include <ctype.h>
Packit 3feee0
#include <stddef.h>
Packit 3feee0
#include <stdint.h>
Packit 3feee0
#include <stdlib.h>
Packit 3feee0
#include <limits.h>
Packit 3feee0
#include <unistd.h>
Packit 3feee0
#include <pthread.h>
Packit 3feee0
#include <errno.h>
Packit 3feee0
#include "policy.h"
Packit 3feee0
#include "selinux_internal.h"
Packit 3feee0
#include "get_default_type_internal.h"
Packit 3feee0
Packit 3feee0
#define SELINUXDEFAULT "targeted"
Packit 3feee0
#define SELINUXTYPETAG "SELINUXTYPE="
Packit 3feee0
#define SELINUXTAG "SELINUX="
Packit 3feee0
#define SETLOCALDEFS "SETLOCALDEFS="
Packit 3feee0
#define REQUIRESEUSERS "REQUIRESEUSERS="
Packit 3feee0
Packit 3feee0
/* Indices for file paths arrays. */
Packit 3feee0
#define BINPOLICY         0
Packit 3feee0
#define CONTEXTS_DIR      1
Packit 3feee0
#define FILE_CONTEXTS     2
Packit 3feee0
#define HOMEDIR_CONTEXTS  3
Packit 3feee0
#define DEFAULT_CONTEXTS  4
Packit 3feee0
#define USER_CONTEXTS     5
Packit 3feee0
#define FAILSAFE_CONTEXT  6
Packit 3feee0
#define DEFAULT_TYPE      7
Packit 3feee0
#define BOOLEANS          8
Packit 3feee0
#define MEDIA_CONTEXTS    9
Packit 3feee0
#define REMOVABLE_CONTEXT 10
Packit 3feee0
#define CUSTOMIZABLE_TYPES    11
Packit 3feee0
#define USERS_DIR         12
Packit 3feee0
#define SEUSERS           13
Packit 3feee0
#define TRANSLATIONS      14
Packit 3feee0
#define NETFILTER_CONTEXTS    15
Packit 3feee0
#define FILE_CONTEXTS_HOMEDIR 16
Packit 3feee0
#define FILE_CONTEXTS_LOCAL 17
Packit 3feee0
#define SECURETTY_TYPES   18
Packit 3feee0
#define X_CONTEXTS        19
Packit 3feee0
#define COLORS            20
Packit 3feee0
#define VIRTUAL_DOMAIN    21
Packit 3feee0
#define VIRTUAL_IMAGE     22
Packit 3feee0
#define FILE_CONTEXT_SUBS 23
Packit 3feee0
#define SEPGSQL_CONTEXTS  24
Packit 3feee0
#define FILE_CONTEXT_SUBS_DIST 25
Packit 3feee0
#define LXC_CONTEXTS      26
Packit 3feee0
#define BOOLEAN_SUBS      27
Packit 3feee0
#define OPENSSH_CONTEXTS  28
Packit 3feee0
#define SYSTEMD_CONTEXTS  29
Packit 3feee0
#define SNAPPERD_CONTEXTS 30
Packit 3feee0
#define OPENRC_CONTEXTS   31
Packit 3feee0
#define NEL               32
Packit 3feee0
Packit 3feee0
/* Part of one-time lazy init */
Packit 3feee0
static pthread_once_t once = PTHREAD_ONCE_INIT;
Packit 3feee0
static void init_selinux_config(void);
Packit 3feee0
Packit 3feee0
/* New layout is relative to SELINUXDIR/policytype. */
Packit 3feee0
static char *file_paths[NEL];
Packit 3feee0
#define L1(l) L2(l)
Packit 3feee0
#define L2(l)str##l
Packit 3feee0
static const union file_path_suffixes_data {
Packit 3feee0
	struct {
Packit 3feee0
#define S_(n, s) char L1(__LINE__)[sizeof(s)];
Packit 3feee0
#include "file_path_suffixes.h"
Packit 3feee0
#undef S_
Packit 3feee0
	};
Packit 3feee0
	char str[0];
Packit 3feee0
} file_path_suffixes_data = {
Packit 3feee0
	{
Packit 3feee0
#define S_(n, s) s,
Packit 3feee0
#include "file_path_suffixes.h"
Packit 3feee0
#undef S_
Packit 3feee0
	}
Packit 3feee0
};
Packit 3feee0
static const uint16_t file_path_suffixes_idx[NEL] = {
Packit 3feee0
#define S_(n, s) [n] = offsetof(union file_path_suffixes_data, L1(__LINE__)),
Packit 3feee0
#include "file_path_suffixes.h"
Packit 3feee0
#undef S_
Packit 3feee0
};
Packit 3feee0
Packit 3feee0
#undef L1
Packit 3feee0
#undef L2
Packit 3feee0
Packit 3feee0
int selinux_getenforcemode(int *enforce)
Packit 3feee0
{
Packit 3feee0
	int ret = -1;
Packit 3feee0
	FILE *cfg = fopen(SELINUXCONFIG, "re");
Packit 3feee0
	if (cfg) {
Packit 3feee0
		char *buf;
Packit 3feee0
		int len = sizeof(SELINUXTAG) - 1;
Packit 3feee0
		buf = malloc(selinux_page_size);
Packit 3feee0
		if (!buf) {
Packit 3feee0
			fclose(cfg);
Packit 3feee0
			return -1;
Packit 3feee0
		}
Packit 3feee0
		while (fgets_unlocked(buf, selinux_page_size, cfg)) {
Packit 3feee0
			if (strncmp(buf, SELINUXTAG, len))
Packit 3feee0
				continue;
Packit 3feee0
			if (!strncasecmp
Packit 3feee0
			    (buf + len, "enforcing", sizeof("enforcing") - 1)) {
Packit 3feee0
				*enforce = 1;
Packit 3feee0
				ret = 0;
Packit 3feee0
				break;
Packit 3feee0
			} else
Packit 3feee0
			    if (!strncasecmp
Packit 3feee0
				(buf + len, "permissive",
Packit 3feee0
				 sizeof("permissive") - 1)) {
Packit 3feee0
				*enforce = 0;
Packit 3feee0
				ret = 0;
Packit 3feee0
				break;
Packit 3feee0
			} else
Packit 3feee0
			    if (!strncasecmp
Packit 3feee0
				(buf + len, "disabled",
Packit 3feee0
				 sizeof("disabled") - 1)) {
Packit 3feee0
				*enforce = -1;
Packit 3feee0
				ret = 0;
Packit 3feee0
				break;
Packit 3feee0
			}
Packit 3feee0
		}
Packit 3feee0
		fclose(cfg);
Packit 3feee0
		free(buf);
Packit 3feee0
	}
Packit 3feee0
	return ret;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_getenforcemode)
Packit 3feee0
Packit 3feee0
static char *selinux_policytype;
Packit 3feee0
Packit 3feee0
int selinux_getpolicytype(char **type)
Packit 3feee0
{
Packit 3feee0
	__selinux_once(once, init_selinux_config);
Packit 3feee0
	if (!selinux_policytype)
Packit 3feee0
		return -1;
Packit 3feee0
	*type = strdup(selinux_policytype);
Packit 3feee0
	return *type ? 0 : -1;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_getpolicytype)
Packit 3feee0
Packit 3feee0
static int setpolicytype(const char *type)
Packit 3feee0
{
Packit 3feee0
	free(selinux_policytype);
Packit 3feee0
	selinux_policytype = strdup(type);
Packit 3feee0
	return selinux_policytype ? 0 : -1;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
static char *selinux_policyroot = NULL;
Packit 3feee0
static const char *selinux_rootpath = SELINUXDIR;
Packit 3feee0
Packit 3feee0
static void init_selinux_config(void)
Packit 3feee0
{
Packit 3feee0
	int i, *intptr;
Packit 3feee0
	size_t line_len;
Packit 3feee0
	ssize_t len;
Packit 3feee0
	char *line_buf = NULL, *buf_p, *value, *type = NULL, *end;
Packit 3feee0
	FILE *fp;
Packit 3feee0
Packit 3feee0
	if (selinux_policyroot)
Packit 3feee0
		return;
Packit 3feee0
Packit 3feee0
	fp = fopen(SELINUXCONFIG, "re");
Packit 3feee0
	if (fp) {
Packit 3feee0
		__fsetlocking(fp, FSETLOCKING_BYCALLER);
Packit 3feee0
		while ((len = getline(&line_buf, &line_len, fp)) > 0) {
Packit 3feee0
			if (line_buf[len - 1] == '\n')
Packit 3feee0
				line_buf[len - 1] = 0;
Packit 3feee0
			buf_p = line_buf;
Packit 3feee0
			while (isspace(*buf_p))
Packit 3feee0
				buf_p++;
Packit 3feee0
			if (*buf_p == '#' || *buf_p == 0)
Packit 3feee0
				continue;
Packit 3feee0
Packit 3feee0
			if (!strncasecmp(buf_p, SELINUXTYPETAG,
Packit 3feee0
					 sizeof(SELINUXTYPETAG) - 1)) {
Packit 3feee0
				type = strdup(buf_p + sizeof(SELINUXTYPETAG) - 1);
Packit 3feee0
				if (!type)
Packit 3feee0
					return;
Packit 3feee0
				end = type + strlen(type) - 1;
Packit 3feee0
				while ((end > type) &&
Packit 3feee0
				       (isspace(*end) || iscntrl(*end))) {
Packit 3feee0
					*end = 0;
Packit 3feee0
					end--;
Packit 3feee0
				}
Packit 3feee0
				if (setpolicytype(type) != 0) {
Packit 3feee0
					free(type);
Packit 3feee0
					return;
Packit 3feee0
				}
Packit 3feee0
				free(type);
Packit 3feee0
				continue;
Packit 3feee0
			} else if (!strncmp(buf_p, SETLOCALDEFS,
Packit 3feee0
					    sizeof(SETLOCALDEFS) - 1)) {
Packit 3feee0
				value = buf_p + sizeof(SETLOCALDEFS) - 1;
Packit 3feee0
				intptr = &load_setlocaldefs;
Packit 3feee0
			} else if (!strncmp(buf_p, REQUIRESEUSERS,
Packit 3feee0
					    sizeof(REQUIRESEUSERS) - 1)) {
Packit 3feee0
				value = buf_p + sizeof(REQUIRESEUSERS) - 1;
Packit 3feee0
				intptr = &require_seusers;
Packit 3feee0
			} else {
Packit 3feee0
				continue;
Packit 3feee0
			}
Packit 3feee0
Packit 3feee0
			if (isdigit(*value))
Packit 3feee0
				*intptr = atoi(value);
Packit 3feee0
			else if (strncasecmp(value, "true", sizeof("true") - 1))
Packit 3feee0
				*intptr = 1;
Packit 3feee0
			else if (strncasecmp
Packit 3feee0
				 (value, "false", sizeof("false") - 1))
Packit 3feee0
				*intptr = 0;
Packit 3feee0
		}
Packit 3feee0
		free(line_buf);
Packit 3feee0
		fclose(fp);
Packit 3feee0
	}
Packit 3feee0
Packit 3feee0
	if (!selinux_policytype && setpolicytype(SELINUXDEFAULT) != 0)
Packit 3feee0
		return;
Packit 3feee0
Packit 3feee0
	if (asprintf(&selinux_policyroot, "%s%s", SELINUXDIR, selinux_policytype) == -1)
Packit 3feee0
		return;
Packit 3feee0
Packit 3feee0
	for (i = 0; i < NEL; i++)
Packit 3feee0
		if (asprintf(&file_paths[i], "%s%s",
Packit 3feee0
			     selinux_policyroot,
Packit 3feee0
			     file_path_suffixes_data.str +
Packit 3feee0
			     file_path_suffixes_idx[i])
Packit 3feee0
		    == -1)
Packit 3feee0
			return;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
static void fini_selinux_policyroot(void) __attribute__ ((destructor));
Packit 3feee0
Packit 3feee0
static void fini_selinux_policyroot(void)
Packit 3feee0
{
Packit 3feee0
	int i;
Packit 3feee0
	free(selinux_policyroot);
Packit 3feee0
	selinux_policyroot = NULL;
Packit 3feee0
	for (i = 0; i < NEL; i++) {
Packit 3feee0
		free(file_paths[i]);
Packit 3feee0
		file_paths[i] = NULL;
Packit 3feee0
	}
Packit 3feee0
	free(selinux_policytype);
Packit 3feee0
	selinux_policytype = NULL;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
void selinux_reset_config(void)
Packit 3feee0
{
Packit 3feee0
	fini_selinux_policyroot();
Packit 3feee0
	init_selinux_config();
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_reset_config)
Packit 3feee0
Packit 3feee0
static const char *get_path(int idx)
Packit 3feee0
{
Packit 3feee0
	__selinux_once(once, init_selinux_config);
Packit 3feee0
	return file_paths[idx];
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
const char *selinux_default_type_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(DEFAULT_TYPE);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_default_type_path)
Packit 3feee0
Packit 3feee0
const char *selinux_policy_root(void)
Packit 3feee0
{
Packit 3feee0
	__selinux_once(once, init_selinux_config);
Packit 3feee0
	return selinux_policyroot;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
int selinux_set_policy_root(const char *path)
Packit 3feee0
{
Packit 3feee0
	int i;
Packit 3feee0
	char *policy_type = strrchr(path, '/');
Packit 3feee0
	if (!policy_type) {
Packit 3feee0
		errno = EINVAL;
Packit 3feee0
		return -1;
Packit 3feee0
	}
Packit 3feee0
	policy_type++;
Packit 3feee0
Packit 3feee0
	fini_selinux_policyroot();
Packit 3feee0
Packit 3feee0
	selinux_policyroot = strdup(path);
Packit 3feee0
	if (! selinux_policyroot)
Packit 3feee0
		return -1;
Packit 3feee0
Packit 3feee0
	if (setpolicytype(policy_type) != 0)
Packit 3feee0
		return -1;
Packit 3feee0
Packit 3feee0
	for (i = 0; i < NEL; i++)
Packit 3feee0
		if (asprintf(&file_paths[i], "%s%s",
Packit 3feee0
			     selinux_policyroot,
Packit 3feee0
			     file_path_suffixes_data.str +
Packit 3feee0
			     file_path_suffixes_idx[i])
Packit 3feee0
		    == -1)
Packit 3feee0
			return -1;
Packit 3feee0
Packit 3feee0
	return 0;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
const char *selinux_path(void)
Packit 3feee0
{
Packit 3feee0
	return selinux_rootpath;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_path)
Packit 3feee0
Packit 3feee0
const char *selinux_default_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(DEFAULT_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_default_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_securetty_types_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(SECURETTY_TYPES);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_securetty_types_path)
Packit 3feee0
Packit 3feee0
const char *selinux_failsafe_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(FAILSAFE_CONTEXT);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_failsafe_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_removable_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(REMOVABLE_CONTEXT);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_removable_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_binary_policy_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(BINPOLICY);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_binary_policy_path)
Packit 3feee0
Packit 3feee0
const char *selinux_current_policy_path(void)
Packit 3feee0
{
Packit 3feee0
	int rc = 0;
Packit 3feee0
	int vers = 0;
Packit 3feee0
	static char policy_path[PATH_MAX];
Packit 3feee0
Packit 3feee0
	if (selinux_mnt) {
Packit 3feee0
		snprintf(policy_path, sizeof(policy_path), "%s/policy", selinux_mnt);
Packit 3feee0
		if (access(policy_path, F_OK) == 0 ) {
Packit 3feee0
			return policy_path;
Packit 3feee0
		}
Packit 3feee0
	}
Packit 3feee0
	vers = security_policyvers();
Packit 3feee0
	do {
Packit 3feee0
		/* Check prior versions to see if old policy is available */
Packit 3feee0
		snprintf(policy_path, sizeof(policy_path), "%s.%d",
Packit 3feee0
			 selinux_binary_policy_path(), vers);
Packit 3feee0
	} while ((rc = access(policy_path, F_OK)) && --vers > 0);
Packit 3feee0
Packit 3feee0
	if (rc) return NULL;
Packit 3feee0
	return policy_path;
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_current_policy_path)
Packit 3feee0
Packit 3feee0
const char *selinux_file_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(FILE_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_file_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_homedir_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(HOMEDIR_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_homedir_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_media_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(MEDIA_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_media_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_customizable_types_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(CUSTOMIZABLE_TYPES);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_customizable_types_path)
Packit 3feee0
Packit 3feee0
const char *selinux_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(CONTEXTS_DIR);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
const char *selinux_user_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(USER_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_user_contexts_path)
Packit 3feee0
Packit 3feee0
const char *selinux_booleans_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(BOOLEANS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_booleans_path)
Packit 3feee0
Packit 3feee0
const char *selinux_users_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(USERS_DIR);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_users_path)
Packit 3feee0
Packit 3feee0
const char *selinux_usersconf_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(SEUSERS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_usersconf_path)
Packit 3feee0
Packit 3feee0
const char *selinux_translations_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(TRANSLATIONS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_translations_path)
Packit 3feee0
Packit 3feee0
const char *selinux_colors_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(COLORS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_colors_path)
Packit 3feee0
Packit 3feee0
const char *selinux_netfilter_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(NETFILTER_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_netfilter_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_file_context_homedir_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(FILE_CONTEXTS_HOMEDIR);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_file_context_homedir_path)
Packit 3feee0
Packit 3feee0
const char *selinux_file_context_local_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(FILE_CONTEXTS_LOCAL);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_file_context_local_path)
Packit 3feee0
Packit 3feee0
const char *selinux_x_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(X_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_x_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_virtual_domain_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(VIRTUAL_DOMAIN);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_virtual_domain_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_virtual_image_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(VIRTUAL_IMAGE);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_virtual_image_context_path)
Packit 3feee0
Packit 3feee0
const char *selinux_lxc_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(LXC_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_lxc_contexts_path)
Packit 3feee0
Packit 3feee0
const char *selinux_openrc_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
    return get_path(OPENRC_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_openrc_contexts_path)
Packit 3feee0
Packit 3feee0
const char *selinux_openssh_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
    return get_path(OPENSSH_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_openssh_contexts_path)
Packit 3feee0
Packit 3feee0
const char *selinux_snapperd_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
    return get_path(SNAPPERD_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_snapperd_contexts_path)
Packit 3feee0
Packit 3feee0
const char *selinux_systemd_contexts_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(SYSTEMD_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_systemd_contexts_path)
Packit 3feee0
Packit 3feee0
const char * selinux_booleans_subs_path(void) {
Packit 3feee0
	return get_path(BOOLEAN_SUBS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_booleans_subs_path)
Packit 3feee0
Packit 3feee0
const char * selinux_file_context_subs_path(void) {
Packit 3feee0
	return get_path(FILE_CONTEXT_SUBS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_file_context_subs_path)
Packit 3feee0
Packit 3feee0
const char * selinux_file_context_subs_dist_path(void) {
Packit 3feee0
	return get_path(FILE_CONTEXT_SUBS_DIST);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_file_context_subs_dist_path)
Packit 3feee0
Packit 3feee0
const char *selinux_sepgsql_context_path(void)
Packit 3feee0
{
Packit 3feee0
	return get_path(SEPGSQL_CONTEXTS);
Packit 3feee0
}
Packit 3feee0
Packit 3feee0
hidden_def(selinux_sepgsql_context_path)