|
|
84b277 |
From 5c2592bf519dc7b2b28cde77f5f35422ec7a9320 Mon Sep 17 00:00:00 2001
|
|
|
84b277 |
From: Michael Scherer <misc@zarb.org>
|
|
|
84b277 |
Date: Thu, 6 Feb 2014 10:05:18 +0100
|
|
|
84b277 |
Subject: [PATCH] exec: Add support for ignoring errors on SELinuxContext by
|
|
|
84b277 |
prefixing it with -, like for others settings.
|
|
|
84b277 |
|
|
|
84b277 |
Also remove call to security_check_context, as this doesn't serve anything, since
|
|
|
84b277 |
setexeccon will fail anyway.
|
|
|
84b277 |
|
|
|
84b277 |
(cherry picked from commit 0d3f7bb3a5bc6d5c0712f88a080fed388981bca3)
|
|
|
84b277 |
|
|
|
84b277 |
Related: #1113790
|
|
|
84b277 |
---
|
|
|
84b277 |
man/systemd.exec.xml | 4 +++-
|
|
|
84b277 |
src/core/execute.c | 20 +++++++++++++-------
|
|
|
84b277 |
2 files changed, 16 insertions(+), 8 deletions(-)
|
|
|
84b277 |
|
|
|
84b277 |
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
|
|
|
84b277 |
index a68cfa7..7608489 100644
|
|
|
84b277 |
--- a/man/systemd.exec.xml
|
|
|
84b277 |
+++ b/man/systemd.exec.xml
|
|
|
84b277 |
@@ -924,7 +924,9 @@
|
|
|
84b277 |
<listitem><para>Set the SELinux context of the
|
|
|
84b277 |
executed process. If set, this will override the
|
|
|
84b277 |
automated domain transition. However, the policy
|
|
|
84b277 |
- still need to autorize the transition. See
|
|
|
84b277 |
+ still need to autorize the transition. This directive
|
|
|
84b277 |
+ is ignored if SELinux is disabled. If prefixed by <literal>-</literal>,
|
|
|
84b277 |
+ all errors will be ignored. See
|
|
|
84b277 |
<citerefentry><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
|
84b277 |
for details.</para></listitem>
|
|
|
84b277 |
</varlistentry>
|
|
|
84b277 |
diff --git a/src/core/execute.c b/src/core/execute.c
|
|
|
84b277 |
index cb6f146..9fc5090 100644
|
|
|
84b277 |
--- a/src/core/execute.c
|
|
|
84b277 |
+++ b/src/core/execute.c
|
|
|
84b277 |
@@ -72,6 +72,7 @@
|
|
|
84b277 |
#include "fileio.h"
|
|
|
84b277 |
#include "unit.h"
|
|
|
84b277 |
#include "async.h"
|
|
|
84b277 |
+#include "selinux-util.h"
|
|
|
84b277 |
|
|
|
84b277 |
#define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
|
|
|
84b277 |
#define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC)
|
|
|
84b277 |
@@ -1473,13 +1474,18 @@ int exec_spawn(ExecCommand *command,
|
|
|
84b277 |
}
|
|
|
84b277 |
#ifdef HAVE_SELINUX
|
|
|
84b277 |
if (context->selinux_context && use_selinux()) {
|
|
|
84b277 |
- err = security_check_context(context->selinux_context);
|
|
|
84b277 |
- if (err < 0) {
|
|
|
84b277 |
- r = EXIT_SELINUX_CONTEXT;
|
|
|
84b277 |
- goto fail_child;
|
|
|
84b277 |
- }
|
|
|
84b277 |
- err = setexeccon(context->selinux_context);
|
|
|
84b277 |
- if (err < 0) {
|
|
|
84b277 |
+ bool ignore;
|
|
|
84b277 |
+ char* c;
|
|
|
84b277 |
+
|
|
|
84b277 |
+ c = context->selinux_context;
|
|
|
84b277 |
+ if (c[0] == '-') {
|
|
|
84b277 |
+ c++;
|
|
|
84b277 |
+ ignore = true;
|
|
|
84b277 |
+ } else
|
|
|
84b277 |
+ ignore = false;
|
|
|
84b277 |
+
|
|
|
84b277 |
+ err = setexeccon(c);
|
|
|
84b277 |
+ if (err < 0 && !ignore) {
|
|
|
84b277 |
r = EXIT_SELINUX_CONTEXT;
|
|
|
84b277 |
goto fail_child;
|
|
|
84b277 |
}
|