X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fexecute.c;h=39ec5adbbe44f2783691945a7816c0dd0f393424;hb=5bd4b173605142c7be493aa4d958ebaef21f421d;hp=12a96a76399561af1a32f0f10eac03dfeb69f914;hpb=ff0af2a1660bb122f29713c9b2aff8179f165bb7;p=elogind.git diff --git a/src/core/execute.c b/src/core/execute.c index 12a96a763..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,19 +27,11 @@ #include #include #include -#include -#include #include #include -#include -#include -#include -#include -#include +#include #include #include -#include -#undef basename #ifdef HAVE_PAM #include @@ -82,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 @@ -1417,7 +1409,7 @@ static int exec_child( sprintf(t, "%i", context->oom_score_adjust); r = write_string_file("/proc/self/oom_score_adj", t); - if (r == -EPERM || r == EACCES) { + if (r == -EPERM || r == -EACCES) { log_open(); log_unit_debug_errno(params->unit_id, r, "Failed to adjust OOM setting, assuming containerized execution, ignoring: %m"); log_close(); @@ -1526,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; @@ -1582,9 +1574,9 @@ static int exec_child( if (context->private_tmp && runtime) { if (runtime->tmp_dir) - tmp = strappenda(runtime->tmp_dir, "/tmp"); + tmp = strjoina(runtime->tmp_dir, "/tmp"); if (runtime->var_tmp_dir) - var = strappenda(runtime->var_tmp_dir, "/tmp"); + var = strjoina(runtime->var_tmp_dir, "/tmp"); } r = setup_namespace( @@ -1619,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; } @@ -1627,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; } @@ -2588,7 +2582,7 @@ void exec_command_dump(ExecCommand *c, FILE *f, const char *prefix) { assert(f); prefix = strempty(prefix); - prefix2 = strappenda(prefix, "\t"); + prefix2 = strjoina(prefix, "\t"); cmd = exec_command_line(c->argv); fprintf(f,