selinux: split up mac_selinux_have() from mac_selinux_use()
Let's distuingish the cases where our code takes an active role in selinux management, or just passively reports whatever selinux properties are set. mac_selinux_have() now checks whether selinux is around for the passive stuff, and mac_selinux_use() for the active stuff. The latter checks the former, plus also checks UID == 0, under the assumption that only when we run priviliged selinux management really makes sense. Fixes: #1941
This commit is contained in:
@@ -47,7 +47,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_use(void) {
|
||||
bool mac_selinux_have(void) {
|
||||
#ifdef HAVE_SELINUX
|
||||
if (cached_use < 0)
|
||||
cached_use = is_selinux_enabled() > 0;
|
||||
@@ -58,6 +58,16 @@ bool mac_selinux_use(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;
|
||||
@@ -197,7 +207,7 @@ int mac_selinux_get_create_label_from_exe(const char *exe, char **label) {
|
||||
assert(exe);
|
||||
assert(label);
|
||||
|
||||
if (!mac_selinux_use())
|
||||
if (!mac_selinux_have())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
r = getcon_raw(&mycon);
|
||||
@@ -223,7 +233,7 @@ int mac_selinux_get_our_label(char **label) {
|
||||
assert(label);
|
||||
|
||||
#ifdef HAVE_SELINUX
|
||||
if (!mac_selinux_use())
|
||||
if (!mac_selinux_have())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
r = getcon_raw(label);
|
||||
@@ -247,7 +257,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
|
||||
assert(exe);
|
||||
assert(label);
|
||||
|
||||
if (!mac_selinux_use())
|
||||
if (!mac_selinux_have())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
r = getcon_raw(&mycon);
|
||||
@@ -302,7 +312,7 @@ char* mac_selinux_free(char *label) {
|
||||
if (!label)
|
||||
return NULL;
|
||||
|
||||
if (!mac_selinux_use())
|
||||
if (!mac_selinux_have())
|
||||
return NULL;
|
||||
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "macro.h"
|
||||
|
||||
bool mac_selinux_use(void);
|
||||
bool mac_selinux_have(void);
|
||||
void mac_selinux_retest(void);
|
||||
|
||||
int mac_selinux_init(const char *prefix);
|
||||
|
||||
Reference in New Issue
Block a user