X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fexecute.c;h=39ec5adbbe44f2783691945a7816c0dd0f393424;hp=7b071e8c9e2a41045f93e472817cce50c005cae9;hb=5bd4b173605142c7be493aa4d958ebaef21f421d;hpb=e89fe484df6b94fcd775b923327b54eaf0a116e2
diff --git a/src/core/execute.c b/src/core/execute.c
index 7b071e8c9..39ec5adbb 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -19,8 +19,6 @@
along with systemd; If not, see .
***/
-#include
-#include
#include
#include
#include
@@ -29,15 +27,9 @@
#include
#include
#include
-#include
-#include
#include
#include
-#include
-#include
-#include
-#include
-#include
+#include
#include
#include
@@ -80,12 +72,14 @@
#include "errno-list.h"
#include "af-list.h"
#include "mkdir.h"
-#include "apparmor-util.h"
#include "smack-util.h"
#include "bus-endpoint.h"
-#include "label.h"
#include "cap-list.h"
+#ifdef HAVE_APPARMOR
+#include "apparmor-util.h"
+#endif
+
#ifdef HAVE_SECCOMP
#include "seccomp-util.h"
#endif
@@ -1524,7 +1518,7 @@ static int exec_child(
return -ENOMEM;
}
- r = mkdir_safe(p, context->runtime_directory_mode, uid, gid);
+ r = mkdir_safe_label(p, context->runtime_directory_mode, uid, gid);
if (r < 0) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return r;
@@ -1617,7 +1611,8 @@ static int exec_child(
return -errno;
}
- if (chdir(context->working_directory ? context->working_directory : "/") < 0) {
+ if (chdir(context->working_directory ?: "/") < 0 &&
+ !context->working_directory_missing_ok) {
*exit_status = EXIT_CHDIR;
return -errno;
}
@@ -1625,13 +1620,14 @@ static int exec_child(
_cleanup_free_ char *d = NULL;
if (asprintf(&d, "%s/%s",
- context->root_directory ? context->root_directory : "",
- context->working_directory ? context->working_directory : "") < 0) {
+ context->root_directory ?: "",
+ context->working_directory ?: "") < 0) {
*exit_status = EXIT_MEMORY;
return -ENOMEM;
}
- if (chdir(d) < 0) {
+ if (chdir(d) < 0 &&
+ !context->working_directory_missing_ok) {
*exit_status = EXIT_CHDIR;
return -errno;
}