Revert "selinux: split up mac_selinux_have() from mac_selinux_use()"

This reverts commit 6355e75610.

The previously mentioned commit inadvertently broke a lot of SELinux related
functionality for both unprivileged users and systemd instances running as
MANAGER_USER.  In particular, setting the correct SELinux context after a User=
directive is used would fail to work since we attempt to set the security
context after changing UID.  Additionally, it causes activated socket units to
be mislabeled for systemd --user processes since setsockcreatecon() would never
be called.

Reverting this fixes the issues with labeling outlined above, and reinstates
SELinux access checks on unprivileged user services.
This commit is contained in:
Gary Tierney
2017-05-12 14:43:39 +01:00
parent 6e4177315f
commit 6d395665e5
10 changed files with 16 additions and 27 deletions
+5 -15
View File
@@ -53,7 +53,7 @@ static struct selabel_handle *label_hnd = NULL;
#define log_enforcing(...) log_full(security_getenforce() == 1 ? LOG_ERR : LOG_DEBUG, __VA_ARGS__)
#endif
bool mac_selinux_have(void) {
bool mac_selinux_use(void) {
#ifdef HAVE_SELINUX
if (cached_use < 0)
cached_use = is_selinux_enabled() > 0;
@@ -64,16 +64,6 @@ bool mac_selinux_have(void) {
#endif
}
bool mac_selinux_use(void) {
if (!mac_selinux_have())
return false;
/* Never try to configure SELinux features if we aren't
* root */
return getuid() == 0;
}
void mac_selinux_retest(void) {
#ifdef HAVE_SELINUX
cached_use = -1;
@@ -205,7 +195,7 @@ int mac_selinux_get_create_label_from_exe(const char *exe, char **label) {
assert(exe);
assert(label);
if (!mac_selinux_have())
if (!mac_selinux_use())
return -EOPNOTSUPP;
r = getcon_raw(&mycon);
@@ -231,7 +221,7 @@ int mac_selinux_get_our_label(char **label) {
assert(label);
#ifdef HAVE_SELINUX
if (!mac_selinux_have())
if (!mac_selinux_use())
return -EOPNOTSUPP;
r = getcon_raw(label);
@@ -255,7 +245,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
assert(exe);
assert(label);
if (!mac_selinux_have())
if (!mac_selinux_use())
return -EOPNOTSUPP;
r = getcon_raw(&mycon);
@@ -310,7 +300,7 @@ char* mac_selinux_free(char *label) {
if (!label)
return NULL;
if (!mac_selinux_have())
if (!mac_selinux_use())
return NULL;
-1
View File
@@ -26,7 +26,6 @@
#include "macro.h"
bool mac_selinux_use(void);
bool mac_selinux_have(void);
void mac_selinux_retest(void);
int mac_selinux_init(void);