assert(c->type == CONDITION_SECURITY);
if (streq(c->parameter, "selinux"))
- return use_selinux() == !c->negate;
+ return mac_selinux_use() == !c->negate;
+ if (streq(c->parameter, "smack"))
+ return mac_smack_use() == !c->negate;
if (streq(c->parameter, "apparmor"))
- return use_apparmor() == !c->negate;
+ return mac_apparmor_use() == !c->negate;
if (streq(c->parameter, "ima"))
return use_ima() == !c->negate;
- if (streq(c->parameter, "smack"))
- return use_smack() == !c->negate;
return c->negate;
}
#endif
#ifdef HAVE_SELINUX
- if (use_selinux()) {
+ if (mac_selinux_use()) {
if (context->selinux_context) {
err = setexeccon(context->selinux_context);
if (err < 0 && !context->selinux_context_ignore) {
#endif
#ifdef HAVE_APPARMOR
- if (context->apparmor_profile && use_apparmor()) {
+ if (context->apparmor_profile && mac_apparmor_use()) {
err = aa_change_onexec(context->apparmor_profile);
if (err < 0 && !context->apparmor_profile_ignore) {
*error = EXIT_APPARMOR_PROFILE;
NULL, MNT_NONE },
#ifdef HAVE_SMACK
{ "smackfs", "/sys/fs/smackfs", "smackfs", "smackfsdef=*", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
- use_smack, MNT_FATAL },
+ mac_smack_use, MNT_FATAL },
{ "tmpfs", "/dev/shm", "tmpfs", "mode=1777,smackfsroot=*", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
- use_smack, MNT_FATAL },
+ mac_smack_use, MNT_FATAL },
#endif
{ "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
NULL, MNT_FATAL|MNT_IN_CONTAINER },
NULL, MNT_IN_CONTAINER },
#ifdef HAVE_SMACK
{ "tmpfs", "/run", "tmpfs", "mode=755,smackfsroot=*", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
- use_smack, MNT_FATAL },
+ mac_smack_use, MNT_FATAL },
#endif
{ "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
NULL, MNT_FATAL|MNT_IN_CONTAINER },
if (initialized)
return 0;
- if (!use_selinux())
+ if (!mac_selinux_use())
return 0;
r = access_init();
assert(permission);
assert(error);
- if (!use_selinux())
+ if (!mac_selinux_use())
return 0;
r = selinux_access_init(error);
char timespan[FORMAT_TIMESPAN_MAX];
char *label;
- retest_selinux();
+ mac_selinux_retest();
/* Transition to the new context */
r = mac_selinux_get_create_label_from_exe(SYSTEMD_BINARY_PATH, &label);
}
#ifdef HAVE_SELINUX
- if (use_selinux()) {
+ if (mac_selinux_use()) {
one = 1;
r = setsockopt(s->native_fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one));
if (r < 0)
}
#ifdef HAVE_SELINUX
- if (use_selinux()) {
+ if (mac_selinux_use()) {
if (label) {
x = alloca(strlen("_SELINUX_CONTEXT=") + label_len + 1);
}
#ifdef HAVE_SELINUX
- if (use_selinux()) {
+ if (mac_selinux_use()) {
if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT)
log_error("Failed to determine peer security context: %m");
}
}
#ifdef HAVE_SELINUX
- if (use_selinux()) {
+ if (mac_selinux_use()) {
one = 1;
r = setsockopt(s->syslog_fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one));
if (r < 0)
mkdir(p, 0700);
- if (use_smack())
+ if (mac_smack_use())
r = asprintf(&t, "mode=0700,smackfsroot=*,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
else
r = asprintf(&t, "mode=0700,uid=" UID_FMT ",gid=" GID_FMT ",size=%zu", u->uid, u->gid, u->manager->runtime_dir_size);
#include "fileio.h"
#include "apparmor-util.h"
-static int use_apparmor_cached = -1;
+bool mac_apparmor_use(void) {
+ static int cached_use = -1;
-bool use_apparmor(void) {
-
- if (use_apparmor_cached < 0) {
+ if (cached_use < 0) {
_cleanup_free_ char *p = NULL;
- use_apparmor_cached =
+ cached_use =
read_one_line_file("/sys/module/apparmor/parameters/enabled", &p) >= 0 &&
parse_boolean(p) > 0;
}
- return use_apparmor_cached;
+ return cached_use;
}
#include <stdbool.h>
-bool use_apparmor(void);
+bool mac_apparmor_use(void);
int label_fix(const char *path, bool ignore_enoent, bool ignore_erofs) {
int r = 0;
- if (use_selinux()) {
+ if (mac_selinux_use()) {
r = mac_selinux_fix(path, ignore_enoent, ignore_erofs);
if (r < 0)
return r;
}
- if (use_smack()) {
+ if (mac_smack_use()) {
r = mac_smack_relabel_in_dev(path);
if (r < 0)
return r;
static int label_mkdir(const char *path, mode_t mode) {
int r;
- if (use_selinux()) {
+ if (mac_selinux_use()) {
r = mac_selinux_mkdir(path, mode);
if (r < 0)
return r;
}
- if (use_smack()) {
+ if (mac_smack_use()) {
r = mkdir(path, mode);
if (r < 0 && errno != EEXIST)
return -errno;
#define _cleanup_security_context_free_ _cleanup_(freeconp)
#define _cleanup_context_free_ _cleanup_(context_freep)
-static int use_selinux_cached = -1;
+static int cached_use = -1;
static struct selabel_handle *label_hnd = NULL;
#endif
-bool use_selinux(void) {
+bool mac_selinux_use(void) {
#ifdef HAVE_SELINUX
- if (use_selinux_cached < 0)
- use_selinux_cached = is_selinux_enabled() > 0;
+ if (cached_use < 0)
+ cached_use = is_selinux_enabled() > 0;
- return use_selinux_cached;
+ return cached_use;
#else
return false;
#endif
}
-void retest_selinux(void) {
+void mac_selinux_retest(void) {
#ifdef HAVE_SELINUX
- use_selinux_cached = -1;
+ cached_use = -1;
#endif
}
usec_t before_timestamp, after_timestamp;
struct mallinfo before_mallinfo, after_mallinfo;
- if (!use_selinux())
+ if (!mac_selinux_use())
return 0;
if (label_hnd)
void mac_selinux_finish(void) {
#ifdef HAVE_SELINUX
- if (!use_selinux())
+ if (!mac_selinux_use())
return;
if (label_hnd)
security_context_t mycon = NULL, fcon = NULL;
security_class_t sclass;
- if (!use_selinux()) {
+ if (!mac_selinux_use()) {
*label = NULL;
return 0;
}
#ifdef HAVE_SELINUX
security_context_t filecon = NULL;
- if (!use_selinux() || !label_hnd)
+ if (!mac_selinux_use() || !label_hnd)
return 0;
r = selabel_lookup_raw(label_hnd, &filecon, path, mode);
int mac_selinux_socket_set(const char *label) {
#ifdef HAVE_SELINUX
- if (!use_selinux())
+ if (!mac_selinux_use())
return 0;
if (setsockcreatecon((security_context_t) label) < 0) {
#ifdef HAVE_SELINUX
PROTECT_ERRNO;
- if (!use_selinux())
+ if (!mac_selinux_use())
return;
setfscreatecon(NULL);
#ifdef HAVE_SELINUX
PROTECT_ERRNO;
- if (!use_selinux())
+ if (!mac_selinux_use())
return;
setsockcreatecon(NULL);
void mac_selinux_free(const char *label) {
#ifdef HAVE_SELINUX
- if (!use_selinux())
+ if (!mac_selinux_use())
return;
freecon((security_context_t) label);
assert(addr);
assert(addrlen >= sizeof(sa_family_t));
- if (!use_selinux() || !label_hnd)
+ if (!mac_selinux_use() || !label_hnd)
goto skipped;
/* Filter out non-local sockets */
int r = 0;
#ifdef HAVE_SELINUX
- if (!use_selinux())
+ if (!mac_selinux_use())
return 0;
r = setfilecon(path, (char *)label);
#include <stdio.h>
#include <stdbool.h>
-bool use_selinux(void);
-void retest_selinux(void);
+bool mac_selinux_use(void);
+void mac_selinux_retest(void);
int mac_selinux_init(const char *prefix);
-int mac_selinux_fix(const char *path, bool ignore_enoent, bool ignore_erofs);
void mac_selinux_finish(void);
+int mac_selinux_fix(const char *path, bool ignore_enoent, bool ignore_erofs);
+
int mac_selinux_socket_set(const char *label);
void mac_selinux_socket_clear(void);
#include "path-util.h"
#include "smack-util.h"
-bool use_smack(void) {
+bool mac_smack_use(void) {
#ifdef HAVE_SMACK
- static int use_smack_cached = -1;
+ static int cached_use = -1;
- if (use_smack_cached < 0)
- use_smack_cached = access("/sys/fs/smackfs/", F_OK) >= 0;
+ if (cached_use < 0)
+ cached_use = access("/sys/fs/smackfs/", F_OK) >= 0;
- return use_smack_cached;
+ return cached_use;
#else
return false;
#endif
int mac_smack_set_path(const char *path, const char *label) {
#ifdef HAVE_SMACK
- if (!use_smack())
+ if (!mac_smack_use())
return 0;
if (label)
int mac_smack_set_fd(int fd, const char *label) {
#ifdef HAVE_SMACK
- if (!use_smack())
+ if (!mac_smack_use())
return 0;
return fsetxattr(fd, "security.SMACK64", label, strlen(label), 0);
int mac_smack_set_ip_out_fd(int fd, const char *label) {
#ifdef HAVE_SMACK
- if (!use_smack())
+ if (!mac_smack_use())
return 0;
return fsetxattr(fd, "security.SMACK64IPOUT", label, strlen(label), 0);
int mac_smack_set_ip_in_fd(int fd, const char *label) {
#ifdef HAVE_SMACK
- if (!use_smack())
+ if (!mac_smack_use())
return 0;
return fsetxattr(fd, "security.SMACK64IPIN", label, strlen(label), 0);
#define SMACK_FLOOR_LABEL "_"
#define SMACK_STAR_LABEL "*"
-bool use_smack(void);
+bool mac_smack_use(void);
int mac_smack_set_path(const char *path, const char *label);
int mac_smack_set_fd(int fd, const char *label);